[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 03/12] block: Add "has_single_child" field for dr
From: |
Max Reitz |
Subject: |
[Qemu-devel] [PATCH v3 03/12] block: Add "has_single_child" field for drivers |
Date: |
Thu, 10 Apr 2014 20:43:34 +0200 |
This field should be used by block drivers acting as filters which have
only a single child BDS which is referenced through the "file" field of
the BDS.
Setting this field allows other block functions to "access" the child
BDS, for instance in bdrv_recurse_is_first_non_filter(). Therefore, it
should not be set if the block layer should not have access to the child
through the filter.
Signed-off-by: Max Reitz <address@hidden>
Reviewed-by: Benoit Canet <address@hidden>
---
block.c | 4 ++++
include/block/block_int.h | 7 +++++++
2 files changed, 11 insertions(+)
diff --git a/block.c b/block.c
index 990a754..7662f99 100644
--- a/block.c
+++ b/block.c
@@ -5466,6 +5466,10 @@ bool bdrv_recurse_is_first_non_filter(BlockDriverState
*bs,
return bs->drv->bdrv_recurse_is_first_non_filter(bs, candidate);
}
+ if (bs->drv->has_single_child) {
+ return bdrv_recurse_is_first_non_filter(bs->file, candidate);
+ }
+
/* the driver is a block filter but don't allow to recurse -> return false
*/
return false;
diff --git a/include/block/block_int.h b/include/block/block_int.h
index cd5bc73..243e974 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -78,6 +78,13 @@ struct BlockDriver {
/* set to true if the BlockDriver is a block filter */
bool is_filter;
+ /* Set to true if the BlockDriver is a filter with a single child
referenced
+ * through the "file" field in the BDS. This allows the block layer to
+ * access that child through the filter (e.g., for
+ * bdrv_recurse_is_first_non_filter()); if this is not desired, set it to
+ * false (the "file" field should not have been used in this case anyway,
+ * though). */
+ bool has_single_child;
/* for snapshots block filter like Quorum can implement the
* following recursive callback.
* It's purpose is to recurse on the filter children while calling
--
1.9.1
- [Qemu-devel] [PATCH v3 00/12] block/json: Add JSON protocol driver, Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 01/12] qdict: Add qdict_join(), Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 02/12] check-qdict: Add test for qdict_join(), Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 03/12] block: Add "has_single_child" field for drivers,
Max Reitz <=
- [Qemu-devel] [PATCH v3 04/12] block/json: Add JSON protocol driver, Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 05/12] block/json: Add functions for cache control, Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 06/12] block/json: Add functions for writing zeroes etc., Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 08/12] block/json: Add ioctl etc., Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 07/12] block/json: Add bdrv_co_get_block_status(), Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 09/12] block/json: Add bdrv_get_specific_info(), Max Reitz, 2014/04/10
- [Qemu-devel] [PATCH v3 10/12] block/raw_bsd: Add bdrv_get_specific_info(), Max Reitz, 2014/04/10