I won't apply this version, please send v3 with the changes below. On Tue, 10 Nov 2026 14:46:22 +0300, Andrey Zhadchenko wrote: > Andrey Zhadchenko (7): > dm-qcow2: repeat md page lookup if it was inserted in parallel > dm-qcow2: wait for L2 writeback in perform_rw_mapped() > dm-qcow2: prepare process_one_qio() for fastpath > dm-qcow2: add per-qio work infrastructure > dm-qcow2: implement per-qio fast processing > dm-qcow2: process fast path qios in per-cpu batches on a workqueue > dm-qcow2: declare DM_TARGET_NOWAIT
All v1 items are done, and the DIRTY -> WRITEBACK race is closed. What to change for v3: 1. Patch 2, code and commit message: in perform_rw_mapped(), under the lock it already takes, check that the L2 entry (and the ext_l2 word) is still what parse_l2() saw and that the index is not locked; if not, hand the qio back to main kwork. In the message, "X freed" becomes "X leaked", and md->wbd is dropped not only by main kwork. 2. New patch: a writable module parameter (0644, on by default) that turns the fast path off. Check it with READ_ONCE() in qio_try_fast() and send every split to the deferred list when it is off. 3. Patch 5 and the cover letter: describe the window between the fast path parse and the data submit, where main kwork can discard, free and reuse the cluster, as a known limitation fixed by a follow-up series, and name its Jira issue. In patch 5, reword the line that starts with "From here on": it got mbox-escaped to ">From". 4. Answer Sashiko's open remarks: patch 1 (unbounded retry, the third time now; a bound of one retry is enough), patch 4 (qio_pool hold-and-wait) and patch 6 (preparation sleeps too). Separate patches, not needed for v3: 1. Writes and reads racing with a discard of the same cluster: per-md write counters or discard locking, as you planned. Details are in the replies to the patches. -- Konstantin Khorenko, Virtuozzo Linux Kernel Team _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
