block: Remove elevator required features
authorDamien Le Moal <dlemoal@kernel.org>
Mon, 8 Apr 2024 01:41:22 +0000 (10:41 +0900)
committerJens Axboe <axboe@kernel.dk>
Wed, 17 Apr 2024 14:44:03 +0000 (08:44 -0600)
The only elevator feature ever implemented is ELEVATOR_F_ZBD_SEQ_WRITE
for signaling that a scheduler implements zone write locking to tightly
control the dispatching order of write operations to zoned block
devices. With the removal of zone write locking support in mq-deadline
and the reliance of all block device drivers on the block layer zone
write plugging to control ordering of write operations to zones, the
elevator feature ELEVATOR_F_ZBD_SEQ_WRITE is completely unused.
Remove it, and also remove the now unused code for filtering the
possible schedulers for a block device based on required features.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Tested-by: Hans Holmberg <hans.holmberg@wdc.com>
Tested-by: Dennis Maisenbacher <dennis.maisenbacher@wdc.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20240408014128.205141-23-dlemoal@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-settings.c
block/elevator.c
block/elevator.h
include/linux/blkdev.h

index c0197e1e748545e8d760a1f979f57f18a319cc4a..715f4b6356c4652d663d32a7abf7bb9f358e3379 100644 (file)
@@ -1052,22 +1052,6 @@ void blk_queue_write_cache(struct request_queue *q, bool wc, bool fua)
 }
 EXPORT_SYMBOL_GPL(blk_queue_write_cache);
 
-/**
- * blk_queue_required_elevator_features - Set a queue required elevator features
- * @q:         the request queue for the target device
- * @features:  Required elevator features OR'ed together
- *
- * Tell the block layer that for the device controlled through @q, only the
- * only elevators that can be used are those that implement at least the set of
- * features specified by @features.
- */
-void blk_queue_required_elevator_features(struct request_queue *q,
-                                         unsigned int features)
-{
-       q->required_elevator_features = features;
-}
-EXPORT_SYMBOL_GPL(blk_queue_required_elevator_features);
-
 /**
  * blk_queue_can_use_dma_map_merging - configure queue for merging segments.
  * @q:         the request queue for the device
index 5ff093cb3cf8f5221b01e7bd57229e7582d8d3b9..f64ebd726e588acd86f9046c79c17c705e379372 100644 (file)
@@ -83,13 +83,6 @@ bool elv_bio_merge_ok(struct request *rq, struct bio *bio)
 }
 EXPORT_SYMBOL(elv_bio_merge_ok);
 
-static inline bool elv_support_features(struct request_queue *q,
-               const struct elevator_type *e)
-{
-       return (q->required_elevator_features & e->elevator_features) ==
-               q->required_elevator_features;
-}
-
 /**
  * elevator_match - Check whether @e's name or alias matches @name
  * @e: Scheduler to test
@@ -120,7 +113,7 @@ static struct elevator_type *elevator_find_get(struct request_queue *q,
 
        spin_lock(&elv_list_lock);
        e = __elevator_find(name);
-       if (e && (!elv_support_features(q, e) || !elevator_tryget(e)))
+       if (e && (!elevator_tryget(e)))
                e = NULL;
        spin_unlock(&elv_list_lock);
        return e;
@@ -580,34 +573,8 @@ static struct elevator_type *elevator_get_default(struct request_queue *q)
 }
 
 /*
- * Get the first elevator providing the features required by the request queue.
- * Default to "none" if no matching elevator is found.
- */
-static struct elevator_type *elevator_get_by_features(struct request_queue *q)
-{
-       struct elevator_type *e, *found = NULL;
-
-       spin_lock(&elv_list_lock);
-
-       list_for_each_entry(e, &elv_list, list) {
-               if (elv_support_features(q, e)) {
-                       found = e;
-                       break;
-               }
-       }
-
-       if (found && !elevator_tryget(found))
-               found = NULL;
-
-       spin_unlock(&elv_list_lock);
-       return found;
-}
-
-/*
- * For a device queue that has no required features, use the default elevator
- * settings. Otherwise, use the first elevator available matching the required
- * features. If no suitable elevator is find or if the chosen elevator
- * initialization fails, fall back to the "none" elevator (no elevator).
+ * Use the default elevator settings. If the chosen elevator initialization
+ * fails, fall back to the "none" elevator (no elevator).
  */
 void elevator_init_mq(struct request_queue *q)
 {
@@ -622,10 +589,7 @@ void elevator_init_mq(struct request_queue *q)
        if (unlikely(q->elevator))
                return;
 
-       if (!q->required_elevator_features)
-               e = elevator_get_default(q);
-       else
-               e = elevator_get_by_features(q);
+       e = elevator_get_default(q);
        if (!e)
                return;
 
@@ -781,7 +745,7 @@ ssize_t elv_iosched_show(struct request_queue *q, char *name)
        list_for_each_entry(e, &elv_list, list) {
                if (e == cur)
                        len += sprintf(name+len, "[%s] ", e->elevator_name);
-               else if (elv_support_features(q, e))
+               else
                        len += sprintf(name+len, "%s ", e->elevator_name);
        }
        spin_unlock(&elv_list_lock);
index 7ca3d7b6ed8289fca0f1261eb9a5001018fc04cc..e9a050a96e530569fa6bc540de800a1ebfb4154d 100644 (file)
@@ -74,7 +74,6 @@ struct elevator_type
        struct elv_fs_entry *elevator_attrs;
        const char *elevator_name;
        const char *elevator_alias;
-       const unsigned int elevator_features;
        struct module *elevator_owner;
 #ifdef CONFIG_BLK_DEBUG_FS
        const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
index fbc6860b3622617cb77372b6722770bafee5dfc8..017e9d0641773589e781d9d0f67497346bff9705 100644 (file)
@@ -453,8 +453,6 @@ struct request_queue {
 
        atomic_t                nr_active_requests_shared_tags;
 
-       unsigned int            required_elevator_features;
-
        struct blk_mq_tags      *sched_shared_tags;
 
        struct list_head        icq_list;
@@ -958,14 +956,6 @@ disk_alloc_independent_access_ranges(struct gendisk *disk, int nr_ia_ranges);
 void disk_set_independent_access_ranges(struct gendisk *disk,
                                struct blk_independent_access_ranges *iars);
 
-/*
- * Elevator features for blk_queue_required_elevator_features:
- */
-/* Supports zoned block devices sequential write constraint */
-#define ELEVATOR_F_ZBD_SEQ_WRITE       (1U << 0)
-
-extern void blk_queue_required_elevator_features(struct request_queue *q,
-                                                unsigned int features);
 extern bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
                                              struct device *dev);