mirror of https://github.com/xemu-project/xemu.git
commit: Switch commit_run() to byte-based
We are gradually converting to byte-based interfaces, as they are easier to reason about than sector-based. Change the internal loop iteration of committing to track by bytes instead of sectors (although we are still guaranteed that we iterate by steps that are sector-aligned). Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
d8a9858408
commit
317a6676a2
|
@ -143,17 +143,16 @@ static void coroutine_fn commit_run(void *opaque)
|
||||||
{
|
{
|
||||||
CommitBlockJob *s = opaque;
|
CommitBlockJob *s = opaque;
|
||||||
CommitCompleteData *data;
|
CommitCompleteData *data;
|
||||||
int64_t sector_num, end;
|
int64_t offset;
|
||||||
uint64_t delay_ns = 0;
|
uint64_t delay_ns = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int n = 0;
|
int n = 0; /* sectors */
|
||||||
void *buf = NULL;
|
void *buf = NULL;
|
||||||
int bytes_written = 0;
|
int bytes_written = 0;
|
||||||
int64_t base_len;
|
int64_t base_len;
|
||||||
|
|
||||||
ret = s->common.len = blk_getlength(s->top);
|
ret = s->common.len = blk_getlength(s->top);
|
||||||
|
|
||||||
|
|
||||||
if (s->common.len < 0) {
|
if (s->common.len < 0) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -170,10 +169,9 @@ static void coroutine_fn commit_run(void *opaque)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
end = s->common.len >> BDRV_SECTOR_BITS;
|
|
||||||
buf = blk_blockalign(s->top, COMMIT_BUFFER_SIZE);
|
buf = blk_blockalign(s->top, COMMIT_BUFFER_SIZE);
|
||||||
|
|
||||||
for (sector_num = 0; sector_num < end; sector_num += n) {
|
for (offset = 0; offset < s->common.len; offset += n * BDRV_SECTOR_SIZE) {
|
||||||
bool copy;
|
bool copy;
|
||||||
|
|
||||||
/* Note that even when no rate limit is applied we need to yield
|
/* Note that even when no rate limit is applied we need to yield
|
||||||
|
@ -185,15 +183,13 @@ static void coroutine_fn commit_run(void *opaque)
|
||||||
}
|
}
|
||||||
/* Copy if allocated above the base */
|
/* Copy if allocated above the base */
|
||||||
ret = bdrv_is_allocated_above(blk_bs(s->top), blk_bs(s->base),
|
ret = bdrv_is_allocated_above(blk_bs(s->top), blk_bs(s->base),
|
||||||
sector_num,
|
offset / BDRV_SECTOR_SIZE,
|
||||||
COMMIT_BUFFER_SIZE / BDRV_SECTOR_SIZE,
|
COMMIT_BUFFER_SIZE / BDRV_SECTOR_SIZE,
|
||||||
&n);
|
&n);
|
||||||
copy = (ret == 1);
|
copy = (ret == 1);
|
||||||
trace_commit_one_iteration(s, sector_num * BDRV_SECTOR_SIZE,
|
trace_commit_one_iteration(s, offset, n * BDRV_SECTOR_SIZE, ret);
|
||||||
n * BDRV_SECTOR_SIZE, ret);
|
|
||||||
if (copy) {
|
if (copy) {
|
||||||
ret = commit_populate(s->top, s->base,
|
ret = commit_populate(s->top, s->base, offset,
|
||||||
sector_num * BDRV_SECTOR_SIZE,
|
|
||||||
n * BDRV_SECTOR_SIZE, buf);
|
n * BDRV_SECTOR_SIZE, buf);
|
||||||
bytes_written += n * BDRV_SECTOR_SIZE;
|
bytes_written += n * BDRV_SECTOR_SIZE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue