qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] d40593: block/backup: Fix hang for unaligned


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] d40593: block/backup: Fix hang for unaligned image size
Date: Mon, 14 Jul 2014 07:00:05 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: d40593dd9033d39a5e4cc32915c5eb28f3e858b6
      
https://github.com/qemu/qemu/commit/d40593dd9033d39a5e4cc32915c5eb28f3e858b6
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-09 (Wed, 09 Jul 2014)

  Changed paths:
    M block/backup.c
    M tests/qemu-iotests/028
    M tests/qemu-iotests/028.out

  Log Message:
  -----------
  block/backup: Fix hang for unaligned image size

When doing a block backup of an image with an unaligned size (with
respect to the BACKUP_CLUSTER_SIZE), qemu would check the allocation
status of sectors after the end of the image. bdrv_is_allocated()
returns a result that is valid for 0 sectors in this case, so the backup
job ran into an endless loop.

Stop looping when seeing a result valid for 0 sectors, we're at EOF then.

The test case looks somewhat unrelated at first sight because I
originally tried to reproduce a different suspected bug that turned out
to not exist. Still a good test case and it accidentally found this one.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: 01fb2705bd19a6e9c1207446793064dbd141df5f
      
https://github.com/qemu/qemu/commit/01fb2705bd19a6e9c1207446793064dbd141df5f
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-09 (Wed, 09 Jul 2014)

  Changed paths:
    M block.c

  Log Message:
  -----------
  block: Fix bdrv_is_allocated() return value

bdrv_is_allocated() should return either 0 or 1 in successful cases.
We're lucky that currently, the callers that rely on this (e.g. because
they check for ret == 1) don't seem to break badly. They just might skip
some optimisation or in the case of qemu-io 'map' print separate lines
where a single line would suffice. In theory, a wrong allocation status
could lead to image corruption with certain operations, so let's fix
this quickly.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: b47ec2c4562117728be36ec2edfbdf9ef2868c6e
      
https://github.com/qemu/qemu/commit/b47ec2c4562117728be36ec2edfbdf9ef2868c6e
  Author: Paolo Bonzini <address@hidden>
  Date:   2014-07-09 (Wed, 09 Jul 2014)

  Changed paths:
    M block.c
    M blockjob.c
    M qemu-io-cmds.c

  Log Message:
  -----------
  block: prefer aio_poll to qemu_aio_wait

Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 87f68d318222563822b5c6b28192215fc4b4e441
      
https://github.com/qemu/qemu/commit/87f68d318222563822b5c6b28192215fc4b4e441
  Author: Paolo Bonzini <address@hidden>
  Date:   2014-07-09 (Wed, 09 Jul 2014)

  Changed paths:
    M aio-posix.c
    M aio-win32.c
    M include/block/aio.h
    M include/block/blockjob.h
    M include/block/coroutine.h
    M main-loop.c
    M tests/test-thread-pool.c

  Log Message:
  -----------
  block: drop aio functions that operate on the main AioContext

The main AioContext should be accessed explicitly via qemu_get_aio_context().
Most of the time, using it is not the right thing to do.

Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: ef508f427b348c7f0ef2bfe7c080fe5fcaee9f6b
      
https://github.com/qemu/qemu/commit/ef508f427b348c7f0ef2bfe7c080fe5fcaee9f6b
  Author: Paolo Bonzini <address@hidden>
  Date:   2014-07-09 (Wed, 09 Jul 2014)

  Changed paths:
    M tests/test-aio.c

  Log Message:
  -----------
  test-aio: fix GSource-based timer test

The current test depends too much on the implementation of the AioContext
GSource.  Just iterate on the main loop until the callback has been invoked
the right number of times.

Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 0ceb849bd336a5f9b6e1ed56d45cf5773d251ad8
      
https://github.com/qemu/qemu/commit/0ceb849bd336a5f9b6e1ed56d45cf5773d251ad8
  Author: Paolo Bonzini <address@hidden>
  Date:   2014-07-09 (Wed, 09 Jul 2014)

  Changed paths:
    M aio-posix.c
    M async.c
    A docs/aio_notify.promela
    M include/block/aio.h

  Log Message:
  -----------
  AioContext: speed up aio_notify

In many cases, the call to event_notifier_set in aio_notify is unnecessary.
In particular, if we are executing aio_dispatch, or if aio_poll is not
blocking, we know that we will soon get to the next loop iteration (if
necessary); the thread that hosts the AioContext's event loop does not
need any nudging.

The patch includes a Promela formal model that shows that this really
works and does not need any further complication such as generation
counts.  It needs a memory barrier though.

The generation counts are not needed because any change to
ctx->dispatching after the memory barrier is okay for aio_notify.
If it changes from zero to one, it is the right thing to skip
event_notifier_set.  If it changes from one to zero, the
event_notifier_set is unnecessary but harmless.

Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 33f461e0c5d8efa21ef7e746be561fc57a1df106
      
https://github.com/qemu/qemu/commit/33f461e0c5d8efa21ef7e746be561fc57a1df106
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M block.c

  Log Message:
  -----------
  block: Make qiov match the request size until EOF

If a read request goes across EOF, the block driver sees a shortened
request that stops at EOF (the rest is memsetted in block.c), however
the original qiov was used for this request.

This patch makes the qiov size match the request size, avoiding a
potential buffer overflow in raw-posix.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Max Reitz <address@hidden>


  Commit: 44deba5a52576508f27edadf953e435141e2a76a
      
https://github.com/qemu/qemu/commit/44deba5a52576508f27edadf953e435141e2a76a
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M block/qcow2.c

  Log Message:
  -----------
  qcow2: Make qiov match request size until backing file EOF

If a qcow2 image has a shorter backing file and a read request to
unallocated clusters goes across EOF of the backing file, the backing
file sees a shortened request and the rest is filled with zeros.
However, the original too long qiov was used with the shortened request.

This patch makes the qiov size match the request size, avoiding a
potential buffer overflow in raw-posix.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Max Reitz <address@hidden>


  Commit: f06ee3d4aa547df8d7d2317b2b6db7a88c1f3744
      
https://github.com/qemu/qemu/commit/f06ee3d4aa547df8d7d2317b2b6db7a88c1f3744
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M block/qed.c
    M block/qed.h

  Log Message:
  -----------
  qed: Make qiov match request size until backing file EOF

If a QED image has a shorter backing file and a read request to
unallocated clusters goes across EOF of the backing file, the backing
file sees a shortened request and the rest is filled with zeros.
However, the original too long qiov was used with the shortened request.

This patch makes the qiov size match the request size, avoiding a
potential buffer overflow in raw-posix.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: 8eb029c26ecf61da6c2b45c3c23472e8c477ba34
      
https://github.com/qemu/qemu/commit/8eb029c26ecf61da6c2b45c3c23472e8c477ba34
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M block.c
    M block/raw-posix.c

  Log Message:
  -----------
  block: Assert qiov length matches request length

At least raw-posix relies on this because it can allocate bounce buffers
based on the request length, but access it using all of the qiov entries
later.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Max Reitz <address@hidden>


  Commit: 0a21ea3289c5a3b982386e3eaaa37627c18f5e35
      
https://github.com/qemu/qemu/commit/0a21ea3289c5a3b982386e3eaaa37627c18f5e35
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/block/dataplane/virtio-blk.c

  Log Message:
  -----------
  virtio-blk: avoid dataplane VirtIOBlockReq early free

VirtIOBlockReq is freed later by virtio_blk_free_request() in
hw/block/virtio-blk.c.  Remove this extraneous g_slice_free().

This patch fixes the following segfault:

  0x00005555556373af in virtio_blk_rw_complete (opaque=0x5555565ff5e0, ret=0) 
at hw/block/virtio-blk.c:99
  99          bdrv_acct_done(req->dev->bs, &req->acct);
  (gdb) print req
  $1 = (VirtIOBlockReq *) 0x5555565ff5e0
  (gdb) print req->dev
  $2 = (VirtIOBlock *) 0x0
  (gdb) bt
  #0  0x00005555556373af in virtio_blk_rw_complete (opaque=0x5555565ff5e0, 
ret=0) at hw/block/virtio-blk.c:99
  #1  0x0000555555840ebe in bdrv_co_em_bh (opaque=0x5555566152d0) at 
block.c:4675
  #2  0x000055555583de77 in aio_bh_poll (address@hidden) at async.c:81
  #3  0x000055555584b7a7 in aio_poll (ctx=0x5555563a8150, address@hidden) at 
aio-posix.c:188
  #4  0x00005555556e520e in iothread_run (opaque=0x5555563a7fd8) at 
iothread.c:41
  #5  0x00007ffff42ba124 in start_thread () from /usr/lib/libpthread.so.0
  #6  0x00007ffff16d14bd in clone () from /usr/lib/libc.so.6

Reported-by: Max Reitz <address@hidden>
Cc: Fam Zheng <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
Tested-by: Christian Borntraeger <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: abd764250fbce6f285513d74f03eb5c526e520f6
      
https://github.com/qemu/qemu/commit/abd764250fbce6f285513d74f03eb5c526e520f6
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/virtio/dataplane/vring.c
    M include/hw/virtio/dataplane/vring.h

  Log Message:
  -----------
  dataplane: do not free VirtQueueElement in vring_push()

VirtQueueElement is allocated in vring_pop() so it seems to make sense
that vring_push() should free it.  Alas, virtio-blk frees
VirtQueueElement itself in virtio_blk_free_request().

This patch solves a double-free assertion in glib's g_slice_free().

Rename vring_free_element() to vring_unmap_element() since it no longer
frees the VirtQueueElement.

Signed-off-by: Stefan Hajnoczi <address@hidden>
Tested-by: Christian Borntraeger <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 869d66af53d8e04709456c9cae5cca7c560d4b93
      
https://github.com/qemu/qemu/commit/869d66af53d8e04709456c9cae5cca7c560d4b93
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/block/virtio-blk.c

  Log Message:
  -----------
  virtio-blk: avoid g_slice_new0() for VirtIOBlockReq and VirtQueueElement

In commit de6c8042ec55da18702fa51f09072fcaa315edc3 ("virtio-blk: Avoid
zeroing every request structure") we avoided the 40 KB memset when
allocating VirtIOBlockReq.

The memset was reintroduced in commit
671ec3f056559f22a2531a91dce3a258b9b5eb8a ("virtio-blk: Convert
VirtIOBlockReq.elem to pointer").

It must be fixed again to avoid a performance regression.

Cc: Fam Zheng <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: f897bf751fbd95e4015b95d202c706548586813a
      
https://github.com/qemu/qemu/commit/f897bf751fbd95e4015b95d202c706548586813a
  Author: Stefan Hajnoczi <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/block/dataplane/virtio-blk.c
    M hw/block/virtio-blk.c
    M hw/virtio/dataplane/vring.c
    M include/hw/virtio/dataplane/vring.h
    M include/hw/virtio/virtio-blk.h

  Log Message:
  -----------
  virtio-blk: embed VirtQueueElement in VirtIOBlockReq

The memory allocation between hw/block/virtio-blk.c,
hw/block/dataplane/virtio-blk.c, and hw/virtio/dataplane/vring.c is
messy.  Structs are allocated in different files than they are freed in.
This is risky and makes memory leaks easier.

Embed VirtQueueElement in VirtIOBlockReq to reduce the amount of memory
allocation we need to juggle.  This also makes vring.c and virtio.c
slightly more similar.

Signed-off-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: acfb23ad3dd8d0ab385a10e483776ba7dcf927ad
      
https://github.com/qemu/qemu/commit/acfb23ad3dd8d0ab385a10e483776ba7dcf927ad
  Author: Paolo Bonzini <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M include/block/aio.h
    M iothread.c
    M tests/test-aio.c

  Log Message:
  -----------
  AioContext: do not rely on aio_poll(ctx, true) result to end a loop

Currently, whenever aio_poll(ctx, true) has completed all pending
work it returns true *and* the next call to aio_poll(ctx, true)
will not block.

This invariant has its roots in qemu_aio_flush()'s implementation
as "while (qemu_aio_wait()) {}".  However, qemu_aio_flush() does
not exist anymore and bdrv_drain_all() is implemented differently;
and this invariant is complicated to maintain and subtly different
from the return value of GMainLoop's g_main_context_iteration.

All calls to aio_poll(ctx, true) except one are guarded by a
while() loop checking for a request to be incomplete, or a
BlockDriverState to be idle.  The one remaining call (in
iothread.c) uses this to delay the aio_context_release/acquire
pair until the AioContext is quiescent, however:

- we can do the same just by using non-blocking aio_poll,
  similar to how vl.c invokes main_loop_wait

- it is buggy, because it does not ensure that the AioContext
  is released between an aio_notify and the next time the
  iothread goes to sleep.  This leads to hangs when stopping
  the dataplane thread.

In the end, these semantics are a bad match for the current
users of AioContext.  So modify that one exception in iothread.c,
which also fixes the hangs, as well as the testcase so that
it use the same idiom as the actual QEMU code.

Reported-by: Christian Borntraeger <address@hidden>
Tested-by: Christian Borntraeger <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: b8864245b140c801e826de4acf6d6516e2c550b2
      
https://github.com/qemu/qemu/commit/b8864245b140c801e826de4acf6d6516e2c550b2
  Author: Andreas Färber <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M tests/test-string-output-visitor.c

  Log Message:
  -----------
  tests: Fix unterminated string output visitor enum human string

The buffer was being allocated of size string length plus two.
Around the string two quotes were being added, but no terminating NUL.
It was then compared using g_assert_cmpstr(), resulting in fairly random
assertion failures:

 ERROR:tests/test-string-output-visitor.c:213:test_visitor_out_enum: assertion 
failed (str == str_human): ("\"value1\"" == "\"value1\"\001EEEEEEEEEEEEEE\0171")

There is no g_assert_cmpnstr() counterpart, so use g_strdup_printf()
for safely assembling the string in the first place.

Cc: Hu Tao <address@hidden>
Cc: Michael S. Tsirkin <address@hidden>
Suggested-by: Eric Blake <address@hidden>
Fixes: b4900c0 tests: add human format test for string output visitor
Signed-off-by: Andreas Färber <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 80504dcaa11097b99842312014f5954a54fe1826
      
https://github.com/qemu/qemu/commit/80504dcaa11097b99842312014f5954a54fe1826
  Author: Nikolay Nikolaev <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M tests/vhost-user-test.c

  Log Message:
  -----------
  qtest: fix vhost-user-test compilation with old GLib

Mising G_TIME_SPAN_SECOND definition breaks the RHEL6 compilation as GLib
version before 2.26 does not have it. In such case just define it.

Reported-by: Kevin Wolf <address@hidden>
Signed-off-by: Nikolay Nikolaev <address@hidden>
Tested-by: Kevin Wolf <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 58f423fbd5f7f435e8dc56dfa565b043d20d1e1b
      
https://github.com/qemu/qemu/commit/58f423fbd5f7f435e8dc56dfa565b043d20d1e1b
  Author: Kevin Wolf <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M dma-helpers.c
    M include/qemu-common.h
    M util/iov.c

  Log Message:
  -----------
  dma-helpers: Fix too long qiov

If the size of the scatter/gather list isn't a multiple of 512, the
number of sectors for the block layer request is rounded down, resulting
in a qiov that doesn't match the request length. Truncate the qiov to the
new length of the request.

This fixes the IDE qtest case /x86_64/ide/bmdma/short_prdt.

Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: d0e14376eefc40b07c8fb42c132c2202c66dcb0b
      
https://github.com/qemu/qemu/commit/d0e14376eefc40b07c8fb42c132c2202c66dcb0b
  Author: Markus Armbruster <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/block/virtio-blk.c

  Log Message:
  -----------
  virtio-blk: Factor common checks out of virtio_blk_handle_read/write()

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 42e38c1fd0199155d32f3464aedce282d3d7f6a1
      
https://github.com/qemu/qemu/commit/42e38c1fd0199155d32f3464aedce282d3d7f6a1
  Author: Markus Armbruster <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/block/virtio-blk.c

  Log Message:
  -----------
  virtio-blk: Bypass error action and I/O accounting on invalid r/w

When a device model's I/O operation fails, we execute the error
action.  This lets layers above QEMU implement thin provisioning, or
attempt to correct errors before they reach the guest.  But when the
I/O operation fails because it's invalid, reporting the error to the
guest is the only sensible action.

If the guest's read or write asks for an invalid sector range, fail
the request right away, without considering the error action.  No
change with error action BDRV_ACTION_REPORT.

Furthermore, bypass I/O accounting, because we want to track only I/O
that actually reaches the block layer.

The next commit will extend "invalid sector range" to cover attempts
to read/write beyond the end of the medium.

Signed-off-by: Markus Armbruster <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 3c2daac0b98952a858277878cb11294256b39e43
      
https://github.com/qemu/qemu/commit/3c2daac0b98952a858277878cb11294256b39e43
  Author: Markus Armbruster <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/block/virtio-blk.c

  Log Message:
  -----------
  virtio-blk: Treat read/write beyond end as invalid

The block layer fails such reads and writes just fine.  However, they
then get treated like valid operations that fail: the error action
gets executed.  Unwanted; reporting the error to the guest is the only
sensible action.

Reject them before passing them to the block layer.  This bypasses the
error action and I/O accounting.

Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 58ac321135af890b503ebe56d0d00e184779918f
      
https://github.com/qemu/qemu/commit/58ac321135af890b503ebe56d0d00e184779918f
  Author: Markus Armbruster <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M hw/ide/core.c

  Log Message:
  -----------
  ide: Treat read/write beyond end as invalid

The block layer fails such reads and writes just fine.  However, they
then get treated like valid operations that fail: the error action
gets executed.  Unwanted; reporting the error to the guest is the only
sensible action.

Reject them before passing them to the block layer.  This bypasses the
error action and I/O accounting.  Not quite correct for DMA, because
DMA can fail after some success, and when that happens, the part that
succeeded isn't counted.  Tolerable, because I/O accounting is an
inconsistent mess anyway.

Signed-off-by: Markus Armbruster <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>


  Commit: 7a6d04e73fdd571234e05dcad96895fafb3f22f0
      
https://github.com/qemu/qemu/commit/7a6d04e73fdd571234e05dcad96895fafb3f22f0
  Author: Peter Maydell <address@hidden>
  Date:   2014-07-14 (Mon, 14 Jul 2014)

  Changed paths:
    M aio-posix.c
    M aio-win32.c
    M async.c
    M block.c
    M block/backup.c
    M block/qcow2.c
    M block/qed.c
    M block/qed.h
    M block/raw-posix.c
    M blockjob.c
    M dma-helpers.c
    A docs/aio_notify.promela
    M hw/block/dataplane/virtio-blk.c
    M hw/block/virtio-blk.c
    M hw/ide/core.c
    M hw/virtio/dataplane/vring.c
    M include/block/aio.h
    M include/block/blockjob.h
    M include/block/coroutine.h
    M include/hw/virtio/dataplane/vring.h
    M include/hw/virtio/virtio-blk.h
    M include/qemu-common.h
    M iothread.c
    M main-loop.c
    M qemu-io-cmds.c
    M tests/qemu-iotests/028
    M tests/qemu-iotests/028.out
    M tests/test-aio.c
    M tests/test-thread-pool.c
    M util/iov.c

  Log Message:
  -----------
  Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging

Block patches for 2.1.0-rc2 (v2)

# gpg: Signature made Mon 14 Jul 2014 11:04:12 BST using RSA key ID C88F2FD6
# gpg: Good signature from "Kevin Wolf <address@hidden>"

* remotes/kevin/tags/for-upstream: (22 commits)
  ide: Treat read/write beyond end as invalid
  virtio-blk: Treat read/write beyond end as invalid
  virtio-blk: Bypass error action and I/O accounting on invalid r/w
  virtio-blk: Factor common checks out of virtio_blk_handle_read/write()
  dma-helpers: Fix too long qiov
  qtest: fix vhost-user-test compilation with old GLib
  tests: Fix unterminated string output visitor enum human string
  AioContext: do not rely on aio_poll(ctx, true) result to end a loop
  virtio-blk: embed VirtQueueElement in VirtIOBlockReq
  virtio-blk: avoid g_slice_new0() for VirtIOBlockReq and VirtQueueElement
  dataplane: do not free VirtQueueElement in vring_push()
  virtio-blk: avoid dataplane VirtIOBlockReq early free
  block: Assert qiov length matches request length
  qed: Make qiov match request size until backing file EOF
  qcow2: Make qiov match request size until backing file EOF
  block: Make qiov match the request size until EOF
  AioContext: speed up aio_notify
  test-aio: fix GSource-based timer test
  block: drop aio functions that operate on the main AioContext
  block: prefer aio_poll to qemu_aio_wait
  ...

Signed-off-by: Peter Maydell <address@hidden>


Compare: https://github.com/qemu/qemu/compare/c15a34eda0f2...7a6d04e73fdd

reply via email to

[Prev in Thread] Current Thread [Next in Thread]