mirror of https://github.com/proxmox/mirror_qemu
qcow: Use BB functions in .bdrv_create()
All users of the block layers are supposed to go through a BlockBackend. The .bdrv_create() implementation is one such user, so this patch converts it. Signed-off-by: Kevin Wolf <kwolf@redhat.com>master
parent
8942764f54
commit
6af4016020
21
block/qcow.c
21
block/qcow.c
|
@ -24,6 +24,7 @@
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "block/block_int.h"
|
#include "block/block_int.h"
|
||||||
|
#include "sysemu/block-backend.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
|
@ -780,7 +781,7 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
BlockDriverState *qcow_bs;
|
BlockBackend *qcow_blk;
|
||||||
|
|
||||||
/* Read out options */
|
/* Read out options */
|
||||||
total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
|
total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
|
||||||
|
@ -796,16 +797,18 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
qcow_bs = NULL;
|
qcow_blk = blk_new_open("image", filename, NULL, NULL,
|
||||||
ret = bdrv_open(&qcow_bs, filename, NULL, NULL,
|
|
||||||
BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_PROTOCOL,
|
BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_PROTOCOL,
|
||||||
&local_err);
|
&local_err);
|
||||||
if (ret < 0) {
|
if (qcow_blk == NULL) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
|
ret = -EIO;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_truncate(qcow_bs, 0);
|
blk_set_allow_write_beyond_eof(qcow_blk, true);
|
||||||
|
|
||||||
|
ret = blk_truncate(qcow_blk, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
@ -845,13 +848,13 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write all the data */
|
/* write all the data */
|
||||||
ret = bdrv_pwrite(qcow_bs, 0, &header, sizeof(header));
|
ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header));
|
||||||
if (ret != sizeof(header)) {
|
if (ret != sizeof(header)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (backing_file) {
|
if (backing_file) {
|
||||||
ret = bdrv_pwrite(qcow_bs, sizeof(header),
|
ret = blk_pwrite(qcow_blk, sizeof(header),
|
||||||
backing_file, backing_filename_len);
|
backing_file, backing_filename_len);
|
||||||
if (ret != backing_filename_len) {
|
if (ret != backing_filename_len) {
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -861,7 +864,7 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
tmp = g_malloc0(BDRV_SECTOR_SIZE);
|
tmp = g_malloc0(BDRV_SECTOR_SIZE);
|
||||||
for (i = 0; i < ((sizeof(uint64_t)*l1_size + BDRV_SECTOR_SIZE - 1)/
|
for (i = 0; i < ((sizeof(uint64_t)*l1_size + BDRV_SECTOR_SIZE - 1)/
|
||||||
BDRV_SECTOR_SIZE); i++) {
|
BDRV_SECTOR_SIZE); i++) {
|
||||||
ret = bdrv_pwrite(qcow_bs, header_size +
|
ret = blk_pwrite(qcow_blk, header_size +
|
||||||
BDRV_SECTOR_SIZE*i, tmp, BDRV_SECTOR_SIZE);
|
BDRV_SECTOR_SIZE*i, tmp, BDRV_SECTOR_SIZE);
|
||||||
if (ret != BDRV_SECTOR_SIZE) {
|
if (ret != BDRV_SECTOR_SIZE) {
|
||||||
g_free(tmp);
|
g_free(tmp);
|
||||||
|
@ -872,7 +875,7 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
|
||||||
g_free(tmp);
|
g_free(tmp);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
exit:
|
exit:
|
||||||
bdrv_unref(qcow_bs);
|
blk_unref(qcow_blk);
|
||||||
cleanup:
|
cleanup:
|
||||||
g_free(backing_file);
|
g_free(backing_file);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue