On 2023-08-11 5:08 AM, Christoph Hellwig wrote: > nbd_clear_sock_ioctl kills the socket and with that the block > device. Instead of just invalidating file system buffers, > mark the device as dead, which will also invalidate the buffers > as part of the proper shutdown sequence. This also includes > invalidating partitions if there are any. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > drivers/block/nbd.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > > diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c > index 8576d696c7a221..42e0159bb258fa 100644 > --- a/drivers/block/nbd.c > +++ b/drivers/block/nbd.c > @@ -1434,12 +1434,10 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd) > return ret; > } > > -static void nbd_clear_sock_ioctl(struct nbd_device *nbd, > - struct block_device *bdev) > +static void nbd_clear_sock_ioctl(struct nbd_device *nbd) > { > + blk_mark_disk_dead(nbd->disk); > nbd_clear_sock(nbd); > - __invalidate_device(bdev, true); > - nbd_bdev_reset(nbd); This change breaks nbd-client, which calls the NBD_CLEAR_SOCK ioctl during device setup and socket reconnection. After merging this series (bisected to 511fb5bafed1), all NBD devices are immediately dead on arrival: [ 14.605849] nbd0: detected capacity change from 0 to 4194304 [ 14.606211] Buffer I/O error on dev nbd0, logical block 0, async page read [ 14.619101] Buffer I/O error on dev nbd0, logical block 0, async page read [ 14.630490] nbd0: unable to read partition table I wonder if disk_force_media_change() is the right thing to call here instead. Regards, Samuel > if (test_and_clear_bit(NBD_RT_HAS_CONFIG_REF, > &nbd->config->runtime_flags)) > nbd_config_put(nbd); > @@ -1465,7 +1463,7 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd, > case NBD_DISCONNECT: > return nbd_disconnect(nbd); > case NBD_CLEAR_SOCK: > - nbd_clear_sock_ioctl(nbd, bdev); > + nbd_clear_sock_ioctl(nbd); > return 0; > case NBD_SET_SOCK: > return nbd_add_socket(nbd, arg, false);