[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 04/37] block: Add functions for inheriting a BBRS
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PULL 04/37] block: Add functions for inheriting a BBRS |
Date: |
Thu, 5 Nov 2015 19:17:32 +0100 |
From: Max Reitz <address@hidden>
In order to open a BDS which inherits a BB's root state,
blk_get_open_flags_from_root_state() is used to inquire the flags to be
passed to bdrv_open(), and blk_apply_root_state() is used to apply the
remaining state after the BDS has been opened.
Signed-off-by: Max Reitz <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
block/block-backend.c | 27 +++++++++++++++++++++++++++
include/sysemu/block-backend.h | 2 ++
2 files changed, 29 insertions(+)
diff --git a/block/block-backend.c b/block/block-backend.c
index 878c448..7d49539 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1239,6 +1239,33 @@ void blk_update_root_state(BlockBackend *blk)
}
}
+/*
+ * Applies the information in the root state to the given BlockDriverState.
This
+ * does not include the flags which have to be specified for bdrv_open(), use
+ * blk_get_open_flags_from_root_state() to inquire them.
+ */
+void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs)
+{
+ bs->detect_zeroes = blk->root_state.detect_zeroes;
+ if (blk->root_state.throttle_group) {
+ bdrv_io_limits_enable(bs, blk->root_state.throttle_group);
+ }
+}
+
+/*
+ * Returns the flags to be used for bdrv_open() of a BlockDriverState which is
+ * supposed to inherit the root state.
+ */
+int blk_get_open_flags_from_root_state(BlockBackend *blk)
+{
+ int bs_flags;
+
+ bs_flags = blk->root_state.read_only ? 0 : BDRV_O_RDWR;
+ bs_flags |= blk->root_state.open_flags & ~BDRV_O_RDWR;
+
+ return bs_flags;
+}
+
BlockBackendRootState *blk_get_root_state(BlockBackend *blk)
{
return &blk->root_state;
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 14a6d32..40e315b 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -167,6 +167,8 @@ void blk_io_unplug(BlockBackend *blk);
BlockAcctStats *blk_get_stats(BlockBackend *blk);
BlockBackendRootState *blk_get_root_state(BlockBackend *blk);
void blk_update_root_state(BlockBackend *blk);
+void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs);
+int blk_get_open_flags_from_root_state(BlockBackend *blk);
void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk,
BlockCompletionFunc *cb, void *opaque);
--
1.8.3.1
- [Qemu-block] [PULL 00/37] Block layer patches, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 02/37] block: Add blk_remove_bs(), Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 03/37] block: Make bdrv_states public, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 01/37] block: Don't call blk_bs() twice in bdrv_lookup_bs(), Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 05/37] blockdev: Add blockdev-open-tray, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 04/37] block: Add functions for inheriting a BBRS,
Kevin Wolf <=
- [Qemu-block] [PULL 06/37] blockdev: Add blockdev-close-tray, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 07/37] blockdev: Add blockdev-remove-medium, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 08/37] blockdev: Add blockdev-insert-medium, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 10/37] blockdev: Implement change with basic operations, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 11/37] block: Inquire tray state before tray-moved events, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 12/37] qmp: Introduce blockdev-change-medium, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 14/37] blockdev: read-only-mode for blockdev-change-medium, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 15/37] hmp: Add read-only-mode option to change command, Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 17/37] block: check for existing device IDs in external_snapshot_prepare(), Kevin Wolf, 2015/11/05
- [Qemu-block] [PULL 09/37] blockdev: Implement eject with basic operations, Kevin Wolf, 2015/11/05