mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
nbd: don't update block size after device is started
[ Upstream commitb40813ddcd] Mounted NBD device can be resized, one use case is rbd-nbd. Fix the issue by setting up default block size, then not touch it in nbd_size_update() any more. This kind of usage is aligned with loop which has same use case too. Cc: stable@vger.kernel.org Fixes:c8a83a6b54("nbd: Use set_blocksize() to set device blocksize") Reported-by: lining <lining2020x@163.com> Signed-off-by: Ming Lei <ming.lei@redhat.com> Cc: Josef Bacik <josef@toxicpanda.com> Cc: Jan Kara <jack@suse.cz> Tested-by: lining <lining2020x@163.com> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
68e51bf376
commit
65d733cd9d
@@ -276,7 +276,7 @@ static void nbd_size_clear(struct nbd_device *nbd)
|
||||
}
|
||||
}
|
||||
|
||||
static void nbd_size_update(struct nbd_device *nbd)
|
||||
static void nbd_size_update(struct nbd_device *nbd, bool start)
|
||||
{
|
||||
struct nbd_config *config = nbd->config;
|
||||
struct block_device *bdev = bdget_disk(nbd->disk, 0);
|
||||
@@ -292,7 +292,8 @@ static void nbd_size_update(struct nbd_device *nbd)
|
||||
if (bdev) {
|
||||
if (bdev->bd_disk) {
|
||||
bd_set_size(bdev, config->bytesize);
|
||||
set_blocksize(bdev, config->blksize);
|
||||
if (start)
|
||||
set_blocksize(bdev, config->blksize);
|
||||
} else
|
||||
bdev->bd_invalidated = 1;
|
||||
bdput(bdev);
|
||||
@@ -307,7 +308,7 @@ static void nbd_size_set(struct nbd_device *nbd, loff_t blocksize,
|
||||
config->blksize = blocksize;
|
||||
config->bytesize = blocksize * nr_blocks;
|
||||
if (nbd->task_recv != NULL)
|
||||
nbd_size_update(nbd);
|
||||
nbd_size_update(nbd, false);
|
||||
}
|
||||
|
||||
static void nbd_complete_rq(struct request *req)
|
||||
@@ -1244,7 +1245,7 @@ static int nbd_start_device(struct nbd_device *nbd)
|
||||
args->index = i;
|
||||
queue_work(nbd->recv_workq, &args->work);
|
||||
}
|
||||
nbd_size_update(nbd);
|
||||
nbd_size_update(nbd, true);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user