Commit df581792 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

block: Move bdrv_attach_child() calls up the call chain



Let the callers of bdrv_open_inherit() call bdrv_attach_child(). It
needs to be called in all cases where bdrv_open_inherit() succeeds (i.e.
returns 0) and a child_role is given.

bdrv_attach_child() is moved upwards to avoid a forward declaration.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
parent 30349fd0
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -1102,6 +1102,19 @@ static int bdrv_fill_options(QDict **options, const char **pfilename,
    return 0;
}

static void bdrv_attach_child(BlockDriverState *parent_bs,
                              BlockDriverState *child_bs,
                              const BdrvChildRole *child_role)
{
    BdrvChild *child = g_new(BdrvChild, 1);
    *child = (BdrvChild) {
        .bs     = child_bs,
        .role   = child_role,
    };

    QLIST_INSERT_HEAD(&parent_bs->children, child, next);
}

void bdrv_set_backing_hd(BlockDriverState *bs, BlockDriverState *backing_hd)
{

@@ -1202,6 +1215,8 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp)
        error_free(local_err);
        goto free_exit;
    }

    bdrv_attach_child(bs, backing_hd, &child_backing);
    bdrv_set_backing_hd(bs, backing_hd);

free_exit:
@@ -1237,6 +1252,7 @@ int bdrv_open_image(BlockDriverState **pbs, const char *filename,

    assert(pbs);
    assert(*pbs == NULL);
    assert(child_role != NULL);

    bdref_key_dot = g_strdup_printf("%s.", bdref_key);
    qdict_extract_subqdict(options, &image_options, bdref_key_dot);
@@ -1257,6 +1273,11 @@ int bdrv_open_image(BlockDriverState **pbs, const char *filename,

    ret = bdrv_open_inherit(pbs, filename, reference, image_options, 0,
                            parent, child_role, NULL, errp);
    if (ret < 0) {
        goto done;
    }

    bdrv_attach_child(parent, *pbs, child_role);

done:
    qdict_del(options, bdref_key);
@@ -1328,19 +1349,6 @@ out:
    return ret;
}

static void bdrv_attach_child(BlockDriverState *parent_bs,
                              BlockDriverState *child_bs,
                              const BdrvChildRole *child_role)
{
    BdrvChild *child = g_new(BdrvChild, 1);
    *child = (BdrvChild) {
        .bs     = child_bs,
        .role   = child_role,
    };

    QLIST_INSERT_HEAD(&parent_bs->children, child, next);
}

/*
 * Opens a disk image (raw, qcow2, vmdk, ...)
 *
@@ -1393,9 +1401,6 @@ static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
            return -ENODEV;
        }
        bdrv_ref(bs);
        if (child_role) {
            bdrv_attach_child(parent, bs, child_role);
        }
        *pbs = bs;
        return 0;
    }
@@ -1540,10 +1545,6 @@ static int bdrv_open_inherit(BlockDriverState **pbs, const char *filename,
        goto close_and_fail;
    }

    if (child_role) {
        bdrv_attach_child(parent, bs, child_role);
    }

    QDECREF(options);
    *pbs = bs;
    return 0;