Messages in this thread | | | Date | Mon, 10 Jul 2023 15:33:08 +0200 | From | Christoph Hellwig <> | Subject | Re: [PATCH 2/2] blk-flush: don't need to end rq twice for non post-flush requests |
| |
On Mon, Jul 10, 2023 at 02:47:05PM +0800, chengming.zhou@linux.dev wrote: > From: Chengming Zhou <zhouchengming@bytedance.com> > > Now we unconditionally blk_rq_init_flush() to replace rq->end_io to > make rq return twice back to the flush state machine for post-flush. > > Obviously, non post-flush requests don't need it, they don't need to > end request twice, so they don't need to replace rq->end_io callback. > And the same for requests with the FUA bit on hardware with FUA support. > > So we move blk_rq_init_flush() to REQ_FSEQ_DATA stage and only replace > rq->end_io if it needs post-flush. Otherwise, it can end like normal > request and doesn't need to return back to the flush state machine.
I really like the idea behind this optimization, but I kinda hate adding more magic to the already way too magic flush sequence.
I wonder if a better idea would be to kill the flush sequence entirely, and just split the flush_queue into a preflush and a postflush queue. This would remove a field from struct request and lead to more readable code as well.
| |