]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcache: move calculation of stripe_size and io_opt into bcache_device_init
authorChristoph Hellwig <hch@lst.de>
Mon, 26 Feb 2024 10:48:26 +0000 (11:48 +0100)
committerJens Axboe <axboe@kernel.dk>
Wed, 6 Mar 2024 15:34:19 +0000 (08:34 -0700)
bcache currently calculates the stripe size for the non-cached_dev
case directly in bcache_device_init, but for the cached_dev case it does
it in the caller.  Consolidate it in one places, which also enables
setting the io_opt queue_limit before allocating the gendisk so that it
can be passed in instead of changing the limit just after the allocation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Coly Li <colyli@suse.de>
Link: https://lore.kernel.org/r/20240226104826.283067-2-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/super.c

index d06a9649d30269bd9bf8819d0fcecda1d9ba149e..f716c3265f5cf0b7bcf128abdb0ba5b53d581d3c 100644 (file)
@@ -913,6 +913,10 @@ static int bcache_device_init(struct bcache_device *d, unsigned int block_size,
        uint64_t n;
        int idx;
 
+       if (cached_bdev) {
+               d->stripe_size = bdev_io_opt(cached_bdev) >> SECTOR_SHIFT;
+               lim.io_opt = umax(block_size, bdev_io_opt(cached_bdev));
+       }
        if (!d->stripe_size)
                d->stripe_size = 1 << 31;
        else if (d->stripe_size < BCH_MIN_STRIPE_SZ)
@@ -1418,9 +1422,7 @@ static int cached_dev_init(struct cached_dev *dc, unsigned int block_size)
                hlist_add_head(&io->hash, dc->io_hash + RECENT_IO);
        }
 
-       dc->disk.stripe_size = q->limits.io_opt >> 9;
-
-       if (dc->disk.stripe_size)
+       if (bdev_io_opt(dc->bdev))
                dc->partial_stripes_expensive =
                        q->limits.raid_partial_stripes_expensive;
 
@@ -1430,9 +1432,6 @@ static int cached_dev_init(struct cached_dev *dc, unsigned int block_size)
        if (ret)
                return ret;
 
-       blk_queue_io_opt(dc->disk.disk->queue,
-               max(queue_io_opt(dc->disk.disk->queue), queue_io_opt(q)));
-
        atomic_set(&dc->io_errors, 0);
        dc->io_disable = false;
        dc->error_limit = DEFAULT_CACHED_DEV_ERROR_LIMIT;