[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 02/14] block: Introduce BlockBackendPublic
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH v3 02/14] block: Introduce BlockBackendPublic |
Date: |
Wed, 11 May 2016 15:24:13 +0200 |
Some features, like I/O throttling, are implemented outside
block-backend.c, but still want to keep information in BlockBackend,
e.g. list entries that allow keeping a list of BlockBackends.
In order to avoid exposing the whole struct layout in the public header
file, this patch introduces an embedded public struct where such
information can be added and a pair of functions to convert between
BlockBackend and BlockBackendPublic.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Alberto Garcia <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block/block-backend.c | 17 +++++++++++++++++
include/sysemu/block-backend.h | 10 ++++++++++
2 files changed, 27 insertions(+)
diff --git a/block/block-backend.c b/block/block-backend.c
index 53fd9d2..2f8acbd 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -34,6 +34,7 @@ struct BlockBackend {
DriveInfo *legacy_dinfo; /* null unless created by drive_new() */
QTAILQ_ENTRY(BlockBackend) link; /* for block_backends */
QTAILQ_ENTRY(BlockBackend) monitor_link; /* for monitor_block_backends */
+ BlockBackendPublic public;
void *dev; /* attached device model, if any */
/* TODO change to DeviceState when all users are qdevified */
@@ -411,6 +412,22 @@ BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo)
}
/*
+ * Returns a pointer to the publicly accessible fields of @blk.
+ */
+BlockBackendPublic *blk_get_public(BlockBackend *blk)
+{
+ return &blk->public;
+}
+
+/*
+ * Returns a BlockBackend given the associated @public fields.
+ */
+BlockBackend *blk_by_public(BlockBackendPublic *public)
+{
+ return container_of(public, BlockBackend, public);
+}
+
+/*
* Disassociates the currently associated BlockDriverState from @blk.
*/
void blk_remove_bs(BlockBackend *blk)
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 26736ed..a771603 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -59,6 +59,13 @@ typedef struct BlockDevOps {
void (*resize_cb)(void *opaque);
} BlockDevOps;
+/* This struct is embedded in (the private) BlockBackend struct and contains
+ * fields that must be public. This is in particular for QLIST_ENTRY() and
+ * friends so that BlockBackends can be kept in lists outside block-backend.c
*/
+typedef struct BlockBackendPublic {
+ int dummy; /* empty structs are illegal */
+} BlockBackendPublic;
+
BlockBackend *blk_new(Error **errp);
BlockBackend *blk_new_with_bs(Error **errp);
BlockBackend *blk_new_open(const char *filename, const char *reference,
@@ -74,6 +81,9 @@ BlockDriverState *blk_next_root_bs(BlockDriverState *bs);
bool monitor_add_blk(BlockBackend *blk, const char *name, Error **errp);
void monitor_remove_blk(BlockBackend *blk);
+BlockBackendPublic *blk_get_public(BlockBackend *blk);
+BlockBackend *blk_by_public(BlockBackendPublic *public);
+
BlockDriverState *blk_bs(BlockBackend *blk);
void blk_remove_bs(BlockBackend *blk);
void blk_insert_bs(BlockBackend *blk, BlockDriverState *bs);
--
1.8.3.1
- [Qemu-devel] [PATCH v3 00/14] block: Move I/O throttling to BlockBackend, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 04/14] block: Convert throttle_group_get_name() to BlockBackend, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 01/14] block: Make sure throttled BDSes always have a BB, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 07/14] block: Move I/O throttling configuration functions to BlockBackend, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 02/14] block: Introduce BlockBackendPublic,
Kevin Wolf <=
- [Qemu-devel] [PATCH v3 06/14] block: Move actual I/O throttling to BlockBackend, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 03/14] block: throttle-groups: Use BlockBackend pointers internally, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 05/14] block: Move throttling fields from BDS to BB, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 10/14] block/io: Quiesce parents between drained_begin/end, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 11/14] block: Decouple throttling from BlockDriverState, Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 12/14] block: Remove bdrv_move_feature_fields(), Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 13/14] Revert "block: Forbid I/O throttling on nodes with multiple parents for 2.6", Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 14/14] block: Don't check throttled reqs in bdrv_requests_pending(), Kevin Wolf, 2016/05/11
- [Qemu-devel] [PATCH v3 09/14] block: Drain throttling queue with BdrvChild callback, Kevin Wolf, 2016/05/11