[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V18 13/25] block: add QemuOpts support for raw-posix
From: |
Dong Xu Wang |
Subject: |
[Qemu-devel] [PATCH V18 13/25] block: add QemuOpts support for raw-posix.c |
Date: |
Tue, 13 Aug 2013 12:31:54 +0800 |
Signed-off-by: Dong Xu Wang <address@hidden>
---
block/raw-posix.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/block/raw-posix.c b/block/raw-posix.c
index ba721d3..528b3d1 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1069,6 +1069,29 @@ static int raw_create(const char *filename,
QEMUOptionParameter *options)
return result;
}
+static int raw_create_new(const char *filename, QemuOpts *opts)
+{
+ int fd;
+ int result = 0;
+ int64_t total_size = 0;
+
+ total_size =
+ qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_SIZE;
+ fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
+ 0644);
+ if (fd < 0) {
+ result = -errno;
+ } else {
+ if (ftruncate(fd, total_size * BDRV_SECTOR_SIZE) != 0) {
+ result = -errno;
+ }
+ if (qemu_close(fd) != 0) {
+ result = -errno;
+ }
+ }
+ return result;
+}
+
/*
* Returns true iff the specified sector is present in the disk image. Drivers
* not implementing the functionality are assumed to not support backing files,
@@ -1188,6 +1211,19 @@ static QEMUOptionParameter raw_create_options[] = {
{ NULL }
};
+static QemuOptsList raw_create_opts = {
+ .name = "raw-create-opts",
+ .head = QTAILQ_HEAD_INITIALIZER(raw_create_opts.head),
+ .desc = {
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = QEMU_OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ { /* end of list */ }
+ }
+};
+
static BlockDriver bdrv_file = {
.format_name = "file",
.protocol_name = "file",
@@ -1199,6 +1235,7 @@ static BlockDriver bdrv_file = {
.bdrv_reopen_abort = raw_reopen_abort,
.bdrv_close = raw_close,
.bdrv_create = raw_create,
+ .bdrv_create_new = raw_create_new,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
.bdrv_co_is_allocated = raw_co_is_allocated,
@@ -1213,6 +1250,7 @@ static BlockDriver bdrv_file = {
= raw_get_allocated_file_size,
.create_options = raw_create_options,
+ .bdrv_create_opts = &raw_create_opts,
};
/***********************************************/
@@ -1528,6 +1566,33 @@ static int hdev_create(const char *filename,
QEMUOptionParameter *options)
return ret;
}
+static int hdev_create_new(const char *filename, QemuOpts *opts)
+{
+ int fd;
+ int ret = 0;
+ struct stat stat_buf;
+ int64_t total_size = 0;
+
+ total_size =
+ qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0) / BDRV_SECTOR_SIZE;
+
+ fd = qemu_open(filename, O_WRONLY | O_BINARY);
+ if (fd < 0) {
+ return -errno;
+ }
+
+ if (fstat(fd, &stat_buf) < 0) {
+ ret = -errno;
+ } else if (!S_ISBLK(stat_buf.st_mode) && !S_ISCHR(stat_buf.st_mode)) {
+ ret = -ENODEV;
+ } else if (lseek(fd, 0, SEEK_END) < total_size * BDRV_SECTOR_SIZE) {
+ ret = -ENOSPC;
+ }
+
+ qemu_close(fd);
+ return ret;
+}
+
static BlockDriver bdrv_host_device = {
.format_name = "host_device",
.protocol_name = "host_device",
@@ -1539,7 +1604,9 @@ static BlockDriver bdrv_host_device = {
.bdrv_reopen_commit = raw_reopen_commit,
.bdrv_reopen_abort = raw_reopen_abort,
.bdrv_create = hdev_create,
+ .bdrv_create_new = hdev_create_new,
.create_options = raw_create_options,
+ .bdrv_create_opts = &raw_create_opts,
.bdrv_aio_readv = raw_aio_readv,
.bdrv_aio_writev = raw_aio_writev,
@@ -1663,7 +1730,9 @@ static BlockDriver bdrv_host_floppy = {
.bdrv_reopen_commit = raw_reopen_commit,
.bdrv_reopen_abort = raw_reopen_abort,
.bdrv_create = hdev_create,
+ .bdrv_create_new = hdev_create_new,
.create_options = raw_create_options,
+ .bdrv_create_opts = &raw_create_opts,
.bdrv_aio_readv = raw_aio_readv,
.bdrv_aio_writev = raw_aio_writev,
@@ -1764,7 +1833,9 @@ static BlockDriver bdrv_host_cdrom = {
.bdrv_reopen_commit = raw_reopen_commit,
.bdrv_reopen_abort = raw_reopen_abort,
.bdrv_create = hdev_create,
+ .bdrv_create_new = hdev_create_new,
.create_options = raw_create_options,
+ .bdrv_create_opts = &raw_create_opts,
.bdrv_aio_readv = raw_aio_readv,
.bdrv_aio_writev = raw_aio_writev,
@@ -1885,7 +1956,9 @@ static BlockDriver bdrv_host_cdrom = {
.bdrv_reopen_commit = raw_reopen_commit,
.bdrv_reopen_abort = raw_reopen_abort,
.bdrv_create = hdev_create,
+ .bdrv_create_new = hdev_create_new,
.create_options = raw_create_options,
+ .bdrv_create_opts = &raw_create_opts
.bdrv_aio_readv = raw_aio_readv,
.bdrv_aio_writev = raw_aio_writev,
--
1.7.11.7
- [Qemu-devel] [PATCH V18 03/25] qemu-option: create four QemuOptsList related functions, (continued)
- [Qemu-devel] [PATCH V18 03/25] qemu-option: create four QemuOptsList related functions, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 04/25] qemu-option: create some QemuOpts functons, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 05/25] qemu-option: opt->str store digit, without suffixes, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 06/25] add interface to block, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 07/25] block: add QemuOpts support for cow.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 08/25] block: add QemuOpts support for gluster.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 09/25] block: add QemuOpts support for iscsi.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 10/25] block: add QemuOpts support for qcow.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 11/25] block: add QemuOpts support for qcow2.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 12/25] block: add QemuOpts support for qed.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 13/25] block: add QemuOpts support for raw-posix.c,
Dong Xu Wang <=
- [Qemu-devel] [PATCH V18 14/25] block: add QemuOpts support for raw-win32.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 15/25] block: add QemuOpts support for raw.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 16/25] block: add QemuOpts support for rbd.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 17/25] block: add QemuOpts support for sheepdog.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 18/25] block: add QemuOpts support for ssh.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 19/25] block: add QemuOpts support for vdi.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 20/25] block: add QemuOpts support for vmdk.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 22/25] block: add QemuOpts support for block.c, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 23/25] block: clean temp code and use QemuOpts in block, Dong Xu Wang, 2013/08/13
- [Qemu-devel] [PATCH V18 24/25] qapi: query-command-line-options outputs def_value_str, Dong Xu Wang, 2013/08/13