Message ID | 20240325044452.3125418-2-dlemoal@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Zone write plugging | expand |
On 3/24/24 21:44, Damien Le Moal wrote: > On completion of a flush sequence, blk_flush_restore_request() restores > the bio of a request to the original submitted BIO. However, the last > use of the request in the flush sequence may have been for a POSTFLUSH > which does not have a sector. So make sure to restore the request sector > using the iter sector of the original BIO. This BIO has not changed yet > since the completions of the flush sequence intermediate steps use > requeueing of the request until all steps are completed. > > Restoring the request sector ensures that blk_mq_end_request() will see > a valid sector as originally set when the flush BIO was submitted. Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/block/blk-flush.c b/block/blk-flush.c index b0f314f4bc14..2f58ae018464 100644 --- a/block/blk-flush.c +++ b/block/blk-flush.c @@ -130,6 +130,7 @@ static void blk_flush_restore_request(struct request *rq) * original @rq->bio. Restore it. */ rq->bio = rq->biotail; + rq->__sector = rq->bio->bi_iter.bi_sector; /* make @rq a normal request */ rq->rq_flags &= ~RQF_FLUSH_SEQ;