On Wed, Jul 23, 2025 at 02:51:27PM +0200, Christian Brauner wrote: > > You can just add a if (IS_ENABLED(CONFIG_BLOCK)) check around it. > > > > > > But the layering here feels wrong. sget_dev and it's helper operate > > purely on the dev_t. Anything actually dealing with a block device / > > gendisk should be in the helpers that otherwise use it. > > Either we add a lookup_bdev_alive() variant that checks whether the > inode is still hashed when looking up the dev_t and we accept that this > deals with the obvious cases and accept that this is racy... I don't think racyness matters here. The block device can die any time, and the addition here is just to catch the cases where it might have already been dead for a nicer interface. > Or we add lookup_bdev_no_open() that returns the block device with the > reference bumped, paired with lookup_bdev_put_no_open(). Afaiu, that > would prevent deletion. We could even put this behind a > guard(bdev_no_open)(fc->source). The reference count bump shouldn't > matter there. Christoph? Nothing prevents deletion, it will only get delayed until after the open_mutex critical section. I still think GD_DEAD is the best check here, as it potentially gets set earlier than unshashing the inode, but in the end both of the racy checks should be perfectly fine.