nbd: use the atomic queue limits API in nbd_set_size
authorChristoph Hellwig <hch@lst.de>
Thu, 29 Feb 2024 14:38:46 +0000 (06:38 -0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 1 Mar 2024 16:08:22 +0000 (09:08 -0700)
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>
drivers/block/nbd.c

index 22ee0ed..9d4ec92 100644 (file)
@@ -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,
                loff_t blksize)
 {
+       struct queue_limits lim;
+       int error;
+
        if (!blksize)
                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)
                return 0;
 
+       lim = queue_limits_start_update(nbd->disk->queue);
        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
-               blk_queue_max_discard_sectors(nbd->disk->queue, 0);
-       blk_queue_logical_block_size(nbd->disk->queue, blksize);
-       blk_queue_physical_block_size(nbd->disk->queue, blksize);
+               lim.max_hw_discard_sectors = 0;
+       lim.logical_block_size = blksize;
+       lim.physical_block_size = blksize;
+       error = queue_limits_commit_update(nbd->disk->queue, &lim);
+       if (error)
+               return error;
 
        if (max_part)
                set_bit(GD_NEED_PART_SCAN, &nbd->disk->state);