diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2019-08-16 15:53:37 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2019-08-16 15:53:37 +0100 |
commit | c6a2225a5a5e272edc0304845e32ea436ea1043a (patch) | |
tree | 4bd7a214066714ef048ac30b4dedd5b8f6b31458 /block/io.c | |
parent | 95a9457fd44ad97c518858a4e1586a5498f9773c (diff) | |
parent | 8f071c9db506e03abcb1b76ec6d3d2f9488cc3b3 (diff) | |
download | qemu-c6a2225a5a5e272edc0304845e32ea436ea1043a.zip qemu-c6a2225a5a5e272edc0304845e32ea436ea1043a.tar.gz qemu-c6a2225a5a5e272edc0304845e32ea436ea1043a.tar.bz2 |
Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-08-15' into staging
nbd patches for 2019-08-15
- Addition of InetSocketAddress keep-alive
- Addition of BDRV_REQ_PREFETCH for more efficient copy-on-read
- Initial refactoring in preparation of NBD reconnect
# gpg: Signature made Thu 15 Aug 2019 19:28:41 BST
# gpg: using RSA key A7A16B4A2527436A
# gpg: Good signature from "Eric Blake <eblake@redhat.com>" [full]
# gpg: aka "Eric Blake (Free Software Programmer) <ebb9@byu.net>" [full]
# gpg: aka "[jpeg image of size 6874]" [full]
# Primary key fingerprint: 71C2 CC22 B1C4 6029 27D2 F3AA A7A1 6B4A 2527 436A
* remotes/ericb/tags/pull-nbd-2019-08-15:
block/nbd: refactor nbd connection parameters
block/nbd: add cmdline and qapi parameter reconnect-delay
block/nbd: move from quit to state
block/nbd: use non-blocking io channel for nbd negotiation
block/nbd: split connection_co start out of nbd_client_connect
nbd: improve CMD_CACHE: use BDRV_REQ_PREFETCH
block/stream: use BDRV_REQ_PREFETCH
block: implement BDRV_REQ_PREFETCH
qapi: Add InetSocketAddress member keep-alive
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'block/io.c')
-rw-r--r-- | block/io.c | 18 |
1 files changed, 12 insertions, 6 deletions
@@ -1168,7 +1168,8 @@ bdrv_driver_pwritev_compressed(BlockDriverState *bs, uint64_t offset, } static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child, - int64_t offset, unsigned int bytes, QEMUIOVector *qiov) + int64_t offset, unsigned int bytes, QEMUIOVector *qiov, + int flags) { BlockDriverState *bs = child->bs; @@ -1279,9 +1280,11 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child, goto err; } - qemu_iovec_from_buf(qiov, progress, bounce_buffer + skip_bytes, - pnum - skip_bytes); - } else { + if (!(flags & BDRV_REQ_PREFETCH)) { + qemu_iovec_from_buf(qiov, progress, bounce_buffer + skip_bytes, + pnum - skip_bytes); + } + } else if (!(flags & BDRV_REQ_PREFETCH)) { /* Read directly into the destination */ qemu_iovec_init(&local_qiov, qiov->niov); qemu_iovec_concat(&local_qiov, qiov, progress, pnum - skip_bytes); @@ -1332,7 +1335,8 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *child, * potential fallback support, if we ever implement any read flags * to pass through to drivers. For now, there aren't any * passthrough flags. */ - assert(!(flags & ~(BDRV_REQ_NO_SERIALISING | BDRV_REQ_COPY_ON_READ))); + assert(!(flags & ~(BDRV_REQ_NO_SERIALISING | BDRV_REQ_COPY_ON_READ | + BDRV_REQ_PREFETCH))); /* Handle Copy on Read and associated serialisation */ if (flags & BDRV_REQ_COPY_ON_READ) { @@ -1360,7 +1364,9 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *child, } if (!ret || pnum != bytes) { - ret = bdrv_co_do_copy_on_readv(child, offset, bytes, qiov); + ret = bdrv_co_do_copy_on_readv(child, offset, bytes, qiov, flags); + goto out; + } else if (flags & BDRV_REQ_PREFETCH) { goto out; } } |