Skip to content

Commit

Permalink
block: simplify bdrv_find_base() and bdrv_find_overlay()
Browse files Browse the repository at this point in the history
This simplifies the function bdrv_find_overlay().  With this change,
bdrv_find_base() is just a subset of usage of bdrv_find_overlay(),
so this also takes advantage of that.

Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
  • Loading branch information
codyprime authored and stefanhaRH committed Jul 1, 2014
1 parent 7676e2c commit 4caf0fc
Showing 1 changed file with 10 additions and 35 deletions.
45 changes: 10 additions & 35 deletions block.c
Expand Up @@ -2508,32 +2508,23 @@ int bdrv_change_backing_file(BlockDriverState *bs,
*
* Returns NULL if bs is not found in active's image chain,
* or if active == bs.
*
* Returns the bottommost base image if bs == NULL.
*/
BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
BlockDriverState *bs)
{
BlockDriverState *overlay = NULL;
BlockDriverState *intermediate;

assert(active != NULL);
assert(bs != NULL);

/* if bs is the same as active, then by definition it has no overlay
*/
if (active == bs) {
return NULL;
while (active && bs != active->backing_hd) {
active = active->backing_hd;
}

intermediate = active;
while (intermediate->backing_hd) {
if (intermediate->backing_hd == bs) {
overlay = intermediate;
break;
}
intermediate = intermediate->backing_hd;
}
return active;
}

return overlay;
/* Given a BDS, searches for the base layer. */
BlockDriverState *bdrv_find_base(BlockDriverState *bs)
{
return bdrv_find_overlay(bs, NULL);
}

typedef struct BlkIntermediateStates {
Expand Down Expand Up @@ -4326,22 +4317,6 @@ int bdrv_get_backing_file_depth(BlockDriverState *bs)
return 1 + bdrv_get_backing_file_depth(bs->backing_hd);
}

BlockDriverState *bdrv_find_base(BlockDriverState *bs)
{
BlockDriverState *curr_bs = NULL;

if (!bs) {
return NULL;
}

curr_bs = bs;

while (curr_bs->backing_hd) {
curr_bs = curr_bs->backing_hd;
}
return curr_bs;
}

/**************************************************************/
/* async I/Os */

Expand Down

0 comments on commit 4caf0fc

Please sign in to comment.