Re: [PATCH v3 04/13] monitor/hmp: move hmp_drive_del and hmp_commit to block-hmp-cmds.c

2020-01-28 Thread Maxim Levitsky
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

2020-01-28 Thread Dr. David Alan Gilbert
* 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

2020-01-27 Thread Maxim Levitsky
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;
-