diff mbox

[v3,04/12] block: add helper function to find the active layer of any BDS

Message ID 75e91af2015d8242b25f6f4e6c7ed2e99ec949b7.1401463410.git.jcody@redhat.com
State New
Headers show

Commit Message

Jeff Cody May 30, 2014, 3:35 p.m. UTC
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.

Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
 block.c               | 10 ++++++++++
 include/block/block.h |  1 +
 2 files changed, 11 insertions(+)
diff mbox

Patch

diff --git a/block.c b/block.c
index 588046e..7eb3279 100644
--- a/block.c
+++ b/block.c
@@ -4388,6 +4388,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 */
 
diff --git a/include/block/block.h b/include/block/block.h
index dff5403..c82d89a 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -294,6 +294,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 {