backup: React to bdrv_is_allocated() errors
If bdrv_is_allocated() fails, we should immediately do the backup error action, rather than attempting backup_do_cow() (although that will likely fail too). Signed-off-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
e32ccbc6e9
commit
666a9543fa
@ -468,13 +468,14 @@ static void coroutine_fn backup_run(void *opaque)
|
|||||||
/* Both FULL and TOP SYNC_MODE's require copying.. */
|
/* Both FULL and TOP SYNC_MODE's require copying.. */
|
||||||
for (; start < end; start++) {
|
for (; start < end; start++) {
|
||||||
bool error_is_read;
|
bool error_is_read;
|
||||||
|
int alloced = 0;
|
||||||
|
|
||||||
if (yield_and_check(job)) {
|
if (yield_and_check(job)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (job->sync_mode == MIRROR_SYNC_MODE_TOP) {
|
if (job->sync_mode == MIRROR_SYNC_MODE_TOP) {
|
||||||
int i, n;
|
int i, n;
|
||||||
int alloced = 0;
|
|
||||||
|
|
||||||
/* Check to see if these blocks are already in the
|
/* Check to see if these blocks are already in the
|
||||||
* backing file. */
|
* backing file. */
|
||||||
@ -492,7 +493,7 @@ static void coroutine_fn backup_run(void *opaque)
|
|||||||
sectors_per_cluster - i, &n);
|
sectors_per_cluster - i, &n);
|
||||||
i += n;
|
i += n;
|
||||||
|
|
||||||
if (alloced == 1 || n == 0) {
|
if (alloced || n == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -504,8 +505,13 @@ static void coroutine_fn backup_run(void *opaque)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* FULL sync mode we copy the whole drive. */
|
/* FULL sync mode we copy the whole drive. */
|
||||||
|
if (alloced < 0) {
|
||||||
|
ret = alloced;
|
||||||
|
} else {
|
||||||
ret = backup_do_cow(job, start * sectors_per_cluster,
|
ret = backup_do_cow(job, start * sectors_per_cluster,
|
||||||
sectors_per_cluster, &error_is_read, false);
|
sectors_per_cluster, &error_is_read,
|
||||||
|
false);
|
||||||
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
/* Depending on error action, fail now or retry cluster */
|
/* Depending on error action, fail now or retry cluster */
|
||||||
BlockErrorAction action =
|
BlockErrorAction action =
|
||||||
|
Loading…
Reference in New Issue
Block a user