scm_blk: pass queue_limits to blk_mq_alloc_disk
authorChristoph Hellwig <hch@lst.de>
Thu, 15 Feb 2024 07:02:58 +0000 (08:02 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 19 Feb 2024 23:59:32 +0000 (16:59 -0700)
Pass the few limits scm_block imposes directly to blk_mq_alloc_disk
instead of setting them one at a time.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20240215070300.2200308-16-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/s390/block/scm_blk.c

index d05b2e2..9f6fdd0 100644 (file)
@@ -435,10 +435,17 @@ static const struct blk_mq_ops scm_mq_ops = {
 
 int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev)
 {
-       unsigned int devindex, nr_max_blk;
+       struct queue_limits lim = {
+               .logical_block_size     = 1 << 12,
+       };
+       unsigned int devindex;
        struct request_queue *rq;
        int len, ret;
 
+       lim.max_segments = min(scmdev->nr_max_block,
+               (unsigned int) (PAGE_SIZE / sizeof(struct aidaw)));
+       lim.max_hw_sectors = lim.max_segments << 3; /* 8 * 512 = blk_size */
+
        devindex = atomic_inc_return(&nr_devices) - 1;
        /* scma..scmz + scmaa..scmzz */
        if (devindex > 701) {
@@ -462,18 +469,12 @@ int scm_blk_dev_setup(struct scm_blk_dev *bdev, struct scm_device *scmdev)
        if (ret)
                goto out;
 
-       bdev->gendisk = blk_mq_alloc_disk(&bdev->tag_set, NULL, scmdev);
+       bdev->gendisk = blk_mq_alloc_disk(&bdev->tag_set, &lim, scmdev);
        if (IS_ERR(bdev->gendisk)) {
                ret = PTR_ERR(bdev->gendisk);
                goto out_tag;
        }
        rq = bdev->rq = bdev->gendisk->queue;
-       nr_max_blk = min(scmdev->nr_max_block,
-                        (unsigned int) (PAGE_SIZE / sizeof(struct aidaw)));
-
-       blk_queue_logical_block_size(rq, 1 << 12);
-       blk_queue_max_hw_sectors(rq, nr_max_blk << 3); /* 8 * 512 = blk_size */
-       blk_queue_max_segments(rq, nr_max_blk);
        blk_queue_flag_set(QUEUE_FLAG_NONROT, rq);
        blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, rq);