]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
block: add a bdev_limits helper
authorChristoph Hellwig <hch@lst.de>
Tue, 29 Oct 2024 14:19:37 +0000 (15:19 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 29 Oct 2024 15:15:00 +0000 (09:15 -0600)
Add a helper to get the queue_limits from the bdev without having to
poke into the request_queue.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Link: https://lore.kernel.org/r/20241029141937.249920-1-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-merge.c
block/blk-settings.c
drivers/md/dm-cache-target.c
drivers/md/dm-clone-target.c
drivers/md/dm-thin.c
fs/btrfs/zoned.c
include/linux/blkdev.h

index 8b9a9646aed8b1e1252ef74839e98bd457c76d14..d813d799cee72caa0755fec696f10b252efe91ac 100644 (file)
@@ -411,10 +411,9 @@ struct bio *bio_split_zone_append(struct bio *bio,
  */
 struct bio *bio_split_to_limits(struct bio *bio)
 {
-       const struct queue_limits *lim = &bdev_get_queue(bio->bi_bdev)->limits;
        unsigned int nr_segs;
 
-       return __bio_split_to_limits(bio, lim, &nr_segs);
+       return __bio_split_to_limits(bio, bdev_limits(bio->bi_bdev), &nr_segs);
 }
 EXPORT_SYMBOL(bio_split_to_limits);
 
index a446654ddee5ef0c8d617b94639d340ae92f11d0..95fc39d098721157305d790eb9fe42a633558882 100644 (file)
@@ -661,7 +661,7 @@ EXPORT_SYMBOL(blk_stack_limits);
 void queue_limits_stack_bdev(struct queue_limits *t, struct block_device *bdev,
                sector_t offset, const char *pfx)
 {
-       if (blk_stack_limits(t, &bdev_get_queue(bdev)->limits,
+       if (blk_stack_limits(t, bdev_limits(bdev),
                        get_start_sect(bdev) + offset))
                pr_notice("%s: Warning: Device %pg is misaligned\n",
                        pfx, bdev);
index aaeeabfab09b0add08bdae18d816ea9541901ccb..c4520ff7fe1a8ae7780b63735d0a8f1c621c1ed4 100644 (file)
@@ -3360,7 +3360,7 @@ static int cache_iterate_devices(struct dm_target *ti,
 static void disable_passdown_if_not_supported(struct cache *cache)
 {
        struct block_device *origin_bdev = cache->origin_dev->bdev;
-       struct queue_limits *origin_limits = &bdev_get_queue(origin_bdev)->limits;
+       struct queue_limits *origin_limits = bdev_limits(origin_bdev);
        const char *reason = NULL;
 
        if (!cache->features.discard_passdown)
@@ -3382,7 +3382,7 @@ static void disable_passdown_if_not_supported(struct cache *cache)
 static void set_discard_limits(struct cache *cache, struct queue_limits *limits)
 {
        struct block_device *origin_bdev = cache->origin_dev->bdev;
-       struct queue_limits *origin_limits = &bdev_get_queue(origin_bdev)->limits;
+       struct queue_limits *origin_limits = bdev_limits(origin_bdev);
 
        if (!cache->features.discard_passdown) {
                /* No passdown is done so setting own virtual limits */
index 12bbe487a4c89506412be292e7d0322f84eb5438..e956d980672c80e8b1ee87b8aa7a9f53877e0bba 100644 (file)
@@ -2020,7 +2020,7 @@ static void clone_resume(struct dm_target *ti)
 static void disable_passdown_if_not_supported(struct clone *clone)
 {
        struct block_device *dest_dev = clone->dest_dev->bdev;
-       struct queue_limits *dest_limits = &bdev_get_queue(dest_dev)->limits;
+       struct queue_limits *dest_limits = bdev_limits(dest_dev);
        const char *reason = NULL;
 
        if (!test_bit(DM_CLONE_DISCARD_PASSDOWN, &clone->flags))
@@ -2041,7 +2041,7 @@ static void disable_passdown_if_not_supported(struct clone *clone)
 static void set_discard_limits(struct clone *clone, struct queue_limits *limits)
 {
        struct block_device *dest_bdev = clone->dest_dev->bdev;
-       struct queue_limits *dest_limits = &bdev_get_queue(dest_bdev)->limits;
+       struct queue_limits *dest_limits = bdev_limits(dest_bdev);
 
        if (!test_bit(DM_CLONE_DISCARD_PASSDOWN, &clone->flags)) {
                /* No passdown is done so we set our own virtual limits */
index 89632ce9776056aee6ab7d6f207ba24f7f6ddff6..9095f19a84f3c6ee12e147a8c75de799ab73c6aa 100644 (file)
@@ -2842,7 +2842,7 @@ static void disable_discard_passdown_if_not_supported(struct pool_c *pt)
 {
        struct pool *pool = pt->pool;
        struct block_device *data_bdev = pt->data_dev->bdev;
-       struct queue_limits *data_limits = &bdev_get_queue(data_bdev)->limits;
+       struct queue_limits *data_limits = bdev_limits(data_bdev);
        const char *reason = NULL;
 
        if (!pt->adjusted_pf.discard_passdown)
index 69d03feea4e0ecfc84784943950b2bd39178bed8..46b9386957e6b92d8e58a7956374e6cb96cbb007 100644 (file)
@@ -707,11 +707,8 @@ int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info)
                 * zoned mode. In this case, we don't have a valid max zone
                 * append size.
                 */
-               if (bdev_is_zoned(device->bdev)) {
-                       blk_stack_limits(lim,
-                                        &bdev_get_queue(device->bdev)->limits,
-                                        0);
-               }
+               if (bdev_is_zoned(device->bdev))
+                       blk_stack_limits(lim, bdev_limits(device->bdev), 0);
        }
 
        /*
index d0a52ed05e60c480ecc02b95649bf1f3348c103c..7bfc877e159e1e81ec0d0747eaaa06d3d856cdb7 100644 (file)
@@ -1159,6 +1159,11 @@ enum blk_default_limits {
  */
 #define BLK_DEF_MAX_SECTORS_CAP        2560u
 
+static inline struct queue_limits *bdev_limits(struct block_device *bdev)
+{
+       return &bdev_get_queue(bdev)->limits;
+}
+
 static inline unsigned long queue_segment_boundary(const struct request_queue *q)
 {
        return q->limits.seg_boundary_mask;
@@ -1293,23 +1298,23 @@ unsigned int bdev_discard_alignment(struct block_device *bdev);
 
 static inline unsigned int bdev_max_discard_sectors(struct block_device *bdev)
 {
-       return bdev_get_queue(bdev)->limits.max_discard_sectors;
+       return bdev_limits(bdev)->max_discard_sectors;
 }
 
 static inline unsigned int bdev_discard_granularity(struct block_device *bdev)
 {
-       return bdev_get_queue(bdev)->limits.discard_granularity;
+       return bdev_limits(bdev)->discard_granularity;
 }
 
 static inline unsigned int
 bdev_max_secure_erase_sectors(struct block_device *bdev)
 {
-       return bdev_get_queue(bdev)->limits.max_secure_erase_sectors;
+       return bdev_limits(bdev)->max_secure_erase_sectors;
 }
 
 static inline unsigned int bdev_write_zeroes_sectors(struct block_device *bdev)
 {
-       return bdev_get_queue(bdev)->limits.max_write_zeroes_sectors;
+       return bdev_limits(bdev)->max_write_zeroes_sectors;
 }
 
 static inline bool bdev_nonrot(struct block_device *bdev)
@@ -1345,7 +1350,7 @@ static inline bool bdev_write_cache(struct block_device *bdev)
 
 static inline bool bdev_fua(struct block_device *bdev)
 {
-       return bdev_get_queue(bdev)->limits.features & BLK_FEAT_FUA;
+       return bdev_limits(bdev)->features & BLK_FEAT_FUA;
 }
 
 static inline bool bdev_nowait(struct block_device *bdev)