mirror of https://github.com/xemu-project/xemu.git
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 iQEcBAABAgAGBQJV5x1dAAoJEJykq7OBq3PIXWMIAMmonV9BapMuwd2ydrluJFJg UiAZoDnmnG5Su08+XQsuxcYBA0y0Cc9YaDH8cbqe0XaCBSvkOPUc4Rc/aZRW0QGs JtB4Lrvc4QCGUn/kAhslCAOBW5cJAw2dLuCHFwP0wxdz13hlhw/RPjL9/Up377XI 73bidhy5Cy4YggWi78kqFCymtPV+GPrcDHKWdRpsSMOU+rNWMHog3JRUSyB9jKin jBSolxBJ4Qn2eaIT8+CPATVMOtPeFEw15peSN7mhLGEeheIXNenqxNVjmJfZZY6L ybDhEC5Ha6ZxQO7fpTSIHexkUTD2gyqv7rxVZmSw0DWIka7GoCcwA00Y3Ho60qc= =T3cV -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging # gpg: Signature made Wed 02 Sep 2015 17:01:33 BST using RSA key ID 81AB73C8 # gpg: Good signature from "Stefan Hajnoczi <stefanha@redhat.com>" # gpg: aka "Stefan Hajnoczi <stefanha@gmail.com>" * remotes/stefanha/tags/block-pull-request: block: more check for replaced node MAINTAINERS: add responsible person for Parallels format driver Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
0eac5986fc
|
@ -1307,6 +1307,7 @@ F: block/dmg.c
|
|||
|
||||
parallels
|
||||
M: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
M: Denis V. Lunev <den@openvz.org>
|
||||
L: qemu-block@nongnu.org
|
||||
S: Supported
|
||||
F: block/parallels.c
|
||||
|
|
5
block.c
5
block.c
|
@ -4077,7 +4077,8 @@ bool bdrv_is_first_non_filter(BlockDriverState *candidate)
|
|||
return false;
|
||||
}
|
||||
|
||||
BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
|
||||
BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
|
||||
const char *node_name, Error **errp)
|
||||
{
|
||||
BlockDriverState *to_replace_bs = bdrv_find_node(node_name);
|
||||
AioContext *aio_context;
|
||||
|
@ -4100,7 +4101,7 @@ BlockDriverState *check_to_replace_node(const char *node_name, Error **errp)
|
|||
* Another benefit is that this tests exclude backing files which are
|
||||
* blocked by the backing blockers.
|
||||
*/
|
||||
if (!bdrv_is_first_non_filter(to_replace_bs)) {
|
||||
if (!bdrv_recurse_is_first_non_filter(parent_bs, to_replace_bs)) {
|
||||
error_setg(errp, "Only top most non filter can be replaced");
|
||||
to_replace_bs = NULL;
|
||||
goto out;
|
||||
|
|
|
@ -644,9 +644,9 @@ static void mirror_complete(BlockJob *job, Error **errp)
|
|||
if (s->replaces) {
|
||||
AioContext *replace_aio_context;
|
||||
|
||||
s->to_replace = check_to_replace_node(s->replaces, &local_err);
|
||||
s->to_replace = bdrv_find_node(s->replaces);
|
||||
if (!s->to_replace) {
|
||||
error_propagate(errp, local_err);
|
||||
error_setg(errp, "Node name '%s' not found", s->replaces);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -2760,7 +2760,7 @@ void qmp_drive_mirror(const char *device, const char *target,
|
|||
goto out;
|
||||
}
|
||||
|
||||
to_replace_bs = check_to_replace_node(replaces, &local_err);
|
||||
to_replace_bs = check_to_replace_node(bs, replaces, &local_err);
|
||||
|
||||
if (!to_replace_bs) {
|
||||
error_propagate(errp, local_err);
|
||||
|
|
|
@ -317,7 +317,8 @@ bool bdrv_recurse_is_first_non_filter(BlockDriverState *bs,
|
|||
bool bdrv_is_first_non_filter(BlockDriverState *candidate);
|
||||
|
||||
/* check if a named node can be replaced when doing drive-mirror */
|
||||
BlockDriverState *check_to_replace_node(const char *node_name, Error **errp);
|
||||
BlockDriverState *check_to_replace_node(BlockDriverState *parent_bs,
|
||||
const char *node_name, Error **errp);
|
||||
|
||||
/* async block I/O */
|
||||
typedef void BlockDriverDirtyHandler(BlockDriverState *bs, int64_t sector,
|
||||
|
|
Loading…
Reference in New Issue