qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH V3 0/3] Block migration when streaming block jobs are running
@ 2012-07-23 13:06 benoit.canet
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 1/3] block: Add bdrv_are_busy() benoit.canet
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: benoit.canet @ 2012-07-23 13:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, stefanha, Benoît Canet, stefanha, pbonzini

From: Benoît Canet <benoit@irqsave.net>

This patchset is designed to avoid starting a live migration while one or more
streaming block jobs are running.

Tested with the following sequence:

QEMU 1.1.50 monitor - type 'help' for more information
(qemu) block_stream virtio0 1k
(qemu) migrate tcp:localhost:4444
migrate: Migration is blocked by streaming
(qemu)  block_job_cancel virtio0
(qemu)  migrate tcp:localhost:4444
migrate: Connection can not be completed immediately
(qemu) 
=> migration then succeed

in v2:
stefanha: Rename bdrv_have_block_jobs() to bdrv_are_busy() and make it return -EBUSY.
paolo: remove spurious bdrv_close()

in v3
pm215: rewrite confusing error message

Benoît Canet (3):
  block: Add bdrv_are_busy()
  qerror: Add error telling that streaming blocks migration
  migration: block migration when streaming block jobs are running.

 block.c     |   13 +++++++++++++
 block.h     |    2 ++
 migration.c |    5 +++++
 qerror.c    |    4 ++++
 qerror.h    |    3 +++
 5 files changed, 27 insertions(+)

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH V3 1/3] block: Add bdrv_are_busy()
  2012-07-23 13:06 [Qemu-devel] [PATCH V3 0/3] Block migration when streaming block jobs are running benoit.canet
@ 2012-07-23 13:06 ` benoit.canet
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 2/3] qerror: Add error telling that streaming blocks migration benoit.canet
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 3/3] migration: block migration when streaming block jobs are running benoit.canet
  2 siblings, 0 replies; 5+ messages in thread
From: benoit.canet @ 2012-07-23 13:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, stefanha, Benoît Canet, stefanha, pbonzini

From: Benoît Canet <benoit@irqsave.net>

bdrv_are_busy will be used to check if any of the bs are in use
or if one of them have a running block job.

The first user will be qmp_migrate().

Signed-off-by: Benoit Canet <benoit@irqsave.net>
---
 block.c |   13 +++++++++++++
 block.h |    2 ++
 2 files changed, 15 insertions(+)

diff --git a/block.c b/block.c
index ce7eb8f..bc8f160 100644
--- a/block.c
+++ b/block.c
@@ -4027,6 +4027,19 @@ out:
     return ret;
 }
 
+int bdrv_are_busy(void)
+{
+    BlockDriverState *bs;
+
+    QTAILQ_FOREACH(bs, &bdrv_states, list) {
+        if (bs->job || bdrv_in_use(bs)) {
+            return -EBUSY;
+        }
+    }
+
+    return 0;
+}
+
 void *block_job_create(const BlockJobType *job_type, BlockDriverState *bs,
                        int64_t speed, BlockDriverCompletionFunc *cb,
                        void *opaque, Error **errp)
diff --git a/block.h b/block.h
index c89590d..0a3de2f 100644
--- a/block.h
+++ b/block.h
@@ -337,6 +337,8 @@ void bdrv_disable_copy_on_read(BlockDriverState *bs);
 void bdrv_set_in_use(BlockDriverState *bs, int in_use);
 int bdrv_in_use(BlockDriverState *bs);
 
+int bdrv_are_busy(void);
+
 enum BlockAcctType {
     BDRV_ACCT_READ,
     BDRV_ACCT_WRITE,
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH V3 2/3] qerror: Add error telling that streaming blocks migration
  2012-07-23 13:06 [Qemu-devel] [PATCH V3 0/3] Block migration when streaming block jobs are running benoit.canet
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 1/3] block: Add bdrv_are_busy() benoit.canet
@ 2012-07-23 13:06 ` benoit.canet
  2012-07-23 13:39   ` Stefan Hajnoczi
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 3/3] migration: block migration when streaming block jobs are running benoit.canet
  2 siblings, 1 reply; 5+ messages in thread
From: benoit.canet @ 2012-07-23 13:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, stefanha, Benoît Canet, stefanha, pbonzini

From: Benoît Canet <benoit@irqsave.net>

Signed-off-by: Benoit Canet <benoit@irqsave.net>
---
 qerror.c |    4 ++++
 qerror.h |    3 +++
 2 files changed, 7 insertions(+)

diff --git a/qerror.c b/qerror.c
index 92c4eff..c7889fe 100644
--- a/qerror.c
+++ b/qerror.c
@@ -283,6 +283,10 @@ static const QErrorStringTable qerror_table[] = {
         .desc      = "Could not set password",
     },
     {
+        .error_fmt = QERR_MIGRATION_BLOCKED_BY_STREAMING,
+        .desc      = "Migration is blocked by streaming",
+    },
+    {
         .error_fmt = QERR_TOO_MANY_FILES,
         .desc      = "Too many open files",
     },
diff --git a/qerror.h b/qerror.h
index b4c8758..dca27f7 100644
--- a/qerror.h
+++ b/qerror.h
@@ -233,6 +233,9 @@ QError *qobject_to_qerror(const QObject *obj);
 #define QERR_SET_PASSWD_FAILED \
     "{ 'class': 'SetPasswdFailed', 'data': {} }"
 
+#define QERR_MIGRATION_BLOCKED_BY_STREAMING \
+    "{ 'class': 'MigrationBlockedByStreaming', 'data': {} }"
+
 #define QERR_TOO_MANY_FILES \
     "{ 'class': 'TooManyFiles', 'data': {} }"
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH V3 3/3] migration: block migration when streaming block jobs are running.
  2012-07-23 13:06 [Qemu-devel] [PATCH V3 0/3] Block migration when streaming block jobs are running benoit.canet
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 1/3] block: Add bdrv_are_busy() benoit.canet
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 2/3] qerror: Add error telling that streaming blocks migration benoit.canet
@ 2012-07-23 13:06 ` benoit.canet
  2 siblings, 0 replies; 5+ messages in thread
From: benoit.canet @ 2012-07-23 13:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: kwolf, stefanha, Benoît Canet, stefanha, pbonzini

From: Benoît Canet <benoit@irqsave.net>

Signed-off-by: Benoit Canet <benoit@irqsave.net>
---
 migration.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/migration.c b/migration.c
index 8db1b43..4ffdcf2 100644
--- a/migration.c
+++ b/migration.c
@@ -425,6 +425,11 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
         return;
     }
 
+    if (bdrv_are_busy()) {
+        error_set(errp, QERR_MIGRATION_BLOCKED_BY_STREAMING);
+        return;
+    }
+
     s = migrate_init(&params);
 
     if (strstart(uri, "tcp:", &p)) {
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH V3 2/3] qerror: Add error telling that streaming blocks migration
  2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 2/3] qerror: Add error telling that streaming blocks migration benoit.canet
@ 2012-07-23 13:39   ` Stefan Hajnoczi
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Hajnoczi @ 2012-07-23 13:39 UTC (permalink / raw)
  To: benoit.canet; +Cc: kwolf, pbonzini, Benoît Canet, qemu-devel, stefanha

On Mon, Jul 23, 2012 at 2:06 PM,  <benoit.canet@gmail.com> wrote:
> From: Benoît Canet <benoit@irqsave.net>
>
> Signed-off-by: Benoit Canet <benoit@irqsave.net>
> ---
>  qerror.c |    4 ++++
>  qerror.h |    3 +++
>  2 files changed, 7 insertions(+)
>
> diff --git a/qerror.c b/qerror.c
> index 92c4eff..c7889fe 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -283,6 +283,10 @@ static const QErrorStringTable qerror_table[] = {
>          .desc      = "Could not set password",
>      },
>      {
> +        .error_fmt = QERR_MIGRATION_BLOCKED_BY_STREAMING,
> +        .desc      = "Migration is blocked by streaming",

bdrv_in_use() is general and the error message should be too.  There
may be other operations besides streaming that prevent migration.

Stefan

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-07-23 13:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-23 13:06 [Qemu-devel] [PATCH V3 0/3] Block migration when streaming block jobs are running benoit.canet
2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 1/3] block: Add bdrv_are_busy() benoit.canet
2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 2/3] qerror: Add error telling that streaming blocks migration benoit.canet
2012-07-23 13:39   ` Stefan Hajnoczi
2012-07-23 13:06 ` [Qemu-devel] [PATCH V3 3/3] migration: block migration when streaming block jobs are running benoit.canet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).