Message ID | 1466060287-31514-3-git-send-email-den@openvz.org |
---|---|
State | New |
Headers | show |
On Thu, 06/16 09:58, Denis V. Lunev wrote: > Actually we must set dirty bitmap dirty after we have written all our > zeroes for correct processing in drive mirror code. In the other case > we can face not zeroes in this dirty area there in mirror_iteration. > > Signed-off-by: Denis V. Lunev <den@openvz.org> > CC: Vladimir Sementsov-Ogievskiy<vsementsov@virtuozzo.com> > CC: Stefan Hajnoczi <stefanha@redhat.com> > CC: Fam Zheng <famz@redhat.com> > CC: Kevin Wolf <kwolf@redhat.com> > CC: Max Reitz <mreitz@redhat.com> > --- > block/io.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/block/io.c b/block/io.c > index b51f681..513bd99 100644 > --- a/block/io.c > +++ b/block/io.c > @@ -2265,7 +2265,6 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, > > tracked_request_begin(&req, bs, NULL, sector_num << BDRV_SECTOR_BITS, > nb_sectors << BDRV_SECTOR_BITS, BDRV_TRACKED_DISCARD); > - bdrv_set_dirty(bs, sector_num, nb_sectors); > > max_discard = MIN_NON_ZERO(bs->bl.max_discard, BDRV_REQUEST_MAX_SECTORS); > while (nb_sectors > 0) { > @@ -2314,6 +2313,8 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, > } > ret = 0; > out: > + bdrv_set_dirty(bs, req.offset << BDRV_SECTOR_BITS, > + req.bytes << BDRV_SECTOR_BITS); > tracked_request_end(&req); > return ret; > } > -- > 2.5.0 > Reviewed-by: Fam Zheng <famz@redhat.com>
On 16.06.2016 09:58, Denis V. Lunev wrote: > Actually we must set dirty bitmap dirty after we have written all our > zeroes for correct processing in drive mirror code. In the other case > we can face not zeroes in this dirty area there in mirror_iteration. > > Signed-off-by: Denis V. Lunev <den@openvz.org> > CC: Vladimir Sementsov-Ogievskiy<vsementsov@virtuozzo.com> > CC: Stefan Hajnoczi <stefanha@redhat.com> > CC: Fam Zheng <famz@redhat.com> > CC: Kevin Wolf <kwolf@redhat.com> > CC: Max Reitz <mreitz@redhat.com> > --- > block/io.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/block/io.c b/block/io.c > index b51f681..513bd99 100644 > --- a/block/io.c > +++ b/block/io.c > @@ -2265,7 +2265,6 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, > > tracked_request_begin(&req, bs, NULL, sector_num << BDRV_SECTOR_BITS, > nb_sectors << BDRV_SECTOR_BITS, BDRV_TRACKED_DISCARD); > - bdrv_set_dirty(bs, sector_num, nb_sectors); > > max_discard = MIN_NON_ZERO(bs->bl.max_discard, BDRV_REQUEST_MAX_SECTORS); > while (nb_sectors > 0) { > @@ -2314,6 +2313,8 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, > } > ret = 0; > out: > + bdrv_set_dirty(bs, req.offset << BDRV_SECTOR_BITS, s/<</>>/ > + req.bytes << BDRV_SECTOR_BITS); and here > tracked_request_end(&req); > return ret; > }
On 06/16/2016 12:34 PM, Vladimir Sementsov-Ogievskiy wrote: > On 16.06.2016 09:58, Denis V. Lunev wrote: >> Actually we must set dirty bitmap dirty after we have written all our >> zeroes for correct processing in drive mirror code. In the other case >> we can face not zeroes in this dirty area there in mirror_iteration. >> >> Signed-off-by: Denis V. Lunev <den@openvz.org> >> CC: Vladimir Sementsov-Ogievskiy<vsementsov@virtuozzo.com> >> CC: Stefan Hajnoczi <stefanha@redhat.com> >> CC: Fam Zheng <famz@redhat.com> >> CC: Kevin Wolf <kwolf@redhat.com> >> CC: Max Reitz <mreitz@redhat.com> >> --- >> block/io.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/block/io.c b/block/io.c >> index b51f681..513bd99 100644 >> --- a/block/io.c >> +++ b/block/io.c >> @@ -2265,7 +2265,6 @@ int coroutine_fn >> bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, >> tracked_request_begin(&req, bs, NULL, sector_num << >> BDRV_SECTOR_BITS, >> nb_sectors << BDRV_SECTOR_BITS, >> BDRV_TRACKED_DISCARD); >> - bdrv_set_dirty(bs, sector_num, nb_sectors); >> max_discard = MIN_NON_ZERO(bs->bl.max_discard, >> BDRV_REQUEST_MAX_SECTORS); >> while (nb_sectors > 0) { >> @@ -2314,6 +2313,8 @@ int coroutine_fn >> bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, >> } >> ret = 0; >> out: >> + bdrv_set_dirty(bs, req.offset << BDRV_SECTOR_BITS, > s/<</>>/ >> + req.bytes << BDRV_SECTOR_BITS); > and here >> tracked_request_end(&req); >> return ret; >> } > > very nice, thanks ;)
diff --git a/block/io.c b/block/io.c index b51f681..513bd99 100644 --- a/block/io.c +++ b/block/io.c @@ -2265,7 +2265,6 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, tracked_request_begin(&req, bs, NULL, sector_num << BDRV_SECTOR_BITS, nb_sectors << BDRV_SECTOR_BITS, BDRV_TRACKED_DISCARD); - bdrv_set_dirty(bs, sector_num, nb_sectors); max_discard = MIN_NON_ZERO(bs->bl.max_discard, BDRV_REQUEST_MAX_SECTORS); while (nb_sectors > 0) { @@ -2314,6 +2313,8 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num, } ret = 0; out: + bdrv_set_dirty(bs, req.offset << BDRV_SECTOR_BITS, + req.bytes << BDRV_SECTOR_BITS); tracked_request_end(&req); return ret; }
Actually we must set dirty bitmap dirty after we have written all our zeroes for correct processing in drive mirror code. In the other case we can face not zeroes in this dirty area there in mirror_iteration. Signed-off-by: Denis V. Lunev <den@openvz.org> CC: Vladimir Sementsov-Ogievskiy<vsementsov@virtuozzo.com> CC: Stefan Hajnoczi <stefanha@redhat.com> CC: Fam Zheng <famz@redhat.com> CC: Kevin Wolf <kwolf@redhat.com> CC: Max Reitz <mreitz@redhat.com> --- block/io.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)