qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Eric Blake <eblake@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL for-2.7 02/25] raw_bsd: Don't advertise flags not supported by protocol layer
Date: Tue, 19 Jul 2016 19:47:52 +0100	[thread overview]
Message-ID: <1468954095-5159-3-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1468954095-5159-1-git-send-email-stefanha@redhat.com>

From: Eric Blake <eblake@redhat.com>

The raw format layer supports all flags via passthrough - but
it only makes sense to pass through flags that the lower layer
actually supports.

The next patch gives stronger reasoning for why this is correct.
At the moment, the raw format layer ignores the max_transfer
limit of its protocol layer, and an attempt to do the qemu-io
'w -f 0 40m' to an NBD server that lacks FUA will pass the entire
40m request to the NBD driver, which then fragments the request
itself into a 32m write, 8m write, and flush.  But once the block
layer starts honoring limits and fragmenting packets, the raw
driver will hand the NBD driver two separate requests; if both
requests have BDRV_REQ_FUA set, then this would result in a 32m
write, flush, 8m write, and second flush.  By having the raw
layer no longer advertise FUA support when the protocol layer
lacks it, we are back to a single flush at the block layer for
the overall 40m request.

Note that 'w -f -z 0 40m' does not currently exhibit the same
problem, because there, the fragmentation does not occur until
at the NBD layer (the raw layer has .bdrv_co_pwrite_zeroes, and
the NBD layer doesn't advertise max_pwrite_zeroes to constrain
things at the raw layer) - but the problem is latent and we
would again have too many flushes without this patch once the
NBD layer implements support for the new NBD_CMD_WRITE_ZEROES
command, if it sets max_pwrite_zeroes to the same 32m limit as
recommended by the NBD protocol.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1468607524-19021-3-git-send-email-eblake@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 block/raw_bsd.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/block/raw_bsd.c b/block/raw_bsd.c
index 5f9dd29..d767413 100644
--- a/block/raw_bsd.c
+++ b/block/raw_bsd.c
@@ -192,8 +192,10 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
                     Error **errp)
 {
     bs->sg = bs->file->bs->sg;
-    bs->supported_write_flags = BDRV_REQ_FUA;
-    bs->supported_zero_flags = BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP;
+    bs->supported_write_flags = BDRV_REQ_FUA &
+        bs->file->bs->supported_write_flags;
+    bs->supported_zero_flags = (BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
+        bs->file->bs->supported_zero_flags;
 
     if (bs->probed && !bdrv_is_read_only(bs)) {
         fprintf(stderr,
-- 
2.7.4

  parent reply	other threads:[~2016-07-19 18:48 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-19 18:47 [Qemu-devel] [PULL for-2.7 00/25] Block patches Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 01/25] block: Fragment reads to max transfer length Stefan Hajnoczi
2016-07-19 18:47 ` Stefan Hajnoczi [this message]
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 03/25] block: Fragment writes " Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 04/25] nbd: Rely on block layer to break up large requests Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 05/25] nbd: Drop unused offset parameter Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 06/25] iscsi: Rely on block layer to break up large requests Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 07/25] block: Convert bdrv_co_discard() to byte-based Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 08/25] block: Convert bdrv_discard() " Stefan Hajnoczi
2016-07-19 18:47 ` [Qemu-devel] [PULL for-2.7 09/25] block: Switch BlockRequest " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 10/25] block: Convert bdrv_aio_discard() " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 11/25] block: Convert BB interface to byte-based discards Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 12/25] raw-posix: Switch paio_submit() to byte-based Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 13/25] rbd: Switch rbd_start_aio() " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 14/25] block: Convert .bdrv_aio_discard() " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 15/25] block: Add .bdrv_co_pdiscard() driver callback Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 16/25] blkreplay: Switch .bdrv_co_discard() to byte-based Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 17/25] gluster: " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 18/25] iscsi: " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 19/25] nbd: " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 20/25] qcow2: " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 21/25] raw_bsd: " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 22/25] sheepdog: " Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 23/25] block: Kill .bdrv_co_discard() Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 24/25] nbd: Convert to byte-based interface Stefan Hajnoczi
2016-07-19 18:48 ` [Qemu-devel] [PULL for-2.7 25/25] raw_bsd: " Stefan Hajnoczi
2016-07-20 12:56 ` [Qemu-devel] [PULL for-2.7 00/25] Block patches Peter Maydell
2016-07-20 13:25   ` Stefan Hajnoczi

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=1468954095-5159-3-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=eblake@redhat.com \
    --cc=peter.maydell@linaro.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).