All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.