On Tue, 29 Sep 2026 17:51:25 +0200, Denis V. Lunev <[email protected]> wrote: > Task size was capped to block_copy_chunk_size() regardless of method, > which sizes a task by the copy buffer. A write-zeroes task carries no > buffer, so that cap only splits one long known-zero run into a crowd of > small COPY_WRITE_ZEROES tasks, each with its own request against the > target. > > block_copy_task_create() already decides from zero_bitmap how far a task > may run, so add block_copy_widen_zero_area() to that decision: for a > write-zeroes task, re-search the dirty area under BDRV_REQUEST_MAX_BYTES > instead of the buffer chunk size, and let the existing clamp cut it back > to where the zero run ends. That bound is INT_MAX rounded down to a > sector, so nothing has aligned it to cluster_size and it is aligned down > at the use site. Widening is safe: an overlapping caller waits on the > task's BlockReq via reqlist_wait_one() rather than observing it > mid-flight. > > [...]
Reviewed-by: Andrey Drobyshev <[email protected]> -- Andrey Drobyshev <[email protected]>
