mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
block/backup: refactor write_flags
write flags are constant, let's store it in BackupBlockJob instead of recalculating. It also makes two boolean fields to be unused, so, drop them. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-id: 20190730163251.755248-4-vsementsov@virtuozzo.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
319bd5edb9
commit
a1ed82b443
1 changed files with 12 additions and 12 deletions
|
@ -50,14 +50,13 @@ typedef struct BackupBlockJob {
|
||||||
uint64_t len;
|
uint64_t len;
|
||||||
uint64_t bytes_read;
|
uint64_t bytes_read;
|
||||||
int64_t cluster_size;
|
int64_t cluster_size;
|
||||||
bool compress;
|
|
||||||
NotifierWithReturn before_write;
|
NotifierWithReturn before_write;
|
||||||
QLIST_HEAD(, CowRequest) inflight_reqs;
|
QLIST_HEAD(, CowRequest) inflight_reqs;
|
||||||
|
|
||||||
bool use_copy_range;
|
bool use_copy_range;
|
||||||
int64_t copy_range_size;
|
int64_t copy_range_size;
|
||||||
|
|
||||||
bool serialize_target_writes;
|
BdrvRequestFlags write_flags;
|
||||||
bool initializing_bitmap;
|
bool initializing_bitmap;
|
||||||
} BackupBlockJob;
|
} BackupBlockJob;
|
||||||
|
|
||||||
|
@ -113,10 +112,6 @@ static int coroutine_fn backup_cow_with_bounce_buffer(BackupBlockJob *job,
|
||||||
BlockBackend *blk = job->common.blk;
|
BlockBackend *blk = job->common.blk;
|
||||||
int nbytes;
|
int nbytes;
|
||||||
int read_flags = is_write_notifier ? BDRV_REQ_NO_SERIALISING : 0;
|
int read_flags = is_write_notifier ? BDRV_REQ_NO_SERIALISING : 0;
|
||||||
int write_flags =
|
|
||||||
(job->serialize_target_writes ? BDRV_REQ_SERIALISING : 0) |
|
|
||||||
(job->compress ? BDRV_REQ_WRITE_COMPRESSED : 0);
|
|
||||||
|
|
||||||
|
|
||||||
assert(QEMU_IS_ALIGNED(start, job->cluster_size));
|
assert(QEMU_IS_ALIGNED(start, job->cluster_size));
|
||||||
bdrv_reset_dirty_bitmap(job->copy_bitmap, start, job->cluster_size);
|
bdrv_reset_dirty_bitmap(job->copy_bitmap, start, job->cluster_size);
|
||||||
|
@ -135,7 +130,7 @@ static int coroutine_fn backup_cow_with_bounce_buffer(BackupBlockJob *job,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = blk_co_pwrite(job->target, start, nbytes, *bounce_buffer,
|
ret = blk_co_pwrite(job->target, start, nbytes, *bounce_buffer,
|
||||||
write_flags);
|
job->write_flags);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
trace_backup_do_cow_write_fail(job, start, ret);
|
trace_backup_do_cow_write_fail(job, start, ret);
|
||||||
if (error_is_read) {
|
if (error_is_read) {
|
||||||
|
@ -163,7 +158,6 @@ static int coroutine_fn backup_cow_with_offload(BackupBlockJob *job,
|
||||||
BlockBackend *blk = job->common.blk;
|
BlockBackend *blk = job->common.blk;
|
||||||
int nbytes;
|
int nbytes;
|
||||||
int read_flags = is_write_notifier ? BDRV_REQ_NO_SERIALISING : 0;
|
int read_flags = is_write_notifier ? BDRV_REQ_NO_SERIALISING : 0;
|
||||||
int write_flags = job->serialize_target_writes ? BDRV_REQ_SERIALISING : 0;
|
|
||||||
|
|
||||||
assert(QEMU_IS_ALIGNED(job->copy_range_size, job->cluster_size));
|
assert(QEMU_IS_ALIGNED(job->copy_range_size, job->cluster_size));
|
||||||
assert(QEMU_IS_ALIGNED(start, job->cluster_size));
|
assert(QEMU_IS_ALIGNED(start, job->cluster_size));
|
||||||
|
@ -172,7 +166,7 @@ static int coroutine_fn backup_cow_with_offload(BackupBlockJob *job,
|
||||||
bdrv_reset_dirty_bitmap(job->copy_bitmap, start,
|
bdrv_reset_dirty_bitmap(job->copy_bitmap, start,
|
||||||
job->cluster_size * nr_clusters);
|
job->cluster_size * nr_clusters);
|
||||||
ret = blk_co_copy_range(blk, start, job->target, start, nbytes,
|
ret = blk_co_copy_range(blk, start, job->target, start, nbytes,
|
||||||
read_flags, write_flags);
|
read_flags, job->write_flags);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
trace_backup_do_cow_copy_range_fail(job, start, ret);
|
trace_backup_do_cow_copy_range_fail(job, start, ret);
|
||||||
bdrv_set_dirty_bitmap(job->copy_bitmap, start,
|
bdrv_set_dirty_bitmap(job->copy_bitmap, start,
|
||||||
|
@ -751,10 +745,16 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
|
||||||
job->sync_mode = sync_mode;
|
job->sync_mode = sync_mode;
|
||||||
job->sync_bitmap = sync_bitmap;
|
job->sync_bitmap = sync_bitmap;
|
||||||
job->bitmap_mode = bitmap_mode;
|
job->bitmap_mode = bitmap_mode;
|
||||||
job->compress = compress;
|
|
||||||
|
|
||||||
/* Detect image-fleecing (and similar) schemes */
|
/*
|
||||||
job->serialize_target_writes = bdrv_chain_contains(target, bs);
|
* Set write flags:
|
||||||
|
* 1. Detect image-fleecing (and similar) schemes
|
||||||
|
* 2. Handle compression
|
||||||
|
*/
|
||||||
|
job->write_flags =
|
||||||
|
(bdrv_chain_contains(target, bs) ? BDRV_REQ_SERIALISING : 0) |
|
||||||
|
(compress ? BDRV_REQ_WRITE_COMPRESSED : 0);
|
||||||
|
|
||||||
job->cluster_size = cluster_size;
|
job->cluster_size = cluster_size;
|
||||||
job->copy_bitmap = copy_bitmap;
|
job->copy_bitmap = copy_bitmap;
|
||||||
copy_bitmap = NULL;
|
copy_bitmap = NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue