If a file system is mounted on the nbd during a disconnect, resetting
the size to 0, might change the block size and destroy the buffer_head
mappings. This will cause a infinite loop when the file system looks for
the buffer_heads for flushing.

Only set the file size to 0, if we are the only opener of the nbd.

Signed-off-by: Michael Tretter <m.tret...@pengutronix.de>
---
 drivers/block/nbd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 5f2a4240a204..0d1dbb60430b 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -1118,7 +1118,8 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, 
struct block_device *b
        if (ret)
                sock_shutdown(nbd);
        mutex_lock(&nbd->config_lock);
-       bd_set_size(bdev, 0);
+       if (bdev->bd_openers <= 1)
+               bd_set_size(bdev, 0);
        /* user requested, ignore socket errors */
        if (test_bit(NBD_DISCONNECT_REQUESTED, &config->runtime_flags))
                ret = 0;
-- 
2.16.1

Reply via email to