[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 24/37] blockdev: Do not create BDS for empty drive
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 24/37] blockdev: Do not create BDS for empty drive |
Date: |
Fri, 23 Oct 2015 19:01:11 +0200 |
From: Max Reitz <address@hidden>
Do not use "rudimentary" BDSs for empty drives any longer (for
freshly created drives).
After a follow-up patch, empty drives will generally use a NULL BDS, not
only the freshly created drives.
Signed-off-by: Max Reitz <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
blockdev.c | 68 ++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 40 insertions(+), 28 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index c9271d2..faa5218 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -512,16 +512,40 @@ static BlockBackend *blockdev_init(const char *file,
QDict *bs_opts,
goto early_err;
}
+ if (snapshot) {
+ /* always use cache=unsafe with snapshot */
+ bdrv_flags &= ~BDRV_O_CACHE_MASK;
+ bdrv_flags |= (BDRV_O_SNAPSHOT|BDRV_O_CACHE_WB|BDRV_O_NO_FLUSH);
+ }
+
+ if (copy_on_read) {
+ bdrv_flags |= BDRV_O_COPY_ON_READ;
+ }
+
+ bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
+
/* init */
if ((!file || !*file) && !has_driver_specific_opts) {
- blk = blk_new_with_bs(qemu_opts_id(opts), errp);
+ BlockBackendRootState *blk_rs;
+
+ blk = blk_new(qemu_opts_id(opts), errp);
if (!blk) {
goto early_err;
}
- bs = blk_bs(blk);
- bs->open_flags = snapshot ? BDRV_O_SNAPSHOT : 0;
- bs->read_only = ro;
+ blk_rs = blk_get_root_state(blk);
+ blk_rs->open_flags = bdrv_flags;
+ blk_rs->read_only = ro;
+ blk_rs->detect_zeroes = detect_zeroes;
+
+ if (throttle_enabled(&cfg)) {
+ if (!throttling_group) {
+ throttling_group = blk_name(blk);
+ }
+ blk_rs->throttle_group = g_strdup(throttling_group);
+ blk_rs->throttle_state = throttle_group_incref(throttling_group);
+ blk_rs->throttle_state->cfg = cfg;
+ }
QDECREF(bs_opts);
} else {
@@ -529,42 +553,30 @@ static BlockBackend *blockdev_init(const char *file,
QDict *bs_opts,
file = NULL;
}
- if (snapshot) {
- /* always use cache=unsafe with snapshot */
- bdrv_flags &= ~BDRV_O_CACHE_MASK;
- bdrv_flags |= (BDRV_O_SNAPSHOT|BDRV_O_CACHE_WB|BDRV_O_NO_FLUSH);
- }
-
- if (copy_on_read) {
- bdrv_flags |= BDRV_O_COPY_ON_READ;
- }
-
- bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
-
blk = blk_new_open(qemu_opts_id(opts), file, NULL, bs_opts, bdrv_flags,
errp);
if (!blk) {
goto err_no_bs_opts;
}
bs = blk_bs(blk);
- }
- bs->detect_zeroes = detect_zeroes;
+ bs->detect_zeroes = detect_zeroes;
- blk_set_on_error(blk, on_read_error, on_write_error);
+ /* disk I/O throttling */
+ if (throttle_enabled(&cfg)) {
+ if (!throttling_group) {
+ throttling_group = blk_name(blk);
+ }
+ bdrv_io_limits_enable(bs, throttling_group);
+ bdrv_set_io_limits(bs, &cfg);
+ }
- /* disk I/O throttling */
- if (throttle_enabled(&cfg)) {
- if (!throttling_group) {
- throttling_group = blk_name(blk);
+ if (bdrv_key_required(bs)) {
+ autostart = 0;
}
- bdrv_io_limits_enable(bs, throttling_group);
- bdrv_set_io_limits(bs, &cfg);
}
- if (bdrv_key_required(bs)) {
- autostart = 0;
- }
+ blk_set_on_error(blk, on_read_error, on_write_error);
err_no_bs_opts:
qemu_opts_del(opts);
--
1.8.3.1
- [Qemu-devel] [PULL 14/37] block: Remove wr_highest_sector from BlockAcctStats, (continued)
- [Qemu-devel] [PULL 14/37] block: Remove wr_highest_sector from BlockAcctStats, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 21/37] block: Prepare remaining BB functions for NULL BDS, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 22/37] block: Add blk_insert_bs(), Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 19/37] block: Make some BB functions fall back to BBRS, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 16/37] block: Move I/O status and error actions into BB, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 23/37] block: Prepare for NULL BDS, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 25/37] blockdev: Pull out blockdev option extraction, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 31/37] aio: introduce aio_{disable, enable}_external, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 26/37] blockdev: Allow more options for BB-less BDS tree, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 20/37] block: Fail requests to empty BlockBackend, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 24/37] blockdev: Do not create BDS for empty drive,
Kevin Wolf <=
- [Qemu-devel] [PULL 30/37] dataplane: Mark host notifiers' client type as "external", Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 28/37] aio: Add "is_external" flag for event handlers, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 33/37] block: Add "drained begin/end" for transactional external snapshot, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 36/37] block: Add "drained begin/end" for internal snapshot, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 27/37] throttle: Remove throttle_group_lock/unlock(), Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 35/37] block: Add "drained begin/end" for transactional blockdev-backup, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 29/37] nbd: Mark fd handlers client type as "external", Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 32/37] block: Introduce "drained begin/end" API, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 37/37] tests: Add test case for aio_disable_external, Kevin Wolf, 2015/10/23
- [Qemu-devel] [PULL 34/37] block: Add "drained begin/end" for transactional backup, Kevin Wolf, 2015/10/23