Message ID | 20180906130225.5118-14-jsnow@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | jobs: Job Exit Refactoring Pt 2 | expand |
On Thu, Sep 06, 2018 at 09:02:22AM -0400, John Snow wrote: > Signed-off-by: John Snow <jsnow@redhat.com> > Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Jeff Cody <jcody@redhat.com> > --- > blockdev.c | 14 ++++++++++++++ > qapi/block-core.json | 30 ++++++++++++++++++++++++++++-- > 2 files changed, 42 insertions(+), 2 deletions(-) > > diff --git a/blockdev.c b/blockdev.c > index 98b91e75a7..429cdf9901 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -3597,6 +3597,8 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs, > bool has_filter_node_name, > const char *filter_node_name, > bool has_copy_mode, MirrorCopyMode copy_mode, > + bool has_auto_finalize, bool auto_finalize, > + bool has_auto_dismiss, bool auto_dismiss, > Error **errp) > { > int job_flags = JOB_DEFAULT; > @@ -3625,6 +3627,12 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs, > if (!has_copy_mode) { > copy_mode = MIRROR_COPY_MODE_BACKGROUND; > } > + if (has_auto_finalize && !auto_finalize) { > + job_flags |= JOB_MANUAL_FINALIZE; > + } > + if (has_auto_dismiss && !auto_dismiss) { > + job_flags |= JOB_MANUAL_DISMISS; > + } > > if (granularity != 0 && (granularity < 512 || granularity > 1048576 * 64)) { > error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity", > @@ -3802,6 +3810,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp) > arg->has_unmap, arg->unmap, > false, NULL, > arg->has_copy_mode, arg->copy_mode, > + arg->has_auto_finalize, arg->auto_finalize, > + arg->has_auto_dismiss, arg->auto_dismiss, > &local_err); > bdrv_unref(target_bs); > error_propagate(errp, local_err); > @@ -3823,6 +3833,8 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id, > bool has_filter_node_name, > const char *filter_node_name, > bool has_copy_mode, MirrorCopyMode copy_mode, > + bool has_auto_finalize, bool auto_finalize, > + bool has_auto_dismiss, bool auto_dismiss, > Error **errp) > { > BlockDriverState *bs; > @@ -3856,6 +3868,8 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id, > true, true, > has_filter_node_name, filter_node_name, > has_copy_mode, copy_mode, > + has_auto_finalize, auto_finalize, > + has_auto_dismiss, auto_dismiss, > &local_err); > error_propagate(errp, local_err); > > diff --git a/qapi/block-core.json b/qapi/block-core.json > index d5b62e50d7..e785c2e9fe 100644 > --- a/qapi/block-core.json > +++ b/qapi/block-core.json > @@ -1729,6 +1729,18 @@ > # @copy-mode: when to copy data to the destination; defaults to 'background' > # (Since: 3.0) > # > +# @auto-finalize: When false, this job will wait in a PENDING state after it has > +# finished its work, waiting for @block-job-finalize before > +# making any block graph changes. > +# When true, this job will automatically > +# perform its abort or commit actions. > +# Defaults to true. (Since 3.1) > +# > +# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it > +# has completely ceased all work, and awaits @block-job-dismiss. > +# When true, this job will automatically disappear from the query > +# list without user intervention. > +# Defaults to true. (Since 3.1) > # Since: 1.3 > ## > { 'struct': 'DriveMirror', > @@ -1738,7 +1750,8 @@ > '*speed': 'int', '*granularity': 'uint32', > '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', > '*on-target-error': 'BlockdevOnError', > - '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode' } } > + '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode', > + '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } > > ## > # @BlockDirtyBitmap: > @@ -2004,6 +2017,18 @@ > # @copy-mode: when to copy data to the destination; defaults to 'background' > # (Since: 3.0) > # > +# @auto-finalize: When false, this job will wait in a PENDING state after it has > +# finished its work, waiting for @block-job-finalize before > +# making any block graph changes. > +# When true, this job will automatically > +# perform its abort or commit actions. > +# Defaults to true. (Since 3.1) > +# > +# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it > +# has completely ceased all work, and awaits @block-job-dismiss. > +# When true, this job will automatically disappear from the query > +# list without user intervention. > +# Defaults to true. (Since 3.1) > # Returns: nothing on success. > # > # Since: 2.6 > @@ -2025,7 +2050,8 @@ > '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', > '*on-target-error': 'BlockdevOnError', > '*filter-node-name': 'str', > - '*copy-mode': 'MirrorCopyMode' } } > + '*copy-mode': 'MirrorCopyMode', > + '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } > > ## > # @block_set_io_throttle: > -- > 2.14.4 >
diff --git a/blockdev.c b/blockdev.c index 98b91e75a7..429cdf9901 100644 --- a/blockdev.c +++ b/blockdev.c @@ -3597,6 +3597,8 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs, bool has_filter_node_name, const char *filter_node_name, bool has_copy_mode, MirrorCopyMode copy_mode, + bool has_auto_finalize, bool auto_finalize, + bool has_auto_dismiss, bool auto_dismiss, Error **errp) { int job_flags = JOB_DEFAULT; @@ -3625,6 +3627,12 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs, if (!has_copy_mode) { copy_mode = MIRROR_COPY_MODE_BACKGROUND; } + if (has_auto_finalize && !auto_finalize) { + job_flags |= JOB_MANUAL_FINALIZE; + } + if (has_auto_dismiss && !auto_dismiss) { + job_flags |= JOB_MANUAL_DISMISS; + } if (granularity != 0 && (granularity < 512 || granularity > 1048576 * 64)) { error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "granularity", @@ -3802,6 +3810,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp) arg->has_unmap, arg->unmap, false, NULL, arg->has_copy_mode, arg->copy_mode, + arg->has_auto_finalize, arg->auto_finalize, + arg->has_auto_dismiss, arg->auto_dismiss, &local_err); bdrv_unref(target_bs); error_propagate(errp, local_err); @@ -3823,6 +3833,8 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id, bool has_filter_node_name, const char *filter_node_name, bool has_copy_mode, MirrorCopyMode copy_mode, + bool has_auto_finalize, bool auto_finalize, + bool has_auto_dismiss, bool auto_dismiss, Error **errp) { BlockDriverState *bs; @@ -3856,6 +3868,8 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id, true, true, has_filter_node_name, filter_node_name, has_copy_mode, copy_mode, + has_auto_finalize, auto_finalize, + has_auto_dismiss, auto_dismiss, &local_err); error_propagate(errp, local_err); diff --git a/qapi/block-core.json b/qapi/block-core.json index d5b62e50d7..e785c2e9fe 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1729,6 +1729,18 @@ # @copy-mode: when to copy data to the destination; defaults to 'background' # (Since: 3.0) # +# @auto-finalize: When false, this job will wait in a PENDING state after it has +# finished its work, waiting for @block-job-finalize before +# making any block graph changes. +# When true, this job will automatically +# perform its abort or commit actions. +# Defaults to true. (Since 3.1) +# +# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it +# has completely ceased all work, and awaits @block-job-dismiss. +# When true, this job will automatically disappear from the query +# list without user intervention. +# Defaults to true. (Since 3.1) # Since: 1.3 ## { 'struct': 'DriveMirror', @@ -1738,7 +1750,8 @@ '*speed': 'int', '*granularity': 'uint32', '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', '*on-target-error': 'BlockdevOnError', - '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode' } } + '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode', + '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } ## # @BlockDirtyBitmap: @@ -2004,6 +2017,18 @@ # @copy-mode: when to copy data to the destination; defaults to 'background' # (Since: 3.0) # +# @auto-finalize: When false, this job will wait in a PENDING state after it has +# finished its work, waiting for @block-job-finalize before +# making any block graph changes. +# When true, this job will automatically +# perform its abort or commit actions. +# Defaults to true. (Since 3.1) +# +# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it +# has completely ceased all work, and awaits @block-job-dismiss. +# When true, this job will automatically disappear from the query +# list without user intervention. +# Defaults to true. (Since 3.1) # Returns: nothing on success. # # Since: 2.6 @@ -2025,7 +2050,8 @@ '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', '*on-target-error': 'BlockdevOnError', '*filter-node-name': 'str', - '*copy-mode': 'MirrorCopyMode' } } + '*copy-mode': 'MirrorCopyMode', + '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } ## # @block_set_io_throttle: