commit: Fix is_read for block_job_error_action()
block_job_error_action() needs to know if reading from the top node or writing to the base node failed so that it can set the right 'operation' in the BLOCK_JOB_ERROR QMP event. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200214200812.28180-6-kwolf@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
0c42e175fc
commit
9ad1e79f3f
@ -143,6 +143,7 @@ static int coroutine_fn commit_run(Job *job, Error **errp)
|
|||||||
|
|
||||||
for (offset = 0; offset < len; offset += n) {
|
for (offset = 0; offset < len; offset += n) {
|
||||||
bool copy;
|
bool copy;
|
||||||
|
bool error_in_source = true;
|
||||||
|
|
||||||
/* 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
|
||||||
* with no pending I/O here so that bdrv_drain_all() returns.
|
* with no pending I/O here so that bdrv_drain_all() returns.
|
||||||
@ -162,11 +163,15 @@ static int coroutine_fn commit_run(Job *job, Error **errp)
|
|||||||
ret = blk_co_pread(s->top, offset, n, buf, 0);
|
ret = blk_co_pread(s->top, offset, n, buf, 0);
|
||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
ret = blk_co_pwrite(s->base, offset, n, buf, 0);
|
ret = blk_co_pwrite(s->base, offset, n, buf, 0);
|
||||||
|
if (ret < 0) {
|
||||||
|
error_in_source = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
BlockErrorAction action =
|
BlockErrorAction action =
|
||||||
block_job_error_action(&s->common, s->on_error, false, -ret);
|
block_job_error_action(&s->common, s->on_error,
|
||||||
|
error_in_source, -ret);
|
||||||
if (action == BLOCK_ERROR_ACTION_REPORT) {
|
if (action == BLOCK_ERROR_ACTION_REPORT) {
|
||||||
goto out;
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user