Re: [PATCH v3 04/13] monitor/hmp: move hmp_drive_del and hmp_commit to block-hmp-cmds.c
On Tue, 2020-01-28 at 17:51 +, Dr. David Alan Gilbert wrote: > * Maxim Levitsky (mlevi...@redhat.com) wrote: > > Signed-off-by: Maxim Levitsky > > Reviewed-by: Dr. David Alan Gilbert > > (It's easier to compare if you keep the function order the same) Sorry about that, next time I will do that. Thanks a lot for the review! Best regards, Maxim Levitsky > > > --- > > block/monitor/block-hmp-cmds.c | 97 +- > > blockdev.c | 95 - > > include/block/block-hmp-commands.h | 3 + > > include/sysemu/blockdev.h | 4 -- > > 4 files changed, 99 insertions(+), 100 deletions(-) > > > > diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c > > index c65aaa86ea..9614c67e77 100644 > > --- a/block/monitor/block-hmp-cmds.c > > +++ b/block/monitor/block-hmp-cmds.c > > @@ -12,6 +12,7 @@ > > #include "hw/boards.h" > > #include "sysemu/block-backend.h" > > #include "sysemu/blockdev.h" > > +#include "qapi/qapi-commands-block.h" > > #include "qapi/qmp/qdict.h" > > #include "qapi/error.h" > > #include "qemu/config-file.h" > > @@ -21,7 +22,6 @@ > > #include "block/block_int.h" > > #include "block/block-hmp-commands.h" > > > > - > > void hmp_drive_add(Monitor *mon, const QDict *qdict) > > { > > Error *err = NULL; > > @@ -69,3 +69,98 @@ err: > > blk_unref(blk); > > } > > } > > + > > +void hmp_drive_del(Monitor *mon, const QDict *qdict) > > +{ > > +const char *id = qdict_get_str(qdict, "id"); > > +BlockBackend *blk; > > +BlockDriverState *bs; > > +AioContext *aio_context; > > +Error *local_err = NULL; > > + > > +bs = bdrv_find_node(id); > > +if (bs) { > > +qmp_blockdev_del(id, _err); > > +if (local_err) { > > +error_report_err(local_err); > > +} > > +return; > > +} > > + > > +blk = blk_by_name(id); > > +if (!blk) { > > +error_report("Device '%s' not found", id); > > +return; > > +} > > + > > +if (!blk_legacy_dinfo(blk)) { > > +error_report("Deleting device added with blockdev-add" > > + " is not supported"); > > +return; > > +} > > + > > +aio_context = blk_get_aio_context(blk); > > +aio_context_acquire(aio_context); > > + > > +bs = blk_bs(blk); > > +if (bs) { > > +if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, _err)) { > > +error_report_err(local_err); > > +aio_context_release(aio_context); > > +return; > > +} > > + > > +blk_remove_bs(blk); > > +} > > + > > +/* Make the BlockBackend and the attached BlockDriverState anonymous */ > > +monitor_remove_blk(blk); > > + > > +/* If this BlockBackend has a device attached to it, its refcount will > > be > > + * decremented when the device is removed; otherwise we have to do so > > here. > > + */ > > +if (blk_get_attached_dev(blk)) { > > +/* Further I/O must not pause the guest */ > > +blk_set_on_error(blk, BLOCKDEV_ON_ERROR_REPORT, > > + BLOCKDEV_ON_ERROR_REPORT); > > +} else { > > +blk_unref(blk); > > +} > > + > > +aio_context_release(aio_context); > > +} > > + > > +void hmp_commit(Monitor *mon, const QDict *qdict) > > +{ > > +const char *device = qdict_get_str(qdict, "device"); > > +BlockBackend *blk; > > +int ret; > > + > > +if (!strcmp(device, "all")) { > > +ret = blk_commit_all(); > > +} else { > > +BlockDriverState *bs; > > +AioContext *aio_context; > > + > > +blk = blk_by_name(device); > > +if (!blk) { > > +error_report("Device '%s' not found", device); > > +return; > > +} > > +if (!blk_is_available(blk)) { > > +error_report("Device '%s' has no medium", device); > > +return; > > +} > > + > > +bs = blk_bs(blk); > > +aio_context = bdrv_get_aio_context(bs); > > +aio_context_acquire(aio_context); > > + > > +ret = bdrv_commit(bs); > > + > > +aio_context_release(aio_context); > > +} > > +if (ret < 0) { > > +error_report("'commit' error for '%s': %s", device, > > strerror(-ret)); > > +} > > +} > > diff --git a/blockdev.c b/blockdev.c > > index 8e029e9c01..df43e0aaef 100644 > > --- a/blockdev.c > > +++ b/blockdev.c > > @@ -1074,41 +1074,6 @@ static BlockBackend *qmp_get_blk(const char > > *blk_name, const char *qdev_id, > > return blk; > > } > > > > -void hmp_commit(Monitor *mon, const QDict *qdict) > > -{ > > -const char *device = qdict_get_str(qdict, "device"); > > -BlockBackend *blk; > > -int ret; > > - > > -if (!strcmp(device, "all")) { > > -ret = blk_commit_all(); > > -} else { > > -BlockDriverState *bs; > > -AioContext *aio_context; > > - > > -blk =
Re: [PATCH v3 04/13] monitor/hmp: move hmp_drive_del and hmp_commit to block-hmp-cmds.c
* Maxim Levitsky (mlevi...@redhat.com) wrote: > Signed-off-by: Maxim Levitsky Reviewed-by: Dr. David Alan Gilbert (It's easier to compare if you keep the function order the same) > --- > block/monitor/block-hmp-cmds.c | 97 +- > blockdev.c | 95 - > include/block/block-hmp-commands.h | 3 + > include/sysemu/blockdev.h | 4 -- > 4 files changed, 99 insertions(+), 100 deletions(-) > > diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c > index c65aaa86ea..9614c67e77 100644 > --- a/block/monitor/block-hmp-cmds.c > +++ b/block/monitor/block-hmp-cmds.c > @@ -12,6 +12,7 @@ > #include "hw/boards.h" > #include "sysemu/block-backend.h" > #include "sysemu/blockdev.h" > +#include "qapi/qapi-commands-block.h" > #include "qapi/qmp/qdict.h" > #include "qapi/error.h" > #include "qemu/config-file.h" > @@ -21,7 +22,6 @@ > #include "block/block_int.h" > #include "block/block-hmp-commands.h" > > - > void hmp_drive_add(Monitor *mon, const QDict *qdict) > { > Error *err = NULL; > @@ -69,3 +69,98 @@ err: > blk_unref(blk); > } > } > + > +void hmp_drive_del(Monitor *mon, const QDict *qdict) > +{ > +const char *id = qdict_get_str(qdict, "id"); > +BlockBackend *blk; > +BlockDriverState *bs; > +AioContext *aio_context; > +Error *local_err = NULL; > + > +bs = bdrv_find_node(id); > +if (bs) { > +qmp_blockdev_del(id, _err); > +if (local_err) { > +error_report_err(local_err); > +} > +return; > +} > + > +blk = blk_by_name(id); > +if (!blk) { > +error_report("Device '%s' not found", id); > +return; > +} > + > +if (!blk_legacy_dinfo(blk)) { > +error_report("Deleting device added with blockdev-add" > + " is not supported"); > +return; > +} > + > +aio_context = blk_get_aio_context(blk); > +aio_context_acquire(aio_context); > + > +bs = blk_bs(blk); > +if (bs) { > +if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, _err)) { > +error_report_err(local_err); > +aio_context_release(aio_context); > +return; > +} > + > +blk_remove_bs(blk); > +} > + > +/* Make the BlockBackend and the attached BlockDriverState anonymous */ > +monitor_remove_blk(blk); > + > +/* If this BlockBackend has a device attached to it, its refcount will be > + * decremented when the device is removed; otherwise we have to do so > here. > + */ > +if (blk_get_attached_dev(blk)) { > +/* Further I/O must not pause the guest */ > +blk_set_on_error(blk, BLOCKDEV_ON_ERROR_REPORT, > + BLOCKDEV_ON_ERROR_REPORT); > +} else { > +blk_unref(blk); > +} > + > +aio_context_release(aio_context); > +} > + > +void hmp_commit(Monitor *mon, const QDict *qdict) > +{ > +const char *device = qdict_get_str(qdict, "device"); > +BlockBackend *blk; > +int ret; > + > +if (!strcmp(device, "all")) { > +ret = blk_commit_all(); > +} else { > +BlockDriverState *bs; > +AioContext *aio_context; > + > +blk = blk_by_name(device); > +if (!blk) { > +error_report("Device '%s' not found", device); > +return; > +} > +if (!blk_is_available(blk)) { > +error_report("Device '%s' has no medium", device); > +return; > +} > + > +bs = blk_bs(blk); > +aio_context = bdrv_get_aio_context(bs); > +aio_context_acquire(aio_context); > + > +ret = bdrv_commit(bs); > + > +aio_context_release(aio_context); > +} > +if (ret < 0) { > +error_report("'commit' error for '%s': %s", device, strerror(-ret)); > +} > +} > diff --git a/blockdev.c b/blockdev.c > index 8e029e9c01..df43e0aaef 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -1074,41 +1074,6 @@ static BlockBackend *qmp_get_blk(const char *blk_name, > const char *qdev_id, > return blk; > } > > -void hmp_commit(Monitor *mon, const QDict *qdict) > -{ > -const char *device = qdict_get_str(qdict, "device"); > -BlockBackend *blk; > -int ret; > - > -if (!strcmp(device, "all")) { > -ret = blk_commit_all(); > -} else { > -BlockDriverState *bs; > -AioContext *aio_context; > - > -blk = blk_by_name(device); > -if (!blk) { > -error_report("Device '%s' not found", device); > -return; > -} > -if (!blk_is_available(blk)) { > -error_report("Device '%s' has no medium", device); > -return; > -} > - > -bs = blk_bs(blk); > -aio_context = bdrv_get_aio_context(bs); > -aio_context_acquire(aio_context); > - > -ret = bdrv_commit(bs); > - > -aio_context_release(aio_context); > -
[PATCH v3 04/13] monitor/hmp: move hmp_drive_del and hmp_commit to block-hmp-cmds.c
Signed-off-by: Maxim Levitsky --- block/monitor/block-hmp-cmds.c | 97 +- blockdev.c | 95 - include/block/block-hmp-commands.h | 3 + include/sysemu/blockdev.h | 4 -- 4 files changed, 99 insertions(+), 100 deletions(-) diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index c65aaa86ea..9614c67e77 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -12,6 +12,7 @@ #include "hw/boards.h" #include "sysemu/block-backend.h" #include "sysemu/blockdev.h" +#include "qapi/qapi-commands-block.h" #include "qapi/qmp/qdict.h" #include "qapi/error.h" #include "qemu/config-file.h" @@ -21,7 +22,6 @@ #include "block/block_int.h" #include "block/block-hmp-commands.h" - void hmp_drive_add(Monitor *mon, const QDict *qdict) { Error *err = NULL; @@ -69,3 +69,98 @@ err: blk_unref(blk); } } + +void hmp_drive_del(Monitor *mon, const QDict *qdict) +{ +const char *id = qdict_get_str(qdict, "id"); +BlockBackend *blk; +BlockDriverState *bs; +AioContext *aio_context; +Error *local_err = NULL; + +bs = bdrv_find_node(id); +if (bs) { +qmp_blockdev_del(id, _err); +if (local_err) { +error_report_err(local_err); +} +return; +} + +blk = blk_by_name(id); +if (!blk) { +error_report("Device '%s' not found", id); +return; +} + +if (!blk_legacy_dinfo(blk)) { +error_report("Deleting device added with blockdev-add" + " is not supported"); +return; +} + +aio_context = blk_get_aio_context(blk); +aio_context_acquire(aio_context); + +bs = blk_bs(blk); +if (bs) { +if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_DRIVE_DEL, _err)) { +error_report_err(local_err); +aio_context_release(aio_context); +return; +} + +blk_remove_bs(blk); +} + +/* Make the BlockBackend and the attached BlockDriverState anonymous */ +monitor_remove_blk(blk); + +/* If this BlockBackend has a device attached to it, its refcount will be + * decremented when the device is removed; otherwise we have to do so here. + */ +if (blk_get_attached_dev(blk)) { +/* Further I/O must not pause the guest */ +blk_set_on_error(blk, BLOCKDEV_ON_ERROR_REPORT, + BLOCKDEV_ON_ERROR_REPORT); +} else { +blk_unref(blk); +} + +aio_context_release(aio_context); +} + +void hmp_commit(Monitor *mon, const QDict *qdict) +{ +const char *device = qdict_get_str(qdict, "device"); +BlockBackend *blk; +int ret; + +if (!strcmp(device, "all")) { +ret = blk_commit_all(); +} else { +BlockDriverState *bs; +AioContext *aio_context; + +blk = blk_by_name(device); +if (!blk) { +error_report("Device '%s' not found", device); +return; +} +if (!blk_is_available(blk)) { +error_report("Device '%s' has no medium", device); +return; +} + +bs = blk_bs(blk); +aio_context = bdrv_get_aio_context(bs); +aio_context_acquire(aio_context); + +ret = bdrv_commit(bs); + +aio_context_release(aio_context); +} +if (ret < 0) { +error_report("'commit' error for '%s': %s", device, strerror(-ret)); +} +} diff --git a/blockdev.c b/blockdev.c index 8e029e9c01..df43e0aaef 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1074,41 +1074,6 @@ static BlockBackend *qmp_get_blk(const char *blk_name, const char *qdev_id, return blk; } -void hmp_commit(Monitor *mon, const QDict *qdict) -{ -const char *device = qdict_get_str(qdict, "device"); -BlockBackend *blk; -int ret; - -if (!strcmp(device, "all")) { -ret = blk_commit_all(); -} else { -BlockDriverState *bs; -AioContext *aio_context; - -blk = blk_by_name(device); -if (!blk) { -error_report("Device '%s' not found", device); -return; -} -if (!blk_is_available(blk)) { -error_report("Device '%s' has no medium", device); -return; -} - -bs = blk_bs(blk); -aio_context = bdrv_get_aio_context(bs); -aio_context_acquire(aio_context); - -ret = bdrv_commit(bs); - -aio_context_release(aio_context); -} -if (ret < 0) { -error_report("'commit' error for '%s': %s", device, strerror(-ret)); -} -} - static void blockdev_do_action(TransactionAction *action, Error **errp) { TransactionActionList list; @@ -3101,66 +3066,6 @@ BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *node, return ret; } -void hmp_drive_del(Monitor *mon, const QDict *qdict) -{ -const char *id = qdict_get_str(qdict, "id"); -BlockBackend *blk; -