mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-01 06:39:05 +00:00
nbd: use the atomic queue limits API in nbd_set_size
Use queue_limits_start_update / queue_limits_commit_update to update all the limits in one go and with proper sanity checking. Signed-off-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20240229143846.1047223-4-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
242a49e5c8
commit
268283244c
@ -319,6 +319,9 @@ static void nbd_mark_nsock_dead(struct nbd_device *nbd, struct nbd_sock *nsock,
|
|||||||
static int __nbd_set_size(struct nbd_device *nbd, loff_t bytesize,
|
static int __nbd_set_size(struct nbd_device *nbd, loff_t bytesize,
|
||||||
loff_t blksize)
|
loff_t blksize)
|
||||||
{
|
{
|
||||||
|
struct queue_limits lim;
|
||||||
|
int error;
|
||||||
|
|
||||||
if (!blksize)
|
if (!blksize)
|
||||||
blksize = 1u << NBD_DEF_BLKSIZE_BITS;
|
blksize = 1u << NBD_DEF_BLKSIZE_BITS;
|
||||||
|
|
||||||
@ -334,12 +337,16 @@ static int __nbd_set_size(struct nbd_device *nbd, loff_t bytesize,
|
|||||||
if (!nbd->pid)
|
if (!nbd->pid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
lim = queue_limits_start_update(nbd->disk->queue);
|
||||||
if (nbd->config->flags & NBD_FLAG_SEND_TRIM)
|
if (nbd->config->flags & NBD_FLAG_SEND_TRIM)
|
||||||
blk_queue_max_discard_sectors(nbd->disk->queue, UINT_MAX);
|
lim.max_hw_discard_sectors = UINT_MAX;
|
||||||
else
|
else
|
||||||
blk_queue_max_discard_sectors(nbd->disk->queue, 0);
|
lim.max_hw_discard_sectors = 0;
|
||||||
blk_queue_logical_block_size(nbd->disk->queue, blksize);
|
lim.logical_block_size = blksize;
|
||||||
blk_queue_physical_block_size(nbd->disk->queue, blksize);
|
lim.physical_block_size = blksize;
|
||||||
|
error = queue_limits_commit_update(nbd->disk->queue, &lim);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
|
||||||
if (max_part)
|
if (max_part)
|
||||||
set_bit(GD_NEED_PART_SCAN, &nbd->disk->state);
|
set_bit(GD_NEED_PART_SCAN, &nbd->disk->state);
|
||||||
|
Loading…
Reference in New Issue
Block a user