Hey, thanks for looking over things, it lead me to check things more carefully, but I think everything's safe. The short answer is that if execution context `B` meets the requirements for `writer_act`, then it has somehow verified that `Entry` will not be successfully dropped during the call. Most commonly, this will be based on locking mechanisms in `debugfs` itself which will cause `debugfs_remove` to not complete until the underlying read operation does. It would not be possible to *ever* release an entity backing a file if `debugfs_remove` did not have this behavior or something similar. This means what will actually happen looks like this: 1. A creates an `Entry` 2. B begins a read operation. All DebugFS file_ops are [proxied](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/inode.c#L464) so that they [call `debugfs_file_get` before](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/file.c#L340) the provided implementation and [`debugfs_file_put` afterwards](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/file.c#L344), so we call `debugfs_file_get` 3. B calls `writer_act`, using the `debugfs_file_get` permission as its rationale for satisfying the safety condition. 4. A starts to drop Entry 5. A calls `debugfs_remove` 6. A reaches the point where it [waits for all users to leave the file](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/inode.c#L749-L771), blocking. `A` cannot proceed until the event triggers, because someone has a refcount on the file. 7. B finishes the read, [calls `debugfs_file_put`](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/file.c#L344), which [unblocks A](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/file.c#L175-L182) 8. A continues to destruct, and now T is invalid 9. Future calls to read the fd fail with `EIO`, because attempts to call `debugfs_file_get` [are unlinked](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/file.c#L136-L137). In the unlikely event that it's somehow not unlinked, it will at the very least be zero refcount, because that was a requirement to finish the destruction, which [also makes it return `EIO`](https://elixir.bootlin.com/linux/v6.18-rc4/source/fs/debugfs/file.c#L139-L140) I hope that helps explain things. If you think that I'm still missing some path, I'd be happy to hear about it.