On 11.10.19 11:07, Vladimir Sementsov-Ogievskiy wrote: > Prior 9adc1cb49af8d do_sync_target_write had a bug: it reset aligned-up > region in the dirty bitmap, which means that we may not copy some bytes > and assume them copied, which actually leads to producing corrupted > target. > > So 9adc1cb49af8d forced dirty bitmap granularity to be > request_alignment for mirror-top filter, so we are not working with > unaligned requests. However forcing large alignment obviously decreases > performance of unaligned requests. > > This commit provides another solution for the problem: if unaligned > padding is already dirty, we can safely ignore it, as > 1. It's dirty, it will be copied by mirror_iteration anyway > 2. It's dirty, so skipping it now we don't increase dirtiness of the > bitmap and therefore don't damage "synchronicity" of the > write-blocking mirror. > > If unaligned padding is not dirty, we just write it, no reason to touch > dirty bitmap if we succeed (on failure we'll set the whole region > ofcourse, but we loss "synchronicity" on failure anyway). > > Note: we need to disable dirty_bitmap, otherwise we will not be able to > see in do_sync_target_write bitmap state before current operation. We > may of course check dirty bitmap before the operation in > bdrv_mirror_top_do_write and remember it, but we don't need active > dirty bitmap for write-blocking mirror anyway. > > New code-path is unused until the following commit reverts > 9adc1cb49af8d. > > Suggested-by: Denis V. Lunev <d...@openvz.org> > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > --- > block/mirror.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 68 insertions(+), 3 deletions(-)
Reviewed-by: Max Reitz <mre...@redhat.com>
signature.asc
Description: OpenPGP digital signature