All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, mreitz@redhat.com, pkrempa@redhat.com,
	eblake@redhat.com, jcody@redhat.com, jdurgin@redhat.com,
	mitake.hitoshi@lab.ntt.co.jp, namei.unix@gmail.com,
	qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v3 16/36] file-win32: Support .bdrv_co_create
Date: Fri, 23 Feb 2018 20:25:29 +0100	[thread overview]
Message-ID: <20180223192549.26666-17-kwolf@redhat.com> (raw)
In-Reply-To: <20180223192549.26666-1-kwolf@redhat.com>

This adds the .bdrv_co_create driver callback to file-win32, which
enables image creation over QMP.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
 block/file-win32.c | 45 +++++++++++++++++++++++++++++++++++++--------
 1 file changed, 37 insertions(+), 8 deletions(-)

diff --git a/block/file-win32.c b/block/file-win32.c
index f24c7bb92c..d572cde357 100644
--- a/block/file-win32.c
+++ b/block/file-win32.c
@@ -553,29 +553,58 @@ static int64_t raw_get_allocated_file_size(BlockDriverState *bs)
     return st.st_size;
 }
 
-static int raw_create(const char *filename, QemuOpts *opts, Error **errp)
+static int raw_co_create(BlockdevCreateOptions *options, Error **errp)
 {
+    BlockdevCreateOptionsFile *file_opts;
     int fd;
-    int64_t total_size = 0;
 
-    strstart(filename, "file:", &filename);
+    assert(options->driver == BLOCKDEV_DRIVER_FILE);
+    file_opts = &options->u.file;
 
-    /* Read out options */
-    total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
-                          BDRV_SECTOR_SIZE);
+    if (file_opts->has_preallocation) {
+        error_setg(errp, "Preallocation is not supported on Windows");
+        return -EINVAL;
+    }
+    if (file_opts->has_nocow) {
+        error_setg(errp, "nocow is not supported on Windows");
+        return -EINVAL;
+    }
 
-    fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
+    fd = qemu_open(file_opts->filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
                    0644);
     if (fd < 0) {
         error_setg_errno(errp, errno, "Could not create file");
         return -EIO;
     }
     set_sparse(fd);
-    ftruncate(fd, total_size);
+    ftruncate(fd, file_opts->size);
     qemu_close(fd);
+
     return 0;
 }
 
+static int raw_create(const char *filename, QemuOpts *opts, Error **errp)
+{
+    BlockdevCreateOptions options;
+    int64_t total_size = 0;
+
+    strstart(filename, "file:", &filename);
+
+    /* Read out options */
+    total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0),
+                          BDRV_SECTOR_SIZE);
+
+    options = (BlockdevCreateOptions) {
+        .driver     = BLOCKDEV_DRIVER_FILE,
+        .u.file     = {
+            .filename           = (char *) filename,
+            .size               = total_size,
+            .has_preallocation  = false,
+            .has_nocow          = false,
+        },
+    };
+    return raw_co_create(&options, errp);
+}
 
 static QemuOptsList raw_create_opts = {
     .name = "raw-create-opts",
-- 
2.13.6

  parent reply	other threads:[~2018-02-23 19:26 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-23 19:25 [Qemu-devel] [PATCH v3 00/36] x-blockdev-create for protocols and qcow2 Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 01/36] block/qapi: Introduce BlockdevCreateOptions Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 02/36] block/qapi: Add qcow2 create options to schema Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 03/36] qcow2: Let qcow2_create() handle protocol layer Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 04/36] qcow2: Pass BlockdevCreateOptions to qcow2_create2() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 05/36] qcow2: Use BlockdevRef in qcow2_create2() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 06/36] qcow2: Use QCryptoBlockCreateOptions " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 07/36] qcow2: Handle full/falloc preallocation " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 08/36] util: Add qemu_opts_to_qdict_filtered() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 09/36] test-qemu-opts: Test qemu_opts_append() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 10/36] test-qemu-opts: Test qemu_opts_to_qdict_filtered() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 11/36] qdict: Introduce qdict_rename_keys() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 12/36] qcow2: Use visitor for options in qcow2_create() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 13/36] block: Make bdrv_is_whitelisted() public Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 14/36] block: x-blockdev-create QMP command Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 15/36] file-posix: Support .bdrv_co_create Kevin Wolf
2018-02-23 19:25 ` Kevin Wolf [this message]
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 17/36] gluster: " Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 18/36] rbd: Fix use after free in qemu_rbd_set_keypairs() error path Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 19/36] rbd: Factor out qemu_rbd_connect() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 20/36] rbd: Remove non-schema options from runtime_opts Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 21/36] rbd: Pass BlockdevOptionsRbd to qemu_rbd_connect() Kevin Wolf
2018-02-26 12:23   ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 22/36] rbd: Support .bdrv_co_create Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 23/36] rbd: Assign s->snap/image_name in qemu_rbd_open() Kevin Wolf
2018-02-26 12:24   ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 24/36] rbd: Use qemu_rbd_connect() in qemu_rbd_do_create() Kevin Wolf
2018-02-26 12:25   ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 25/36] nfs: Use QAPI options in nfs_client_open() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 26/36] nfs: Support .bdrv_co_create Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 27/36] sheepdog: QAPIfy "redundancy" create option Kevin Wolf
2018-02-26 12:28   ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 28/36] sheepdog: Support .bdrv_co_create Kevin Wolf
2018-02-26 12:30   ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 29/36] ssh: Use QAPI BlockdevOptionsSsh object Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 30/36] ssh: QAPIfy host-key-check option Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 31/36] ssh: Pass BlockdevOptionsSsh to connect_to_ssh() Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 32/36] ssh: Support .bdrv_co_create Kevin Wolf
2018-02-26 12:43   ` Max Reitz
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 33/36] file-posix: Fix no-op bdrv_truncate() with falloc preallocation Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 34/36] block: Fail bdrv_truncate() with negative size Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 35/36] qemu-iotests: Test qcow2 over file image creation with QMP Kevin Wolf
2018-02-23 19:25 ` [Qemu-devel] [PATCH v3 36/36] qemu-iotests: Test ssh image creation over QMP Kevin Wolf
2018-02-26 12:55   ` Max Reitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180223192549.26666-17-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=eblake@redhat.com \
    --cc=jcody@redhat.com \
    --cc=jdurgin@redhat.com \
    --cc=mitake.hitoshi@lab.ntt.co.jp \
    --cc=mreitz@redhat.com \
    --cc=namei.unix@gmail.com \
    --cc=pkrempa@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.