Message ID | 438aaa4b94b1c6670ad0ff25cca0b81e41883d2a.1401200582.git.jcody@redhat.com |
---|---|
State | New |
Headers | show |
On 05/27/2014 08:28 AM, Jeff Cody wrote: > This is a small helper function, to determine if 'base' is in the > chain of BlockDriverState 'top'. It returns true if it is in the chain, > and false otherwise. > > If either argument is NULL, it will also return false. > > Reviewed-by: Benoit Canet <benoit@irqsave.net> > Signed-off-by: Jeff Cody <jcody@redhat.com> > --- > block.c | 11 +++++++++++ > include/block/block.h | 1 + > 2 files changed, 12 insertions(+) Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/block.c b/block.c index 415f0d2..cf4b296 100644 --- a/block.c +++ b/block.c @@ -3811,6 +3811,17 @@ BlockDriverState *bdrv_lookup_bs(const char *device, return NULL; } +/* If 'base' is in the same chain as 'top', return true. Otherwise, + * return false. If either argument is NULL, return false. */ +bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base) +{ + while (top && top != base) { + top = top->backing_hd; + } + + return top != NULL; +} + BlockDriverState *bdrv_next(BlockDriverState *bs) { if (!bs) { diff --git a/include/block/block.h b/include/block/block.h index faee3aa..4dc68be 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -404,6 +404,7 @@ BlockDeviceInfoList *bdrv_named_nodes_list(void); BlockDriverState *bdrv_lookup_bs(const char *device, const char *node_name, Error **errp); +bool bdrv_chain_contains(BlockDriverState *top, BlockDriverState *base); BlockDriverState *bdrv_next(BlockDriverState *bs); void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque);