public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write()
@ 2025-11-11 23:28 Bart Van Assche
  2025-11-11 23:29 ` [PATCH v2 1/3] blk-zoned: Fix a typo in a source code comment Bart Van Assche
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Bart Van Assche @ 2025-11-11 23:28 UTC (permalink / raw)
  To: Jens Axboe; +Cc: linux-block, Christoph Hellwig, Bart Van Assche

Hi Jens,

This series includes three small patches for the zoned block device code: a
typo is fixed, a lockdep annotation is added and the code for handling zoned
writes is made slightly easier to follow. Please consider these patches for the
next merge window.

Thanks,

Bart.

Changes compared to v1:
 - Combined patches 3 and 4 into a single patch.
 - Renamed a goto label.
 - Removed the local variable "schedule_bio_work".

Bart Van Assche (3):
  blk-zoned: Fix a typo in a source code comment
  blk-zoned: Document disk_zone_wplug_schedule_bio_work() locking
  blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller

 block/blk-zoned.c | 46 ++++++++++++++++++++--------------------------
 1 file changed, 20 insertions(+), 26 deletions(-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/3] blk-zoned: Fix a typo in a source code comment
  2025-11-11 23:28 [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Bart Van Assche
@ 2025-11-11 23:29 ` Bart Van Assche
  2025-11-11 23:29 ` [PATCH v2 2/3] blk-zoned: Document disk_zone_wplug_schedule_bio_work() locking Bart Van Assche
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Bart Van Assche @ 2025-11-11 23:29 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Bart Van Assche,
	Chaitanya Kulkarni, Damien Le Moal

Remove a superfluous parenthesis that was introduced by commit fa8555630b32
("blk-zoned: Improve the queue reference count strategy documentation").

Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/blk-zoned.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index 3791755bc6ad..57ab2b365c2d 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -730,7 +730,7 @@ static inline void blk_zone_wplug_bio_io_error(struct blk_zone_wplug *zwplug,
 	bio_clear_flag(bio, BIO_ZONE_WRITE_PLUGGING);
 	bio_io_error(bio);
 	disk_put_zone_wplug(zwplug);
-	/* Drop the reference taken by disk_zone_wplug_add_bio(() */
+	/* Drop the reference taken by disk_zone_wplug_add_bio(). */
 	blk_queue_exit(q);
 }
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/3] blk-zoned: Document disk_zone_wplug_schedule_bio_work() locking
  2025-11-11 23:28 [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Bart Van Assche
  2025-11-11 23:29 ` [PATCH v2 1/3] blk-zoned: Fix a typo in a source code comment Bart Van Assche
@ 2025-11-11 23:29 ` Bart Van Assche
  2025-11-11 23:29 ` [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller Bart Van Assche
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Bart Van Assche @ 2025-11-11 23:29 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Bart Van Assche,
	Chaitanya Kulkarni, Damien Le Moal

Document that all callers hold this lock because the code in
disk_zone_wplug_schedule_bio_work() depends on this.

Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/blk-zoned.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index 57ab2b365c2d..5487d5eb2650 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -1188,6 +1188,8 @@ void blk_zone_mgmt_bio_endio(struct bio *bio)
 static void disk_zone_wplug_schedule_bio_work(struct gendisk *disk,
 					      struct blk_zone_wplug *zwplug)
 {
+	lockdep_assert_held(&zwplug->lock);
+
 	/*
 	 * Take a reference on the zone write plug and schedule the submission
 	 * of the next plugged BIO. blk_zone_wplug_bio_work() will release the

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller
  2025-11-11 23:28 [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Bart Van Assche
  2025-11-11 23:29 ` [PATCH v2 1/3] blk-zoned: Fix a typo in a source code comment Bart Van Assche
  2025-11-11 23:29 ` [PATCH v2 2/3] blk-zoned: Document disk_zone_wplug_schedule_bio_work() locking Bart Van Assche
@ 2025-11-11 23:29 ` Bart Van Assche
  2025-11-12  8:31   ` Christoph Hellwig
  2025-11-12  8:36   ` Damien Le Moal
  2025-11-12 21:04 ` [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Martin K. Petersen
  2025-11-12 21:05 ` Jens Axboe
  4 siblings, 2 replies; 8+ messages in thread
From: Bart Van Assche @ 2025-11-11 23:29 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Bart Van Assche, Damien Le Moal

Move the following code into the only caller of disk_zone_wplug_add_bio():
 - The code for clearing the REQ_NOWAIT flag.
 - The code that sets the BLK_ZONE_WPLUG_PLUGGED flag.
 - The disk_zone_wplug_schedule_bio_work() call.

This patch moves all code that is related to REQ_NOWAIT or to bio
scheduling into a single function. Additionally, the 'schedule_bio_work'
variable is removed. No functionality has been changed.

Cc: Damien Le Moal <dlemoal@kernel.org>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/blk-zoned.c | 42 +++++++++++++++++-------------------------
 1 file changed, 17 insertions(+), 25 deletions(-)

diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index 5487d5eb2650..85de45c3f6be 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -1204,8 +1204,6 @@ static inline void disk_zone_wplug_add_bio(struct gendisk *disk,
 				struct blk_zone_wplug *zwplug,
 				struct bio *bio, unsigned int nr_segs)
 {
-	bool schedule_bio_work = false;
-
 	/*
 	 * Grab an extra reference on the BIO request queue usage counter.
 	 * This reference will be reused to submit a request for the BIO for
@@ -1221,16 +1219,6 @@ static inline void disk_zone_wplug_add_bio(struct gendisk *disk,
 	 */
 	bio_clear_polled(bio);
 
-	/*
-	 * REQ_NOWAIT BIOs are always handled using the zone write plug BIO
-	 * work, which can block. So clear the REQ_NOWAIT flag and schedule the
-	 * work if this is the first BIO we are plugging.
-	 */
-	if (bio->bi_opf & REQ_NOWAIT) {
-		schedule_bio_work = !(zwplug->flags & BLK_ZONE_WPLUG_PLUGGED);
-		bio->bi_opf &= ~REQ_NOWAIT;
-	}
-
 	/*
 	 * Reuse the poll cookie field to store the number of segments when
 	 * split to the hardware limits.
@@ -1246,11 +1234,6 @@ static inline void disk_zone_wplug_add_bio(struct gendisk *disk,
 	bio_list_add(&zwplug->bio_list, bio);
 	trace_disk_zone_wplug_add_bio(zwplug->disk->queue, zwplug->zone_no,
 				      bio->bi_iter.bi_sector, bio_sectors(bio));
-
-	zwplug->flags |= BLK_ZONE_WPLUG_PLUGGED;
-
-	if (schedule_bio_work)
-		disk_zone_wplug_schedule_bio_work(disk, zwplug);
 }
 
 /*
@@ -1461,14 +1444,17 @@ static bool blk_zone_wplug_handle_write(struct bio *bio, unsigned int nr_segs)
 	bio_set_flag(bio, BIO_ZONE_WRITE_PLUGGING);
 
 	/*
-	 * If the zone is already plugged, add the BIO to the plug BIO list.
-	 * Do the same for REQ_NOWAIT BIOs to ensure that we will not see a
-	 * BLK_STS_AGAIN failure if we let the BIO execute.
-	 * Otherwise, plug and let the BIO execute.
+	 * Add REQ_NOWAIT BIOs to the plug list to ensure that we will not see a
+	 * BLK_STS_AGAIN failure if we let the caller submit the BIO.
 	 */
-	if ((zwplug->flags & BLK_ZONE_WPLUG_PLUGGED) ||
-	    (bio->bi_opf & REQ_NOWAIT))
-		goto plug;
+	if (bio->bi_opf & REQ_NOWAIT) {
+		bio->bi_opf &= ~REQ_NOWAIT;
+		goto queue_bio;
+	}
+
+	/* If the zone is already plugged, add the BIO to the BIO plug list. */
+	if (zwplug->flags & BLK_ZONE_WPLUG_PLUGGED)
+		goto queue_bio;
 
 	if (!blk_zone_wplug_prepare_bio(zwplug, bio)) {
 		spin_unlock_irqrestore(&zwplug->lock, flags);
@@ -1476,15 +1462,21 @@ static bool blk_zone_wplug_handle_write(struct bio *bio, unsigned int nr_segs)
 		return true;
 	}
 
+	/* Otherwise, plug and let the caller submit the BIO. */
 	zwplug->flags |= BLK_ZONE_WPLUG_PLUGGED;
 
 	spin_unlock_irqrestore(&zwplug->lock, flags);
 
 	return false;
 
-plug:
+queue_bio:
 	disk_zone_wplug_add_bio(disk, zwplug, bio, nr_segs);
 
+	if (!(zwplug->flags & BLK_ZONE_WPLUG_PLUGGED)) {
+		zwplug->flags |= BLK_ZONE_WPLUG_PLUGGED;
+		disk_zone_wplug_schedule_bio_work(disk, zwplug);
+	}
+
 	spin_unlock_irqrestore(&zwplug->lock, flags);
 
 	return true;

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller
  2025-11-11 23:29 ` [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller Bart Van Assche
@ 2025-11-12  8:31   ` Christoph Hellwig
  2025-11-12  8:36   ` Damien Le Moal
  1 sibling, 0 replies; 8+ messages in thread
From: Christoph Hellwig @ 2025-11-12  8:31 UTC (permalink / raw)
  To: Bart Van Assche
  Cc: Jens Axboe, linux-block, Christoph Hellwig, Damien Le Moal

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller
  2025-11-11 23:29 ` [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller Bart Van Assche
  2025-11-12  8:31   ` Christoph Hellwig
@ 2025-11-12  8:36   ` Damien Le Moal
  1 sibling, 0 replies; 8+ messages in thread
From: Damien Le Moal @ 2025-11-12  8:36 UTC (permalink / raw)
  To: Bart Van Assche, Jens Axboe; +Cc: linux-block, Christoph Hellwig

On 11/12/25 08:29, Bart Van Assche wrote:
> Move the following code into the only caller of disk_zone_wplug_add_bio():
>  - The code for clearing the REQ_NOWAIT flag.
>  - The code that sets the BLK_ZONE_WPLUG_PLUGGED flag.
>  - The disk_zone_wplug_schedule_bio_work() call.
> 
> This patch moves all code that is related to REQ_NOWAIT or to bio
> scheduling into a single function. Additionally, the 'schedule_bio_work'
> variable is removed. No functionality has been changed.
> 
> Cc: Damien Le Moal <dlemoal@kernel.org>
> Cc: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>

Reviewed-by: Damien Le Moal <dlmoal@kernel.org>

-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write()
  2025-11-11 23:28 [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Bart Van Assche
                   ` (2 preceding siblings ...)
  2025-11-11 23:29 ` [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller Bart Van Assche
@ 2025-11-12 21:04 ` Martin K. Petersen
  2025-11-12 21:05 ` Jens Axboe
  4 siblings, 0 replies; 8+ messages in thread
From: Martin K. Petersen @ 2025-11-12 21:04 UTC (permalink / raw)
  To: Bart Van Assche; +Cc: Jens Axboe, linux-block, Christoph Hellwig


Bart,

> This series includes three small patches for the zoned block device
> code: a typo is fixed, a lockdep annotation is added and the code for
> handling zoned writes is made slightly easier to follow. Please
> consider these patches for the next merge window.

Looks fine.

Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>

-- 
Martin K. Petersen

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write()
  2025-11-11 23:28 [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Bart Van Assche
                   ` (3 preceding siblings ...)
  2025-11-12 21:04 ` [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Martin K. Petersen
@ 2025-11-12 21:05 ` Jens Axboe
  4 siblings, 0 replies; 8+ messages in thread
From: Jens Axboe @ 2025-11-12 21:05 UTC (permalink / raw)
  To: Bart Van Assche; +Cc: linux-block, Christoph Hellwig


On Tue, 11 Nov 2025 15:28:59 -0800, Bart Van Assche wrote:
> This series includes three small patches for the zoned block device code: a
> typo is fixed, a lockdep annotation is added and the code for handling zoned
> writes is made slightly easier to follow. Please consider these patches for the
> next merge window.
> 
> Thanks,
> 
> [...]

Applied, thanks!

[1/3] blk-zoned: Fix a typo in a source code comment
      commit: fd0ae4754c7b2add72338b14ddc8c8ff5ffda426
[2/3] blk-zoned: Document disk_zone_wplug_schedule_bio_work() locking
      commit: faa3be1a61bfaace4c2bd57434de7b13347f9f31
[3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller
      commit: f233339188cd9b1a985fd8410d5811e920fdd4ef

Best regards,
-- 
Jens Axboe




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-11-12 21:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-11 23:28 [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Bart Van Assche
2025-11-11 23:29 ` [PATCH v2 1/3] blk-zoned: Fix a typo in a source code comment Bart Van Assche
2025-11-11 23:29 ` [PATCH v2 2/3] blk-zoned: Document disk_zone_wplug_schedule_bio_work() locking Bart Van Assche
2025-11-11 23:29 ` [PATCH v2 3/3] blk-zoned: Move code from disk_zone_wplug_add_bio() into its caller Bart Van Assche
2025-11-12  8:31   ` Christoph Hellwig
2025-11-12  8:36   ` Damien Le Moal
2025-11-12 21:04 ` [PATCH v2 0/3] Refactor blk_zone_wplug_handle_write() Martin K. Petersen
2025-11-12 21:05 ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox