Skip to content

Commit

Permalink
block: Merge BlockBackend and BlockDriverState name spaces
Browse files Browse the repository at this point in the history
BlockBackend's name space is separate only to keep the initial patches
simple.  Time to merge the two.

Retain bdrv_find() and bdrv_get_device_name() for now, to keep this
series manageable.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
Markus Armbruster authored and kevmw committed Oct 20, 2014
1 parent bfb197e commit 7f06d47
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 43 deletions.
48 changes: 12 additions & 36 deletions block.c
Expand Up @@ -335,31 +335,9 @@ void bdrv_register(BlockDriver *bdrv)
QLIST_INSERT_HEAD(&bdrv_drivers, bdrv, list);
}

/* create a new block device (by default it is empty) */
BlockDriverState *bdrv_new_root(const char *device_name, Error **errp)
BlockDriverState *bdrv_new_root(void)
{
BlockDriverState *bs;

assert(*device_name);

if (*device_name && !id_wellformed(device_name)) {
error_setg(errp, "Invalid device name");
return NULL;
}

if (bdrv_find(device_name)) {
error_setg(errp, "Device with id '%s' already exists",
device_name);
return NULL;
}
if (bdrv_find_node(device_name)) {
error_setg(errp,
"Device name '%s' conflicts with an existing node name",
device_name);
return NULL;
}

bs = bdrv_new();
BlockDriverState *bs = bdrv_new();

QTAILQ_INSERT_TAIL(&bdrv_states, bs, device_list);
return bs;
Expand Down Expand Up @@ -883,7 +861,7 @@ static void bdrv_assign_node_name(BlockDriverState *bs,
}

/* takes care of avoiding namespaces collisions */
if (bdrv_find(node_name)) {
if (blk_by_name(node_name)) {
error_setg(errp, "node-name=%s is conflicting with a device id",
node_name);
return;
Expand Down Expand Up @@ -3817,16 +3795,12 @@ void bdrv_iterate_format(void (*it)(void *opaque, const char *name),
}

/* This function is to find block backend bs */
/* TODO convert callers to blk_by_name(), then remove */
BlockDriverState *bdrv_find(const char *name)
{
BlockDriverState *bs;
BlockBackend *blk = blk_by_name(name);

QTAILQ_FOREACH(bs, &bdrv_states, device_list) {
if (!strcmp(name, bdrv_get_device_name(bs))) {
return bs;
}
}
return NULL;
return blk ? blk_bs(blk) : NULL;
}

/* This function is to find a node in the bs graph */
Expand Down Expand Up @@ -3865,13 +3839,14 @@ BlockDriverState *bdrv_lookup_bs(const char *device,
const char *node_name,
Error **errp)
{
BlockDriverState *bs = NULL;
BlockBackend *blk;
BlockDriverState *bs;

if (device) {
bs = bdrv_find(device);
blk = blk_by_name(device);

if (bs) {
return bs;
if (blk) {
return blk_bs(blk);
}
}

Expand Down Expand Up @@ -3908,6 +3883,7 @@ BlockDriverState *bdrv_next(BlockDriverState *bs)
return QTAILQ_NEXT(bs, device_list);
}

/* TODO check what callers really want: bs->node_name or blk_name() */
const char *bdrv_get_device_name(const BlockDriverState *bs)
{
return bs->blk ? blk_name(bs->blk) : "";
Expand Down
17 changes: 11 additions & 6 deletions block/block-backend.c
Expand Up @@ -40,10 +40,20 @@ BlockBackend *blk_new(const char *name, Error **errp)
BlockBackend *blk;

assert(name && name[0]);
if (!id_wellformed(name)) {
error_setg(errp, "Invalid device name");
return NULL;
}
if (blk_by_name(name)) {
error_setg(errp, "Device with id '%s' already exists", name);
return NULL;
}
if (bdrv_find_node(name)) {
error_setg(errp,
"Device name '%s' conflicts with an existing node name",
name);
return NULL;
}

blk = g_new0(BlockBackend, 1);
blk->name = g_strdup(name);
Expand All @@ -66,12 +76,7 @@ BlockBackend *blk_new_with_bs(const char *name, Error **errp)
return NULL;
}

bs = bdrv_new_root(name, errp);
if (!bs) {
blk_unref(blk);
return NULL;
}

bs = bdrv_new_root();
blk->bs = bs;
bs->blk = blk;
return blk;
Expand Down
2 changes: 1 addition & 1 deletion include/block/block.h
Expand Up @@ -204,7 +204,7 @@ BlockDriver *bdrv_find_whitelisted_format(const char *format_name,
int bdrv_create(BlockDriver *drv, const char* filename,
QemuOpts *opts, Error **errp);
int bdrv_create_file(const char *filename, QemuOpts *opts, Error **errp);
BlockDriverState *bdrv_new_root(const char *device_name, Error **errp);
BlockDriverState *bdrv_new_root(void);
BlockDriverState *bdrv_new(void);
void bdrv_make_anon(BlockDriverState *bs);
void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old);
Expand Down

0 comments on commit 7f06d47

Please sign in to comment.