[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 0/5] Auto-fragment large transactions at the blo
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH 0/5] Auto-fragment large transactions at the block layer |
Date: |
Tue, 21 Jun 2016 11:23:57 +0100 |
User-agent: |
Mutt/1.6.1 (2016-04-27) |
On Mon, Jun 20, 2016 at 05:39:24PM -0600, Eric Blake wrote:
> We have max_transfer documented in BlockLimits, but while we
> honor it during pwrite_zeroes, we were blindly ignoring it
> during pwritev and preadv, leading to multiple drivers having
> to implement fragmentation themselves. This series moves
> fragmentation to the block layer, then fixes the NBD driver to
> use it; if you like this but it needs a v2, you can request that
> I further do other drivers (I know at least iscsi and qcow2 do
> some self-fragmenting and/or error reporting that can be
> simplified by deferring fragmentation to the block layer).
>
> Prequisite: Kevin's block branch, plus my work on byte-based
> block limits (v2 at the moment):
> https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg04006.html
>
> Also available as a tag at:
> git fetch git://repo.or.cz/qemu/ericb.git nbd-fragment-v1
>
> Eric Blake (5):
> block: Fragment reads to max transfer length
> block: Fragment writes to max transfer length
> raw_bsd: Don't advertise flags not supported by protocol layer
> nbd: Rely on block layer to break up large requests
> nbd: Drop unused offset parameter
>
> include/block/nbd.h | 1 -
> nbd/nbd-internal.h | 4 +--
> block/io.c | 84
> +++++++++++++++++++++++++++++++++++++++--------------
> block/nbd-client.c | 78 ++++++++++++++-----------------------------------
> block/nbd.c | 12 ++------
> block/raw_bsd.c | 6 ++--
> nbd/common.c | 3 +-
> 7 files changed, 95 insertions(+), 93 deletions(-)
I'm concerned that requests A & B which should be atomic can now be
interleaved.
For example, two writes that are overlapping and fragmented.
Applications expect to either see A or B on disk when both requests have
completed. Fragmentation must serialize overlapping requests in order
to prevent interleaved results where the application sees some of A and
some of B when both requests have completed.
A similar scenario happens when A is a read and B is a write, too. Read
A is supposed to see either "before B" or "after B". With fragmentation
it can see "some of before B and some of after B".
signature.asc
Description: PGP signature
- [Qemu-devel] [PATCH 0/5] Auto-fragment large transactions at the block layer, Eric Blake, 2016/06/20
- [Qemu-devel] [PATCH 1/5] block: Fragment reads to max transfer length, Eric Blake, 2016/06/20
- [Qemu-devel] [PATCH 5/5] nbd: Drop unused offset parameter, Eric Blake, 2016/06/20
- [Qemu-devel] [PATCH 2/5] block: Fragment writes to max transfer length, Eric Blake, 2016/06/20
- [Qemu-devel] [PATCH 3/5] raw_bsd: Don't advertise flags not supported by protocol layer, Eric Blake, 2016/06/20
- [Qemu-devel] [PATCH 4/5] nbd: Rely on block layer to break up large requests, Eric Blake, 2016/06/20
- [Qemu-devel] [PATCH 6/5] iscsi: Rely on block layer to break up large requests, Eric Blake, 2016/06/20
- Re: [Qemu-devel] [PATCH 0/5] Auto-fragment large transactions at the block layer, Eric Blake, 2016/06/21
- Re: [Qemu-devel] [PATCH 0/5] Auto-fragment large transactions at the block layer,
Stefan Hajnoczi <=
- Re: [Qemu-devel] [PATCH 0/5] Auto-fragment large transactions at the block layer, Fam Zheng, 2016/06/22