On 2023-10-02 1:21 AM, Christoph Hellwig wrote: > On Sun, Oct 01, 2023 at 07:10:53PM +0200, Wouter Verhelst wrote: >>> So what are the semantics of clearing the socket? >>> >>> The <= 6.5 behavior of invalidating fs caches, but not actually marking >>> the fs shutdown is pretty broken, especially if this expects to resurrect >>> the device and thus the file system later on. >> >> nbd-client -d calls >> >> ioctl(nbd, NBD_DISCONNECT); >> ioctl(nbd, NBD_CLEAR_SOCK); >> >> (error handling removed for clarity) >> >> where "nbd" is the file handle to the nbd device. This expects that the >> device is cleared and that then the device can be reused for a different >> connection, much like "losetup -d". Expecting that the next connection >> would talk to the same file system is wrong. > > So a fs shutdown seems like a the right thing. So I'm a little confused > on what actualy broke here. I'm not too familiar with the block subsystem, but my understanding is that blk_mark_disk_dead(nbd->disk) is permanent -- there is no way to un-mark a disk as dead. So this makes the device (e.g. /dev/nbd0) permanently unusable after the call to ioctl(nbd, NBD_CLEAR_SOCK). Like Wouter said, the semantics should be similar to a loop device, where the same block device can be reused after being disconnected. That was why I suggested disk_force_media_change() as called from __loop_clr_fd(). The loop driver doesn't call blk_mark_disk_dead() anywhere. Regards, Samuel