blockjob: Don't touch BDS iostatus
Block jobs don't actually make use of the iostatus for their BDSes, but they manage a separate block job iostatus. Still, they require that it is enabled for the source BDS and they enable it automatically for the target and set the error handling mode - which ends up never being used by the job. This patch removes all of the BDS iostatus handling from the block job, which removes another few bs->blk accesses. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
81e254dc83
commit
66a0fae438
@ -218,15 +218,6 @@ static void backup_set_speed(BlockJob *job, int64_t speed, Error **errp)
|
|||||||
ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME);
|
ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void backup_iostatus_reset(BlockJob *job)
|
|
||||||
{
|
|
||||||
BackupBlockJob *s = container_of(job, BackupBlockJob, common);
|
|
||||||
|
|
||||||
if (s->target->blk) {
|
|
||||||
blk_iostatus_reset(s->target->blk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void backup_cleanup_sync_bitmap(BackupBlockJob *job, int ret)
|
static void backup_cleanup_sync_bitmap(BackupBlockJob *job, int ret)
|
||||||
{
|
{
|
||||||
BdrvDirtyBitmap *bm;
|
BdrvDirtyBitmap *bm;
|
||||||
@ -263,7 +254,6 @@ static const BlockJobDriver backup_job_driver = {
|
|||||||
.instance_size = sizeof(BackupBlockJob),
|
.instance_size = sizeof(BackupBlockJob),
|
||||||
.job_type = BLOCK_JOB_TYPE_BACKUP,
|
.job_type = BLOCK_JOB_TYPE_BACKUP,
|
||||||
.set_speed = backup_set_speed,
|
.set_speed = backup_set_speed,
|
||||||
.iostatus_reset = backup_iostatus_reset,
|
|
||||||
.commit = backup_commit,
|
.commit = backup_commit,
|
||||||
.abort = backup_abort,
|
.abort = backup_abort,
|
||||||
};
|
};
|
||||||
@ -388,7 +378,6 @@ static void coroutine_fn backup_run(void *opaque)
|
|||||||
BackupCompleteData *data;
|
BackupCompleteData *data;
|
||||||
BlockDriverState *bs = job->common.bs;
|
BlockDriverState *bs = job->common.bs;
|
||||||
BlockDriverState *target = job->target;
|
BlockDriverState *target = job->target;
|
||||||
BlockdevOnError on_target_error = job->on_target_error;
|
|
||||||
NotifierWithReturn before_write = {
|
NotifierWithReturn before_write = {
|
||||||
.notify = backup_before_write_notify,
|
.notify = backup_before_write_notify,
|
||||||
};
|
};
|
||||||
@ -404,11 +393,6 @@ static void coroutine_fn backup_run(void *opaque)
|
|||||||
|
|
||||||
job->done_bitmap = bitmap_new(end);
|
job->done_bitmap = bitmap_new(end);
|
||||||
|
|
||||||
if (target->blk) {
|
|
||||||
blk_set_on_error(target->blk, on_target_error, on_target_error);
|
|
||||||
blk_iostatus_enable(target->blk);
|
|
||||||
}
|
|
||||||
|
|
||||||
bdrv_add_before_write_notifier(bs, &before_write);
|
bdrv_add_before_write_notifier(bs, &before_write);
|
||||||
|
|
||||||
if (job->sync_mode == MIRROR_SYNC_MODE_NONE) {
|
if (job->sync_mode == MIRROR_SYNC_MODE_NONE) {
|
||||||
@ -484,9 +468,6 @@ static void coroutine_fn backup_run(void *opaque)
|
|||||||
qemu_co_rwlock_unlock(&job->flush_rwlock);
|
qemu_co_rwlock_unlock(&job->flush_rwlock);
|
||||||
g_free(job->done_bitmap);
|
g_free(job->done_bitmap);
|
||||||
|
|
||||||
if (target->blk) {
|
|
||||||
blk_iostatus_disable(target->blk);
|
|
||||||
}
|
|
||||||
bdrv_op_unblock_all(target, job->common.blocker);
|
bdrv_op_unblock_all(target, job->common.blocker);
|
||||||
|
|
||||||
data = g_malloc(sizeof(*data));
|
data = g_malloc(sizeof(*data));
|
||||||
@ -515,13 +496,6 @@ void backup_start(BlockDriverState *bs, BlockDriverState *target,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((on_source_error == BLOCKDEV_ON_ERROR_STOP ||
|
|
||||||
on_source_error == BLOCKDEV_ON_ERROR_ENOSPC) &&
|
|
||||||
(!bs->blk || !blk_iostatus_is_enabled(bs->blk))) {
|
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER, "on-source-error");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bdrv_is_inserted(bs)) {
|
if (!bdrv_is_inserted(bs)) {
|
||||||
error_setg(errp, "Device is not inserted: %s",
|
error_setg(errp, "Device is not inserted: %s",
|
||||||
bdrv_get_device_name(bs));
|
bdrv_get_device_name(bs));
|
||||||
|
@ -214,13 +214,6 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base,
|
|||||||
BlockDriverState *overlay_bs;
|
BlockDriverState *overlay_bs;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
|
||||||
if ((on_error == BLOCKDEV_ON_ERROR_STOP ||
|
|
||||||
on_error == BLOCKDEV_ON_ERROR_ENOSPC) &&
|
|
||||||
(!bs->blk || !blk_iostatus_is_enabled(bs->blk))) {
|
|
||||||
error_setg(errp, "Invalid parameter combination");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(top != bs);
|
assert(top != bs);
|
||||||
if (top == base) {
|
if (top == base) {
|
||||||
error_setg(errp, "Invalid files for merge: top and base are the same");
|
error_setg(errp, "Invalid files for merge: top and base are the same");
|
||||||
|
@ -710,9 +710,6 @@ immediate_exit:
|
|||||||
g_free(s->cow_bitmap);
|
g_free(s->cow_bitmap);
|
||||||
g_free(s->in_flight_bitmap);
|
g_free(s->in_flight_bitmap);
|
||||||
bdrv_release_dirty_bitmap(bs, s->dirty_bitmap);
|
bdrv_release_dirty_bitmap(bs, s->dirty_bitmap);
|
||||||
if (s->target->blk) {
|
|
||||||
blk_iostatus_disable(s->target->blk);
|
|
||||||
}
|
|
||||||
|
|
||||||
data = g_malloc(sizeof(*data));
|
data = g_malloc(sizeof(*data));
|
||||||
data->ret = ret;
|
data->ret = ret;
|
||||||
@ -739,15 +736,6 @@ static void mirror_set_speed(BlockJob *job, int64_t speed, Error **errp)
|
|||||||
ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME);
|
ratelimit_set_speed(&s->limit, speed / BDRV_SECTOR_SIZE, SLICE_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mirror_iostatus_reset(BlockJob *job)
|
|
||||||
{
|
|
||||||
MirrorBlockJob *s = container_of(job, MirrorBlockJob, common);
|
|
||||||
|
|
||||||
if (s->target->blk) {
|
|
||||||
blk_iostatus_reset(s->target->blk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mirror_complete(BlockJob *job, Error **errp)
|
static void mirror_complete(BlockJob *job, Error **errp)
|
||||||
{
|
{
|
||||||
MirrorBlockJob *s = container_of(job, MirrorBlockJob, common);
|
MirrorBlockJob *s = container_of(job, MirrorBlockJob, common);
|
||||||
@ -793,7 +781,6 @@ static const BlockJobDriver mirror_job_driver = {
|
|||||||
.instance_size = sizeof(MirrorBlockJob),
|
.instance_size = sizeof(MirrorBlockJob),
|
||||||
.job_type = BLOCK_JOB_TYPE_MIRROR,
|
.job_type = BLOCK_JOB_TYPE_MIRROR,
|
||||||
.set_speed = mirror_set_speed,
|
.set_speed = mirror_set_speed,
|
||||||
.iostatus_reset= mirror_iostatus_reset,
|
|
||||||
.complete = mirror_complete,
|
.complete = mirror_complete,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -801,8 +788,6 @@ static const BlockJobDriver commit_active_job_driver = {
|
|||||||
.instance_size = sizeof(MirrorBlockJob),
|
.instance_size = sizeof(MirrorBlockJob),
|
||||||
.job_type = BLOCK_JOB_TYPE_COMMIT,
|
.job_type = BLOCK_JOB_TYPE_COMMIT,
|
||||||
.set_speed = mirror_set_speed,
|
.set_speed = mirror_set_speed,
|
||||||
.iostatus_reset
|
|
||||||
= mirror_iostatus_reset,
|
|
||||||
.complete = mirror_complete,
|
.complete = mirror_complete,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -827,13 +812,6 @@ static void mirror_start_job(BlockDriverState *bs, BlockDriverState *target,
|
|||||||
|
|
||||||
assert ((granularity & (granularity - 1)) == 0);
|
assert ((granularity & (granularity - 1)) == 0);
|
||||||
|
|
||||||
if ((on_source_error == BLOCKDEV_ON_ERROR_STOP ||
|
|
||||||
on_source_error == BLOCKDEV_ON_ERROR_ENOSPC) &&
|
|
||||||
(!bs->blk || !blk_iostatus_is_enabled(bs->blk))) {
|
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER, "on-source-error");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buf_size < 0) {
|
if (buf_size < 0) {
|
||||||
error_setg(errp, "Invalid parameter 'buf-size'");
|
error_setg(errp, "Invalid parameter 'buf-size'");
|
||||||
return;
|
return;
|
||||||
@ -882,10 +860,6 @@ static void mirror_start_job(BlockDriverState *bs, BlockDriverState *target,
|
|||||||
|
|
||||||
bdrv_op_block_all(s->target, s->common.blocker);
|
bdrv_op_block_all(s->target, s->common.blocker);
|
||||||
|
|
||||||
if (s->target->blk) {
|
|
||||||
blk_set_on_error(s->target->blk, on_target_error, on_target_error);
|
|
||||||
blk_iostatus_enable(s->target->blk);
|
|
||||||
}
|
|
||||||
s->common.co = qemu_coroutine_create(mirror_run);
|
s->common.co = qemu_coroutine_create(mirror_run);
|
||||||
trace_mirror_start(bs, s, s->common.co, opaque);
|
trace_mirror_start(bs, s, s->common.co, opaque);
|
||||||
qemu_coroutine_enter(s->common.co, s);
|
qemu_coroutine_enter(s->common.co, s);
|
||||||
|
@ -223,13 +223,6 @@ void stream_start(BlockDriverState *bs, BlockDriverState *base,
|
|||||||
{
|
{
|
||||||
StreamBlockJob *s;
|
StreamBlockJob *s;
|
||||||
|
|
||||||
if ((on_error == BLOCKDEV_ON_ERROR_STOP ||
|
|
||||||
on_error == BLOCKDEV_ON_ERROR_ENOSPC) &&
|
|
||||||
(!bs->blk || !blk_iostatus_is_enabled(bs->blk))) {
|
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER, "on-error");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
s = block_job_create(&stream_job_driver, bs, speed, cb, opaque, errp);
|
s = block_job_create(&stream_job_driver, bs, speed, cb, opaque, errp);
|
||||||
if (!s) {
|
if (!s) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user