diff options
author | Damien Le Moal <dlemoal@kernel.org> | 2024-05-01 20:09:04 +0900 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2024-05-01 08:08:43 -0600 |
commit | 347bde9da10f410b8134a82d6096105cad44e1c1 (patch) | |
tree | e6033ddfccf952356eed1804e2fff71f1d83532b /block/blk-zoned.c | |
parent | c4c3ffdab2e26780f6f7c9959a473b2c652f4d13 (diff) | |
download | linux-stable-347bde9da10f410b8134a82d6096105cad44e1c1.tar.gz linux-stable-347bde9da10f410b8134a82d6096105cad44e1c1.tar.bz2 linux-stable-347bde9da10f410b8134a82d6096105cad44e1c1.zip |
block: Improve zone write request completion handling
blk_zone_complete_request() must be called to handle the completion of a
zone write request handled with zone write plugging. This function is
called from blk_complete_request(), blk_update_request() and also in
blk_mq_submit_bio() error path. Improve this by moving this function
call into blk_mq_finish_request() as all requests are processed with
this function when they complete as well as when they are freed without
being executed. This also improves blk_update_request() used by scsi
devices as these may repeatedly call this function to handle partial
completions.
To be consistent with this change, blk_zone_complete_request() is
renamed to blk_zone_finish_request() and
blk_zone_write_plug_complete_request() is renamed to
blk_zone_write_plug_finish_request().
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20240501110907.96950-12-dlemoal@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-zoned.c')
-rw-r--r-- | block/blk-zoned.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/block/blk-zoned.c b/block/blk-zoned.c index 1890b6d55d8b..759e85e9167c 100644 --- a/block/blk-zoned.c +++ b/block/blk-zoned.c @@ -531,7 +531,7 @@ static inline bool disk_should_remove_zone_wplug(struct gendisk *disk, /* * Completions of BIOs with blk_zone_write_plug_bio_endio() may * happen after handling a request completion with - * blk_zone_write_plug_complete_request() (e.g. with split BIOs + * blk_zone_write_plug_finish_request() (e.g. with split BIOs * that are chained). In such case, disk_zone_wplug_unplug_bio() * should not attempt to remove the zone write plug until all BIO * completions are seen. Check by looking at the zone write plug @@ -921,7 +921,7 @@ void blk_zone_write_plug_init_request(struct request *req) /* * Indicate that completion of this request needs to be handled with - * blk_zone_write_plug_complete_request(), which will drop the reference + * blk_zone_write_plug_finish_request(), which will drop the reference * on the zone write plug we took above on entry to this function. */ req->rq_flags |= RQF_ZONE_WRITE_PLUGGING; @@ -1255,7 +1255,7 @@ void blk_zone_write_plug_bio_endio(struct bio *bio) disk_put_zone_wplug(zwplug); /* - * For BIO-based devices, blk_zone_write_plug_complete_request() + * For BIO-based devices, blk_zone_write_plug_finish_request() * is not called. So we need to schedule execution of the next * plugged BIO here. */ @@ -1266,11 +1266,12 @@ void blk_zone_write_plug_bio_endio(struct bio *bio) disk_put_zone_wplug(zwplug); } -void blk_zone_write_plug_complete_request(struct request *req) +void blk_zone_write_plug_finish_request(struct request *req) { struct gendisk *disk = req->q->disk; - struct blk_zone_wplug *zwplug = disk_get_zone_wplug(disk, req->__sector); + struct blk_zone_wplug *zwplug; + zwplug = disk_get_zone_wplug(disk, req->__sector); if (WARN_ON_ONCE(!zwplug)) return; |