* [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(¶ms);
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).