mirror of https://github.com/xemu-project/xemu.git
blockdev: Do not create BDS for empty drive
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 <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
5433c24f0f
commit
5ec18f8c83
52
blockdev.c
52
blockdev.c
|
@ -512,23 +512,6 @@ static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
|
||||||
goto early_err;
|
goto early_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init */
|
|
||||||
if ((!file || !*file) && !has_driver_specific_opts) {
|
|
||||||
blk = blk_new_with_bs(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;
|
|
||||||
|
|
||||||
QDECREF(bs_opts);
|
|
||||||
} else {
|
|
||||||
if (file && !*file) {
|
|
||||||
file = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snapshot) {
|
if (snapshot) {
|
||||||
/* always use cache=unsafe with snapshot */
|
/* always use cache=unsafe with snapshot */
|
||||||
bdrv_flags &= ~BDRV_O_CACHE_MASK;
|
bdrv_flags &= ~BDRV_O_CACHE_MASK;
|
||||||
|
@ -541,18 +524,44 @@ static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
|
||||||
|
|
||||||
bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
|
bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
|
||||||
|
|
||||||
|
/* init */
|
||||||
|
if ((!file || !*file) && !has_driver_specific_opts) {
|
||||||
|
BlockBackendRootState *blk_rs;
|
||||||
|
|
||||||
|
blk = blk_new(qemu_opts_id(opts), errp);
|
||||||
|
if (!blk) {
|
||||||
|
goto early_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 {
|
||||||
|
if (file && !*file) {
|
||||||
|
file = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
blk = blk_new_open(qemu_opts_id(opts), file, NULL, bs_opts, bdrv_flags,
|
blk = blk_new_open(qemu_opts_id(opts), file, NULL, bs_opts, bdrv_flags,
|
||||||
errp);
|
errp);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
goto err_no_bs_opts;
|
goto err_no_bs_opts;
|
||||||
}
|
}
|
||||||
bs = blk_bs(blk);
|
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 */
|
/* disk I/O throttling */
|
||||||
if (throttle_enabled(&cfg)) {
|
if (throttle_enabled(&cfg)) {
|
||||||
if (!throttling_group) {
|
if (!throttling_group) {
|
||||||
|
@ -565,6 +574,9 @@ static BlockBackend *blockdev_init(const char *file, QDict *bs_opts,
|
||||||
if (bdrv_key_required(bs)) {
|
if (bdrv_key_required(bs)) {
|
||||||
autostart = 0;
|
autostart = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
blk_set_on_error(blk, on_read_error, on_write_error);
|
||||||
|
|
||||||
err_no_bs_opts:
|
err_no_bs_opts:
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
|
|
Loading…
Reference in New Issue