@@ -4379,6 +4379,16 @@ BlockDriverState *bdrv_find_base(BlockDriverState *bs)
return curr_bs;
}
+/* Given a BDS, searches for the active layer. If
+ * active layer cannot be found, returns NULL */
+BlockDriverState *bdrv_find_active(BlockDriverState *bs)
+{
+ while (bs && bs->overlay) {
+ bs = bs->overlay;
+ }
+ return bs;
+}
+
/**************************************************************/
/* async I/Os */
@@ -293,6 +293,7 @@ int bdrv_drop_intermediate(BlockDriverState *active, BlockDriverState *top,
BlockDriverState *bdrv_find_overlay(BlockDriverState *active,
BlockDriverState *bs);
BlockDriverState *bdrv_find_base(BlockDriverState *bs);
+BlockDriverState *bdrv_find_active(BlockDriverState *bs);
typedef struct BdrvCheckResult {
This helper function will find the active (top-most) layer of a specified BDS. This returns either the active layer, or NULL if the passed BDS is NULL. Signed-off-by: Jeff Cody <jcody@redhat.com> --- block.c | 10 ++++++++++ include/block/block.h | 1 + 2 files changed, 11 insertions(+)