]>
Commit | Line | Data |
---|---|---|
87ba737b | 1 | From f859377de12e2faa46046b266ce4418c138e61ab Mon Sep 17 00:00:00 2001 |
ca0fe5f5 WB |
2 | From: Wolfgang Bumiller <w.bumiller@proxmox.com> |
3 | Date: Wed, 9 Dec 2015 15:22:19 +0100 | |
9c3bec39 | 4 | Subject: [PATCH 17/47] backup: do not return errors in dump callback |
ca0fe5f5 WB |
5 | |
6 | --- | |
7 | blockdev.c | 26 ++++++++++++++++++++------ | |
8 | 1 file changed, 20 insertions(+), 6 deletions(-) | |
9 | ||
10 | diff --git a/blockdev.c b/blockdev.c | |
87ba737b | 11 | index af1b9d4..4b073d4 100644 |
ca0fe5f5 WB |
12 | --- a/blockdev.c |
13 | +++ b/blockdev.c | |
1a91ab45 | 14 | @@ -3019,6 +3019,11 @@ static int pvebackup_dump_cb(void *opaque, BlockBackend *target, |
ca0fe5f5 WB |
15 | { |
16 | PVEBackupDevInfo *di = opaque; | |
17 | ||
18 | + int size = n_sectors * BDRV_SECTOR_SIZE; | |
19 | + if (backup_state.cancel) { | |
20 | + return size; // return success | |
21 | + } | |
22 | + | |
23 | if (sector_num & 0x7f) { | |
24 | if (!backup_state.error) { | |
25 | error_setg(&backup_state.error, | |
1a91ab45 | 26 | @@ -3029,7 +3034,6 @@ static int pvebackup_dump_cb(void *opaque, BlockBackend *target, |
ca0fe5f5 WB |
27 | } |
28 | ||
29 | int64_t cluster_num = sector_num >> 7; | |
30 | - int size = n_sectors * BDRV_SECTOR_SIZE; | |
31 | ||
32 | int ret = -1; | |
33 | ||
1a91ab45 | 34 | @@ -3037,17 +3041,27 @@ static int pvebackup_dump_cb(void *opaque, BlockBackend *target, |
ca0fe5f5 WB |
35 | size_t zero_bytes = 0; |
36 | ret = vma_writer_write(backup_state.vmaw, di->dev_id, cluster_num, | |
37 | buf, &zero_bytes); | |
38 | - backup_state.zero_bytes += zero_bytes; | |
39 | + if (ret < 0) { | |
40 | + if (!backup_state.error) { | |
41 | + error_setg(&backup_state.error, "vma_writer_write error %d", ret); | |
42 | + } | |
43 | + if (di->bs && di->bs->job) { | |
44 | + block_job_cancel(di->bs->job); | |
45 | + } | |
46 | + } else { | |
47 | + backup_state.zero_bytes += zero_bytes; | |
48 | + backup_state.transferred += size; | |
49 | + } | |
50 | } else { | |
51 | - ret = size; | |
52 | if (!buf) { | |
53 | backup_state.zero_bytes += size; | |
54 | } | |
55 | + backup_state.transferred += size; | |
56 | } | |
57 | ||
58 | - backup_state.transferred += size; | |
59 | + // Note: always return success, because we want that writes succeed anyways. | |
60 | ||
61 | - return ret; | |
62 | + return size; | |
63 | } | |
64 | ||
65 | static void pvebackup_cleanup(void) | |
1a91ab45 | 66 | @@ -3119,7 +3133,7 @@ static void pvebackup_cancel(void *opaque) |
ca0fe5f5 WB |
67 | BlockJob *job = di->bs->job; |
68 | if (job) { | |
69 | if (!di->completed) { | |
70 | - block_job_cancel_sync(job); | |
71 | + block_job_cancel_sync(job); | |
72 | } | |
73 | } | |
74 | } | |
75 | -- | |
76 | 2.1.4 | |
77 |