drbd: pass the max_hw_sectors limit to blk_alloc_disk
authorChristoph Hellwig <hch@lst.de>
Tue, 5 Mar 2024 13:40:35 +0000 (06:40 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 6 Mar 2024 15:30:34 +0000 (08:30 -0700)
Pass a queue_limits structure with the max_hw_sectors limit to
blk_alloc_disk instead of updating the limit on the allocated gendisk.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240305134041.137006-2-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/drbd/drbd_main.c

index cea1e537fd56c1e28136c31ca15d66c440798fca..113b441d4d3670c15f2b10c85b0ec6f82c7ab002 100644 (file)
@@ -2690,6 +2690,14 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
        int id;
        int vnr = adm_ctx->volume;
        enum drbd_ret_code err = ERR_NOMEM;
+       struct queue_limits lim = {
+               /*
+                * Setting the max_hw_sectors to an odd value of 8kibyte here.
+                * This triggers a max_bio_size message upon first attach or
+                * connect.
+                */
+               .max_hw_sectors         = DRBD_MAX_BIO_SIZE_SAFE >> 8,
+       };
 
        device = minor_to_device(minor);
        if (device)
@@ -2708,7 +2716,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
 
        drbd_init_set_defaults(device);
 
-       disk = blk_alloc_disk(NULL, NUMA_NO_NODE);
+       disk = blk_alloc_disk(&lim, NUMA_NO_NODE);
        if (IS_ERR(disk)) {
                err = PTR_ERR(disk);
                goto out_no_disk;
@@ -2729,9 +2737,6 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
 
        blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, disk->queue);
        blk_queue_write_cache(disk->queue, true, true);
-       /* Setting the max_hw_sectors to an odd value of 8kibyte here
-          This triggers a max_bio_size message upon first attach or connect */
-       blk_queue_max_hw_sectors(disk->queue, DRBD_MAX_BIO_SIZE_SAFE >> 8);
 
        device->md_io.page = alloc_page(GFP_KERNEL);
        if (!device->md_io.page)