[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 14/34] block: Add child_of_bds
From: |
Max Reitz |
Subject: |
[PATCH v4 14/34] block: Add child_of_bds |
Date: |
Wed, 13 May 2020 13:05:24 +0200 |
Any current user of child_file, child_format, and child_backing can and
should use this generic BdrvChildClass instead, as it can handle all of
these cases. However, to be able to do so, the users must pass the
appropriate BdrvChildRole when the child is created/attached. (The
following commits will take care of that.)
Signed-off-by: Max Reitz <address@hidden>
---
include/block/block_int.h | 1 +
block.c | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+)
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 6245d8a18d..54df821d61 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -740,6 +740,7 @@ struct BdrvChildClass {
void (*set_aio_ctx)(BdrvChild *child, AioContext *ctx, GSList **ignore);
};
+extern const BdrvChildClass child_of_bds;
extern const BdrvChildClass child_file;
extern const BdrvChildClass child_format;
extern const BdrvChildClass child_backing;
diff --git a/block.c b/block.c
index f63417c06d..be9bfa9d46 100644
--- a/block.c
+++ b/block.c
@@ -1429,6 +1429,30 @@ static void bdrv_child_cb_detach(BdrvChild *child)
bdrv_unapply_subtree_drain(child, bs);
}
+static int bdrv_child_cb_update_filename(BdrvChild *c, BlockDriverState *base,
+ const char *filename, Error **errp)
+{
+ if (c->role & BDRV_CHILD_COW) {
+ return bdrv_backing_update_filename(c, base, filename, errp);
+ }
+ return 0;
+}
+
+const BdrvChildClass child_of_bds = {
+ .parent_is_bds = true,
+ .get_parent_desc = bdrv_child_get_parent_desc,
+ .inherit_options = bdrv_inherited_options,
+ .drained_begin = bdrv_child_cb_drained_begin,
+ .drained_poll = bdrv_child_cb_drained_poll,
+ .drained_end = bdrv_child_cb_drained_end,
+ .attach = bdrv_child_cb_attach,
+ .detach = bdrv_child_cb_detach,
+ .inactivate = bdrv_child_cb_inactivate,
+ .can_set_aio_ctx = bdrv_child_cb_can_set_aio_ctx,
+ .set_aio_ctx = bdrv_child_cb_set_aio_ctx,
+ .update_filename = bdrv_child_cb_update_filename,
+};
+
static int bdrv_open_flags(BlockDriverState *bs, int flags)
{
int open_flags = flags;
--
2.26.2
- [PATCH v4 08/34] block: Pass parent_is_format to .inherit_options(), (continued)
- [PATCH v4 08/34] block: Pass parent_is_format to .inherit_options(), Max Reitz, 2020/05/13
- [PATCH v4 09/34] block: Rename bdrv_inherited_options(), Max Reitz, 2020/05/13
- [PATCH v4 10/34] block: Add generic bdrv_inherited_options(), Max Reitz, 2020/05/13
- [PATCH v4 11/34] block: Use bdrv_inherited_options(), Max Reitz, 2020/05/13
- [PATCH v4 12/34] block: Unify bdrv_child_cb_attach(), Max Reitz, 2020/05/13
- [PATCH v4 13/34] block: Unify bdrv_child_cb_detach(), Max Reitz, 2020/05/13
- [PATCH v4 14/34] block: Add child_of_bds,
Max Reitz <=
- [PATCH v4 15/34] block: Distinguish paths in *_format_default_perms, Max Reitz, 2020/05/13
- [PATCH v4 16/34] block: Pull out bdrv_default_perms_for_cow(), Max Reitz, 2020/05/13
- [PATCH v4 17/34] block: Pull out bdrv_default_perms_for_storage(), Max Reitz, 2020/05/13
- [PATCH v4 18/34] block: Relax *perms_for_storage for data children, Max Reitz, 2020/05/13
- [PATCH v4 19/34] block: Add bdrv_default_perms(), Max Reitz, 2020/05/13