From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57533) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkmE1-0003PX-2n for qemu-devel@nongnu.org; Wed, 14 May 2014 23:20:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WkmDt-0001tv-JY for qemu-devel@nongnu.org; Wed, 14 May 2014 23:20:52 -0400 Received: from mx1.redhat.com ([209.132.183.28]:26346) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkmDt-0001t4-C7 for qemu-devel@nongnu.org; Wed, 14 May 2014 23:20:45 -0400 From: Jeff Cody Date: Wed, 14 May 2014 23:20:16 -0400 Message-Id: In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 2/5] block: add helper function to determine if a BDS is in a chain List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, benoit.canet@irqsave.net, pkrempa@redhat.com, famz@redhat.com, stefanha@redhat.com 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. Signed-off-by: Jeff Cody --- block.c | 9 +++++++++ include/block/block.h | 1 + 2 files changed, 10 insertions(+) diff --git a/block.c b/block.c index 81945d3..c4f77c2 100644 --- a/block.c +++ b/block.c @@ -3734,6 +3734,15 @@ BlockDriverState *bdrv_lookup_bs(const char *device, return NULL; } +bool bdrv_is_in_chain(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 1b119aa..283a6f3 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -381,6 +381,7 @@ BlockDeviceInfoList *bdrv_named_nodes_list(void); BlockDriverState *bdrv_lookup_bs(const char *device, const char *node_name, Error **errp); +bool bdrv_is_in_chain(BlockDriverState *top, BlockDriverState *base); BlockDriverState *bdrv_next(BlockDriverState *bs); void bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), void *opaque); -- 1.8.3.1