bcache: pass queue_limits to blk_mq_alloc_disk
[linux-2.6-microblaze.git] / drivers / md / bcache / super.c
index 9955ecf..d06a964 100644 (file)
@@ -900,6 +900,16 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,
        struct request_queue *q;
        const size_t max_stripes = min_t(size_t, INT_MAX,
                                         SIZE_MAX / sizeof(atomic_t));
+       struct queue_limits lim = {
+               .max_hw_sectors         = UINT_MAX,
+               .max_sectors            = UINT_MAX,
+               .max_segment_size       = UINT_MAX,
+               .max_segments           = BIO_MAX_VECS,
+               .max_hw_discard_sectors = UINT_MAX,
+               .io_min                 = block_size,
+               .logical_block_size     = block_size,
+               .physical_block_size    = block_size,
+       };
        uint64_t n;
        int idx;
 
@@ -935,7 +945,20 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,
                        BIOSET_NEED_BVECS|BIOSET_NEED_RESCUER))
                goto out_ida_remove;
 
-       d->disk = blk_alloc_disk(NULL, NUMA_NO_NODE);
+       if (lim.logical_block_size > PAGE_SIZE && cached_bdev) {
+               /*
+                * This should only happen with BCACHE_SB_VERSION_BDEV.
+                * Block/page size is checked for BCACHE_SB_VERSION_CDEV.
+                */
+               pr_info("bcache%i: sb/logical block size (%u) greater than page size (%lu) falling back to device logical block size (%u)\n",
+                       idx, lim.logical_block_size,
+                       PAGE_SIZE, bdev_logical_block_size(cached_bdev));
+
+               /* This also adjusts physical block size/min io size if needed */
+               lim.logical_block_size = bdev_logical_block_size(cached_bdev);
+       }
+
+       d->disk = blk_alloc_disk(&lim, NUMA_NO_NODE);
        if (IS_ERR(d->disk))
                goto out_bioset_exit;
 
@@ -949,27 +972,6 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,
        d->disk->private_data   = d;
 
        q = d->disk->queue;
-       q->limits.max_hw_sectors        = UINT_MAX;
-       q->limits.max_sectors           = UINT_MAX;
-       q->limits.max_segment_size      = UINT_MAX;
-       q->limits.max_segments          = BIO_MAX_VECS;
-       blk_queue_max_discard_sectors(q, UINT_MAX);
-       q->limits.io_min                = block_size;
-       q->limits.logical_block_size    = block_size;
-       q->limits.physical_block_size   = block_size;
-
-       if (q->limits.logical_block_size > PAGE_SIZE && cached_bdev) {
-               /*
-                * This should only happen with BCACHE_SB_VERSION_BDEV.
-                * Block/page size is checked for BCACHE_SB_VERSION_CDEV.
-                */
-               pr_info("%s: sb/logical block size (%u) greater than page size (%lu) falling back to device logical block size (%u)\n",
-                       d->disk->disk_name, q->limits.logical_block_size,
-                       PAGE_SIZE, bdev_logical_block_size(cached_bdev));
-
-               /* This also adjusts physical block size/min io size if needed */
-               blk_queue_logical_block_size(q, bdev_logical_block_size(cached_bdev));
-       }
 
        blk_queue_flag_set(QUEUE_FLAG_NONROT, d->disk->queue);