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) {
        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);