linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Damien Le Moal <dlemoal@kernel.org>
To: linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
	linux-scsi@vger.kernel.org,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	dm-devel@lists.linux.dev, Mike Snitzer <snitzer@redhat.com>,
	linux-nvme@lists.infradead.org, Keith Busch <kbusch@kernel.org>,
	Christoph Hellwig <hch@lst.de>
Subject: [PATCH v5 22/28] block: Remove elevator required features
Date: Wed,  3 Apr 2024 17:42:41 +0900	[thread overview]
Message-ID: <20240403084247.856481-23-dlemoal@kernel.org> (raw)
In-Reply-To: <20240403084247.856481-1-dlemoal@kernel.org>

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>
---
 block/blk-settings.c   | 16 ---------------
 block/elevator.c       | 46 +++++-------------------------------------
 block/elevator.h       |  1 -
 include/linux/blkdev.h | 10 ---------
 4 files changed, 5 insertions(+), 68 deletions(-)

diff --git a/block/blk-settings.c b/block/blk-settings.c
index c0197e1e7485..715f4b6356c4 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -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
diff --git a/block/elevator.c b/block/elevator.c
index 5ff093cb3cf8..f64ebd726e58 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -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);
diff --git a/block/elevator.h b/block/elevator.h
index 7ca3d7b6ed82..e9a050a96e53 100644
--- a/block/elevator.h
+++ b/block/elevator.h
@@ -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;
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 19f59e0e5f29..618d354ceb94 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -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;
@@ -959,14 +957,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);
 
-- 
2.44.0


  parent reply	other threads:[~2024-04-03  8:43 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-03  8:42 [PATCH v5 00/28] Zone write plugging Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 01/28] block: Restore sector of flush requests Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 02/28] block: Remove req_bio_endio() Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 03/28] block: Introduce blk_zone_update_request_bio() Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 04/28] block: Introduce bio_straddles_zones() and bio_offset_from_zone_start() Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 05/28] block: Allow using bio_attempt_back_merge() internally Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 06/28] block: Remember zone capacity when revalidating zones Damien Le Moal
2024-04-04 17:35   ` Bart Van Assche
2024-04-03  8:42 ` [PATCH v5 07/28] block: Introduce zone write plugging Damien Le Moal
2024-04-03  9:44   ` Christoph Hellwig
2024-04-03 15:28   ` Hannes Reinecke
2024-04-04 18:31   ` Bart Van Assche
2024-04-04 23:07     ` Damien Le Moal
2024-04-04 23:18     ` Damien Le Moal
2024-04-04 23:42       ` Bart Van Assche
2024-04-05  0:02         ` Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 08/28] block: Fake max open zones limit when there is no limit Damien Le Moal
2024-04-03  9:43   ` Christoph Hellwig
2024-04-03 15:28   ` Hannes Reinecke
2024-04-04 19:04   ` Bart Van Assche
2024-04-03  8:42 ` [PATCH v5 09/28] block: Allow zero value of max_zone_append_sectors queue limit Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 10/28] block: Implement zone append emulation Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 11/28] block: Allow BIO-based drivers to use blk_revalidate_disk_zones() Damien Le Moal
2024-04-04 19:10   ` Bart Van Assche
2024-04-03  8:42 ` [PATCH v5 12/28] dm: Use the block layer zone append emulation Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 13/28] scsi: sd: " Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 14/28] ublk_drv: Do not request ELEVATOR_F_ZBD_SEQ_WRITE elevator feature Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 15/28] null_blk: " Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 16/28] null_blk: Introduce zone_append_max_sectors attribute Damien Le Moal
2024-04-04 19:19   ` Bart Van Assche
2024-04-03  8:42 ` [PATCH v5 17/28] null_blk: Introduce fua attribute Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 18/28] nvmet: zns: Do not reference the gendisk conv_zones_bitmap Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 19/28] block: Remove BLK_STS_ZONE_RESOURCE Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 20/28] block: Simplify blk_revalidate_disk_zones() interface Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 21/28] block: mq-deadline: Remove support for zone write locking Damien Le Moal
2024-04-03  8:42 ` Damien Le Moal [this message]
2024-04-03  8:42 ` [PATCH v5 23/28] block: Do not check zone type in blk_check_zone_append() Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 24/28] block: Move zone related debugfs attribute to blk-zoned.c Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 25/28] block: Replace zone_wlock debugfs entry with zone_wplugs entry Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 26/28] block: Remove zone write locking Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 27/28] block: Do not force select mq-deadline with CONFIG_BLK_DEV_ZONED Damien Le Moal
2024-04-03  8:42 ` [PATCH v5 28/28] block: Do not special-case plugging of zone write operations Damien Le Moal
2024-04-04 13:40 ` [PATCH v5 00/28] Zone write plugging Hans Holmberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240403084247.856481-23-dlemoal@kernel.org \
    --to=dlemoal@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=dm-devel@lists.linux.dev \
    --cc=hch@lst.de \
    --cc=kbusch@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=snitzer@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).