qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 14/31] qed: Convert to bdrv_co_pwrite_zeroes()
Date: Wed,  8 Jun 2016 11:16:40 +0200	[thread overview]
Message-ID: <1465377417-5012-15-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1465377417-5012-1-git-send-email-kwolf@redhat.com>

From: Eric Blake <eblake@redhat.com>

Another step on our continuing quest to switch to byte-based
interfaces.

Kill an abuse of the comma operator while at it (fortunately,
the semantics were still right).  Also, the test for requests
not aligned to clusters should be applied always, not just
when a backing file is present.

Signed-off-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block/qed.c | 33 +++++++++++++++------------------
 1 file changed, 15 insertions(+), 18 deletions(-)

diff --git a/block/qed.c b/block/qed.c
index 113b8e8..1206806 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -1418,7 +1418,7 @@ typedef struct {
     bool done;
 } QEDWriteZeroesCB;
 
-static void coroutine_fn qed_co_write_zeroes_cb(void *opaque, int ret)
+static void coroutine_fn qed_co_pwrite_zeroes_cb(void *opaque, int ret)
 {
     QEDWriteZeroesCB *cb = opaque;
 
@@ -1429,10 +1429,10 @@ static void coroutine_fn qed_co_write_zeroes_cb(void *opaque, int ret)
     }
 }
 
-static int coroutine_fn bdrv_qed_co_write_zeroes(BlockDriverState *bs,
-                                                 int64_t sector_num,
-                                                 int nb_sectors,
-                                                 BdrvRequestFlags flags)
+static int coroutine_fn bdrv_qed_co_pwrite_zeroes(BlockDriverState *bs,
+                                                  int64_t offset,
+                                                  int count,
+                                                  BdrvRequestFlags flags)
 {
     BlockAIOCB *blockacb;
     BDRVQEDState *s = bs->opaque;
@@ -1440,25 +1440,22 @@ static int coroutine_fn bdrv_qed_co_write_zeroes(BlockDriverState *bs,
     QEMUIOVector qiov;
     struct iovec iov;
 
-    /* Refuse if there are untouched backing file sectors */
-    if (bs->backing) {
-        if (qed_offset_into_cluster(s, sector_num * BDRV_SECTOR_SIZE) != 0) {
-            return -ENOTSUP;
-        }
-        if (qed_offset_into_cluster(s, nb_sectors * BDRV_SECTOR_SIZE) != 0) {
-            return -ENOTSUP;
-        }
+    /* Fall back if the request is not aligned */
+    if (qed_offset_into_cluster(s, offset) ||
+        qed_offset_into_cluster(s, count)) {
+        return -ENOTSUP;
     }
 
     /* Zero writes start without an I/O buffer.  If a buffer becomes necessary
      * then it will be allocated during request processing.
      */
-    iov.iov_base = NULL,
-    iov.iov_len  = nb_sectors * BDRV_SECTOR_SIZE,
+    iov.iov_base = NULL;
+    iov.iov_len = count;
 
     qemu_iovec_init_external(&qiov, &iov, 1);
-    blockacb = qed_aio_setup(bs, sector_num, &qiov, nb_sectors,
-                             qed_co_write_zeroes_cb, &cb,
+    blockacb = qed_aio_setup(bs, offset >> BDRV_SECTOR_BITS, &qiov,
+                             count >> BDRV_SECTOR_BITS,
+                             qed_co_pwrite_zeroes_cb, &cb,
                              QED_AIOCB_WRITE | QED_AIOCB_ZERO);
     if (!blockacb) {
         return -EIO;
@@ -1663,7 +1660,7 @@ static BlockDriver bdrv_qed = {
     .bdrv_co_get_block_status = bdrv_qed_co_get_block_status,
     .bdrv_aio_readv           = bdrv_qed_aio_readv,
     .bdrv_aio_writev          = bdrv_qed_aio_writev,
-    .bdrv_co_write_zeroes     = bdrv_qed_co_write_zeroes,
+    .bdrv_co_pwrite_zeroes    = bdrv_qed_co_pwrite_zeroes,
     .bdrv_truncate            = bdrv_qed_truncate,
     .bdrv_getlength           = bdrv_qed_getlength,
     .bdrv_get_info            = bdrv_qed_get_info,
-- 
1.8.3.1

  parent reply	other threads:[~2016-06-08  9:17 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-08  9:16 [Qemu-devel] [PULL 00/31] Block layer patches Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 01/31] block: split write_zeroes always Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 02/31] qcow2: simplify logic in qcow2_co_write_zeroes Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 03/31] qcow2: add tracepoints for qcow2_co_write_zeroes Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 04/31] qemu-iotests: Test one more spot for optimizing write_zeroes Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 05/31] qcow2: Catch more unaligned write_zero into zero cluster Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 06/31] iscsi: Use block size as minimum zero/discard alignment Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 07/31] block: Track write zero limits in bytes Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 08/31] block: Add .bdrv_co_pwrite_zeroes() Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 09/31] block: Switch bdrv_write_zeroes() to byte interface Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 10/31] iscsi: Convert to bdrv_co_pwrite_zeroes() Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 11/31] qcow2: " Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 12/31] blkreplay: " Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 13/31] gluster: " Kevin Wolf
2016-06-08  9:16 ` Kevin Wolf [this message]
2016-06-08  9:16 ` [Qemu-devel] [PULL 15/31] raw-posix: " Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 16/31] raw_bsd: " Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 17/31] vmdk: " Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 18/31] block: Kill bdrv_co_write_zeroes() Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 19/31] migration/block: Convert load to BlockBackend Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 20/31] migration/block: Convert saving " Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 21/31] block: assert that bs->request_alignment is a power of 2 Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 22/31] raw-posix: Fetch max sectors for host block device Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 23/31] qcow2: avoid extra flushes in qcow2 Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 24/31] block: Fix bdrv_all_delete_snapshot() error handling Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 25/31] blockdev: clean up error handling in do_open_tray Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 26/31] block: Don't emulate natively supported pwritev flags Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 27/31] qemu-img bench Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 28/31] qemu-img bench: Sequential writes Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 29/31] qemu-img bench: Make start offset configurable Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 30/31] qemu-img bench: Implement -S (step size) Kevin Wolf
2016-06-08  9:16 ` [Qemu-devel] [PULL 31/31] qemu-img bench: Add --flush-interval Kevin Wolf
2016-06-08 17:27 ` [Qemu-devel] [PULL 00/31] Block layer patches Peter Maydell

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=1465377417-5012-15-git-send-email-kwolf@redhat.com \
    --to=kwolf@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).