[Devel] [PATCH 0/7] drivers/md/dm-qcow2: per-qio fast path
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Nov 5 00:35:09 MSK 2026
I won't apply this version, please send v2 with the changes below.
On Thu, 29 Oct 2026 17:03:39 +0300, Andrey Zhadchenko wrote:
> dm-qcow2 processes every request consequentially in a single kwork.
> Unfortunately this introduces latency and cpu-bound limits. This
> patchset addresses the problem by laying per-qio tasks foundation:
> qios can be executed in parallel on the same workqueue. For now cover
> only requests with metadata fully allocated.
What to change for v2:
1. Patches 2 and 5, code: a fast-path write can miss the wbd of the
L2 page that maps it, and then it is acked before that L2 entry is
on disk. Handle MD_WRITEBACK in perform_rw_mapped() the way
parse_l2() does.
2. Patch 3, code: stop the fast path before the R1/R2 lookup in
parse_metadata(), it never needs those pages.
3. Patch 1, commit message: say what fails today and add a Fixes tag
for 412d5a4f7bf1b ("dm/dm-qcow2: add llseek_hole").
4. Patch 7, code and message: bound the drain loop, fix the sentence
about re-queued qios, say that the fast path is now serial per
submitting CPU.
5. Patches 6 and 7, commit messages: move the measured numbers into
this thread.
6. Patch 4, code: update the QLIST_EMBEDDED comment.
7. Open remarks from the thread, please answer or fix them in v2:
Sashiko on patch 1 (unbounded retry) and patch 5 (list_add order),
Alexander on patch 3 (typo, magic 2) and patch 6 (swap 6 and 7).
8. Cover letter of v2:
- "consequentially" becomes "sequentially";
- not only fully allocated requests go fast: reads of unallocated
or lower-delta clusters and partial discards do too, say that;
- mention DM_TARGET_NOWAIT and the per-cpu batching.
Details on each item are in the replies to the patches. Alexander's
Reviewed-by should not be carried over to v2 as is, item 1 changes
the code he reviewed.
--
Konstantin Khorenko,
Virtuozzo Linux Kernel Team
More information about the Devel
mailing list