1. 17 6月, 2016 4 次提交
  2. 16 6月, 2016 36 次提交
    • P
      Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging · dc278c58
      Peter Maydell 提交于
      Block layer patches
      
      # gpg: Signature made Thu 16 Jun 2016 15:01:27 BST
      # gpg:                using RSA key 0x7F09B272C88F2FD6
      # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
      # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74  56FE 7F09 B272 C88F 2FD6
      
      * remotes/kevin/tags/for-upstream: (39 commits)
        hbitmap: add 'pos < size' asserts
        iotests: Add test for oVirt-like storage migration
        iotests: Add test for post-mirror backing chains
        block/null: Implement bdrv_refresh_filename()
        block/mirror: Fix target backing BDS
        block: Allow replacement of a BDS by its overlay
        rbd:change error_setg() to error_setg_errno()
        iotests: 095: Clean up QEMU before showing image info
        block: Create the commit block job before reopening any image
        block: Prevent sleeping jobs from resuming if they have been paused
        block: use the block job list in qmp_query_block_jobs()
        block: use the block job list in bdrv_drain_all()
        block: Fix snapshot=on with aio=native
        block: Remove bs->zero_beyond_eof
        qcow2: Let vmstate call qcow2_co_preadv/pwrite directly
        block: Make bdrv_load/save_vmstate coroutine_fns
        block: Allow .bdrv_load/save_vmstate() to return 0/-errno
        block: Make .bdrv_load_vmstate() vectored
        block: Introduce bdrv_preadv()
        doc: Fix mailing list address in tests/qemu-iotests/README
        ...
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      dc278c58
    • K
      Merge remote-tracking branch 'mreitz/tags/pull-block-for-kevin-2016-06-16' into queue-block · 60251f4d
      Kevin Wolf 提交于
      Block patches
      
      # gpg: Signature made Thu Jun 16 15:21:35 2016 CEST
      # gpg:                using RSA key 0x3BB14202E838ACAD
      # gpg: Good signature from "Max Reitz <mreitz@redhat.com>"
      # Primary key fingerprint: 91BE B60A 30DB 3E88 57D1  1829 F407 DB00 61D5 CF40
      #      Subkey fingerprint: 58B3 81CE 2DC8 9CF9 9730  EE64 3BB1 4202 E838 ACAD
      
      * mreitz/tags/pull-block-for-kevin-2016-06-16:
        hbitmap: add 'pos < size' asserts
        iotests: Add test for oVirt-like storage migration
        iotests: Add test for post-mirror backing chains
        block/null: Implement bdrv_refresh_filename()
        block/mirror: Fix target backing BDS
        block: Allow replacement of a BDS by its overlay
        rbd:change error_setg() to error_setg_errno()
        iotests: 095: Clean up QEMU before showing image info
        block: Create the commit block job before reopening any image
        block: Prevent sleeping jobs from resuming if they have been paused
        block: use the block job list in qmp_query_block_jobs()
        block: use the block job list in bdrv_drain_all()
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      60251f4d
    • V
      hbitmap: add 'pos < size' asserts · 0e321191
      Vladimir Sementsov-Ogievskiy 提交于
      For now, fail in hbitmap_set on start + count > size will come from
      hbitmap_set
        hb_count_between
          hbitmap_iter_init
            assert(pos < hb->size)
      
      This patch adds such checks to set/get/reset functions of hbitmap.
      Signed-off-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Message-id: 1465924093-76875-2-git-send-email-vsementsov@virtuozzo.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      0e321191
    • M
      iotests: Add test for oVirt-like storage migration · 3dd48fdc
      Max Reitz 提交于
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20160610185750.30956-6-mreitz@redhat.com
      Reviewed-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      3dd48fdc
    • M
      iotests: Add test for post-mirror backing chains · 298c6009
      Max Reitz 提交于
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20160610185750.30956-5-mreitz@redhat.com
      Reviewed-by: NFam Zheng <famz@redhat.com>
      [mreitz@redhat.com: Removed unnecessary imports]
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      298c6009
    • M
      block/null: Implement bdrv_refresh_filename() · 67882b15
      Max Reitz 提交于
      The null block driver ignores any filename used for creating its BDSs,
      which allows creating such BDSs even without any filename at all. In
      that case, we currently construct a JSON filename when queried instead
      of a plain "null-co://" or "null-aio://". This patch implements
      bdrv_refresh_filename() to remedy this behavior.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20160610185750.30956-4-mreitz@redhat.com
      [mreitz@redhat.com: Added commit message]
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      67882b15
    • M
      block/mirror: Fix target backing BDS · 274fccee
      Max Reitz 提交于
      Currently, we are trying to move the backing BDS from the source to the
      target in bdrv_replace_in_backing_chain() which is called from
      mirror_exit(). However, mirror_complete() already tries to open the
      target's backing chain with a call to bdrv_open_backing_file().
      
      First, we should only set the target's backing BDS once. Second, the
      mirroring block job has a better idea of what to set it to than the
      generic code in bdrv_replace_in_backing_chain() (in fact, the latter's
      conditions on when to move the backing BDS from source to target are not
      really correct).
      
      Therefore, remove that code from bdrv_replace_in_backing_chain() and
      leave it to mirror_complete().
      
      Depending on what kind of mirroring is performed, we furthermore want to
      use different strategies to open the target's backing chain:
      
      - If blockdev-mirror is used, we can assume the user made sure that the
        target already has the correct backing chain. In particular, we should
        not try to open a backing file if the target does not have any yet.
      
      - If drive-mirror with mode=absolute-paths is used, we can and should
        reuse the already existing chain of nodes that the source BDS is in.
        In case of sync=full, no backing BDS is required; with sync=top, we
        just link the source's backing BDS to the target, and with sync=none,
        we use the source BDS as the target's backing BDS.
        We should not try to open these backing files anew because this would
        lead to two BDSs existing per physical file in the backing chain, and
        we would like to avoid such concurrent access.
      
      - If drive-mirror with mode=existing is used, we have to use the
        information provided in the physical image file which means opening
        the target's backing chain completely anew, just as it has been done
        already.
        If the target's backing chain shares images with the source, this may
        lead to multiple BDSs per physical image file. But since we cannot
        reliably ascertain this case, there is nothing we can do about it.
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20160610185750.30956-3-mreitz@redhat.com
      Reviewed-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      274fccee
    • M
      block: Allow replacement of a BDS by its overlay · 9bd910e2
      Max Reitz 提交于
      change_parent_backing_link() asserts that the BDS to be replaced is not
      used as a backing file. However, we may want to replace a BDS by its
      overlay in which case that very link should not be redirected.
      
      For instance, when doing a sync=none drive-mirror operation, we may have
      the following BDS/BB forest before block job completion:
      
        target
      
        base <- source <- BlockBackend
      
      During job completion, we want to establish the source BDS as the
      target's backing node:
      
                target
                  |
                  v
        base <- source <- BlockBackend
      
      This makes the target a valid replacement for the source:
      
                target <- BlockBackend
                  |
                  v
        base <- source
      
      Without this modification to change_parent_backing_link() we have to
      inject the target into the graph before the source is its backing node,
      thus temporarily creating a wrong graph:
      
        target <- BlockBackend
      
        base <- source
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      Message-id: 20160610185750.30956-2-mreitz@redhat.com
      Reviewed-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      9bd910e2
    • V
      rbd:change error_setg() to error_setg_errno() · 87cd3d20
      Vikhyat Umrao 提交于
      Ceph RBD block driver does not use error_setg_errno() where
      it is possible to use. This patch replaces error_setg()
      from error_setg_errno().
      Signed-off-by: NVikhyat Umrao <vumrao@redhat.com>
      Message-id: 1462780319-5796-1-git-send-email-vumrao@redhat.com
      Reviewed-by: NJosh Durgin <jdurgin@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      87cd3d20
    • F
      iotests: 095: Clean up QEMU before showing image info · 6ea66b59
      Fam Zheng 提交于
      Signed-off-by: NFam Zheng <famz@redhat.com>
      Message-id: 1464944872-24484-1-git-send-email-famz@redhat.com
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      6ea66b59
    • A
      block: Create the commit block job before reopening any image · 834fe28d
      Alberto Garcia 提交于
      If the base or overlay images need to be reopened in read-write mode
      but the block_job_create() call fails then no one will put those
      images back in read-only mode.
      
      We can solve this problem easily by calling block_job_create() first.
      Signed-off-by: NAlberto Garcia <berto@igalia.com>
      Message-id: aa495045770a6f1a7cc5d408397a17c75097fdd8.1464346103.git.berto@igalia.com
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      834fe28d
    • A
      block: Prevent sleeping jobs from resuming if they have been paused · 0824afda
      Alberto Garcia 提交于
      If we pause a block job and drain its BlockDriverState we want that
      the job remains inactive until we call block_job_resume() again.
      
      However if we pause the job while it is sleeping then it will resume
      when the sleep timer fires.
      
      This patch prevents that from happening by checking if the job has
      been paused after it comes back from sleeping.
      Signed-off-by: NAlberto Garcia <berto@igalia.com>
      Suggested-by: NKevin Wolf <kwolf@redhat.com>
      Message-id: 3d9011151512326b890d22bdab3530244ef349d7.1464346103.git.berto@igalia.com
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      0824afda
    • A
      block: use the block job list in qmp_query_block_jobs() · f0f55ded
      Alberto Garcia 提交于
      qmp_query_block_jobs() uses bdrv_next() to look for block jobs, but
      this function can only find those in top-level BlockDriverStates.
      
      This patch uses block_job_next() instead.
      Signed-off-by: NAlberto Garcia <berto@igalia.com>
      Message-id: a8b7e5497b7c1fa67c12fcceae1630d01c3b1f96.1464346103.git.berto@igalia.com
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      f0f55ded
    • A
      block: use the block job list in bdrv_drain_all() · eb1364ce
      Alberto Garcia 提交于
      bdrv_drain_all() pauses all block jobs by using bdrv_next() to iterate
      over all top-level BlockDriverStates. Therefore the code is unable to
      find block jobs in other nodes.
      
      This patch uses block_job_next() to iterate over all block jobs.
      Signed-off-by: NAlberto Garcia <berto@igalia.com>
      Message-id: 55ee7d7d4a65c28aa1a1b28823897ef326f328e2.1464346103.git.berto@igalia.com
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Signed-off-by: NMax Reitz <mreitz@redhat.com>
      eb1364ce
    • K
      block: Fix snapshot=on with aio=native · 41869044
      Kevin Wolf 提交于
      snapshot=on creates a temporary overlay that is always opened with
      cache=unsafe (the cache mode specified by the user is only for the
      actual image file and its children). This means that we must not inherit
      the BDRV_O_NATIVE_AIO flag for the temporary overlay because trying to
      use Linux AIO with cache=unsafe results in an error.
      
      Reproducer without this patch:
      
      $ x86_64-softmmu/qemu-system-x86_64 -drive file=/tmp/test.qcow2,cache=none,aio=native,snapshot=on
      qemu-system-x86_64: -drive file=/tmp/test.qcow2,cache=none,aio=native,snapshot=on: aio=native was
      specified, but it requires cache.direct=on, which was not specified.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      41869044
    • K
      block: Remove bs->zero_beyond_eof · c9d20029
      Kevin Wolf 提交于
      It is always true for open images now.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      c9d20029
    • K
      qcow2: Let vmstate call qcow2_co_preadv/pwrite directly · 734a7758
      Kevin Wolf 提交于
      We don't really want to go through the block layer in order to read from
      or write to the vmstate in a qcow2 image. Doing so required a few ugly
      hacks like saving and restoring the old image size (because writing to
      vmstate offsets would increase the image size) or disabling the "reads
      after EOF = zeroes" logic. When calling the right functions directly,
      these hacks aren't necessary any more.
      
      Note that .bdrv_vmstate_load/save() return 0 instead of the number of
      bytes in case of success now.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      734a7758
    • K
      block: Make bdrv_load/save_vmstate coroutine_fns · 1a8ae822
      Kevin Wolf 提交于
      This allows drivers to share code between normal I/O and vmstate
      accesses.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      1a8ae822
    • K
      block: Allow .bdrv_load/save_vmstate() to return 0/-errno · b433d942
      Kevin Wolf 提交于
      The return value of .bdrv_load/save_vmstate() can be any non-negative
      number in case of success now. It used to be bytes/-errno.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      b433d942
    • K
      block: Make .bdrv_load_vmstate() vectored · 5ddda0b8
      Kevin Wolf 提交于
      This brings it in line with .bdrv_save_vmstate().
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      5ddda0b8
    • K
      block: Introduce bdrv_preadv() · f1e84741
      Kevin Wolf 提交于
      We already have a byte-based bdrv_pwritev(), but the read counterpart
      was still missing. This commit adds it.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NFam Zheng <famz@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      f1e84741
    • T
      doc: Fix mailing list address in tests/qemu-iotests/README · 48bea965
      Thomas Huth 提交于
      The address of the mailing list is qemu-devel@nongnu.org
      instead of qemu-devel@savannah.nongnu.org. And while we're
      at it, also mention the qemu-block mailing list here.
      Signed-off-by: NThomas Huth <thuth@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      48bea965
    • K
      linux-aio: Cancel BH if not needed · ccb9dc10
      Kevin Wolf 提交于
      linux-aio uses a BH in order to make sure that the remaining completions
      are processed even in nested event loops of completion callbacks in
      order to avoid deadlocks.
      
      There is no need, however, to have the BH overhead for the first call
      into qemu_laio_completion_bh() or after all pending completions have
      already been processed. Therefore, this patch calls directly into
      qemu_laio_completion_bh() in qemu_laio_completion_cb() and cancels
      the BH after qemu_laio_completion_bh() has processed all pending
      completions.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
      ccb9dc10
    • K
      block: Don't enforce 512 byte minimum alignment · 23b0d9fb
      Kevin Wolf 提交于
      If block drivers say that they can do an alignment < 512 bytes, let's
      just suppose they mean it. raw-posix used to be an offender with respect
      to this, but it can actually deal with byte-aligned requests now.
      
      The default is still 512 bytes for any drivers that only implement
      sector-based interfaces, but it is 1 now for drivers that implement
      .bdrv_co_preadv.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      23b0d9fb
    • K
      raw-posix: Implement .bdrv_co_preadv/pwritev · 9d52aa3c
      Kevin Wolf 提交于
      The raw-posix block driver actually supports byte-aligned requests now
      on non-O_DIRECT images, like it already (and previously incorrectly)
      claimed in bs->request_alignment.
      
      For some block drivers this means that a RMW cycle can be avoided when
      they write sub-sector metadata e.g. for cluster allocation.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      9d52aa3c
    • K
      raw-posix: Switch to bdrv_co_* interfaces · 2174f12b
      Kevin Wolf 提交于
      In order to use the modern byte-based .bdrv_co_preadv/pwritev()
      interface, this patch switches raw-posix to coroutine-based interfaces
      as a first step. In terms of semantics and performance, it doesn't make
      a difference with the existing code whether we go from a coroutine to a
      callback-based interface already in block/io.c or only in linux-aio.c
      
      As there have been concerns in the past that this change may be a step
      in the wrong direction with respect to a possible AIO fast path, the
      old callback-based interface for linux-aio is left around and can be
      reactivated when a fast path (e.g. directly from virtio-blk dataplane,
      bypassing the whole block layer) is implemented.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      2174f12b
    • K
    • K
      block: Prepare bdrv_aligned_preadv() for byte-aligned requests · 49c07526
      Kevin Wolf 提交于
      This patch makes bdrv_aligned_preadv() ready to accept byte-aligned
      requests. Note that this doesn't mean that such requests are actually
      made. The caller still ensures that all requests are aligned to at least
      512 bytes.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      49c07526
    • K
      block: Byte-based bdrv_co_do_copy_on_readv() · 244483e6
      Kevin Wolf 提交于
      In a first step to convert the common I/O path to work on bytes rather
      than sectors, this converts the copy-on-read logic that is used by
      bdrv_aligned_preadv().
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      244483e6
    • D
      block: drop support for using qcow[2] encryption with system emulators · 8c0dcbc4
      Daniel P. Berrange 提交于
      Back in the 2.3.0 release we declared qcow[2] encryption as
      deprecated, warning people that it would be removed in a future
      release.
      
        commit a1f688f4
        Author: Markus Armbruster <armbru@redhat.com>
        Date:   Fri Mar 13 21:09:40 2015 +0100
      
          block: Deprecate QCOW/QCOW2 encryption
      
      The code still exists today, but by a (happy?) accident we entirely
      broke the ability to use qcow[2] encryption in the system emulators
      in the 2.4.0 release due to
      
        commit 8336aafa
        Author: Daniel P. Berrange <berrange@redhat.com>
        Date:   Tue May 12 17:09:18 2015 +0100
      
          qcow2/qcow: protect against uninitialized encryption key
      
      This commit was designed to prevent future coding bugs which
      might cause QEMU to read/write data on an encrypted block
      device in plain text mode before a decryption key is set.
      
      It turns out this preventative measure was a little too good,
      because we already had a long standing bug where QEMU read
      encrypted data in plain text mode during system emulator
      startup, in order to guess disk geometry:
      
        Thread 10 (Thread 0x7fffd3fff700 (LWP 30373)):
        #0  0x00007fffe90b1a28 in raise () at /lib64/libc.so.6
        #1  0x00007fffe90b362a in abort () at /lib64/libc.so.6
        #2  0x00007fffe90aa227 in __assert_fail_base () at /lib64/libc.so.6
        #3  0x00007fffe90aa2d2 in  () at /lib64/libc.so.6
        #4  0x000055555587ae19 in qcow2_co_readv (bs=0x5555562accb0, sector_num=0, remaining_sectors=1, qiov=0x7fffffffd260) at block/qcow2.c:1229
        #5  0x000055555589b60d in bdrv_aligned_preadv (bs=bs@entry=0x5555562accb0, req=req@entry=0x7fffd3ffea50, offset=offset@entry=0, bytes=bytes@entry=512, align=align@entry=512, qiov=qiov@entry=0x7fffffffd260, flags=0) at block/io.c:908
        #6  0x000055555589b8bc in bdrv_co_do_preadv (bs=0x5555562accb0, offset=0, bytes=512, qiov=0x7fffffffd260, flags=<optimized out>) at block/io.c:999
        #7  0x000055555589c375 in bdrv_rw_co_entry (opaque=0x7fffffffd210) at block/io.c:544
        #8  0x000055555586933b in coroutine_thread (opaque=0x555557876310) at coroutine-gthread.c:134
        #9  0x00007ffff64e1835 in g_thread_proxy (data=0x5555562b5590) at gthread.c:778
        #10 0x00007ffff6bb760a in start_thread () at /lib64/libpthread.so.0
        #11 0x00007fffe917f59d in clone () at /lib64/libc.so.6
      
        Thread 1 (Thread 0x7ffff7ecab40 (LWP 30343)):
        #0  0x00007fffe91797a9 in syscall () at /lib64/libc.so.6
        #1  0x00007ffff64ff87f in g_cond_wait (cond=cond@entry=0x555555e085f0 <coroutine_cond>, mutex=mutex@entry=0x555555e08600 <coroutine_lock>) at gthread-posix.c:1397
        #2  0x00005555558692c3 in qemu_coroutine_switch (co=<optimized out>) at coroutine-gthread.c:117
        #3  0x00005555558692c3 in qemu_coroutine_switch (from_=0x5555562b5e30, to_=to_@entry=0x555557876310, action=action@entry=COROUTINE_ENTER) at coroutine-gthread.c:175
        #4  0x0000555555868a90 in qemu_coroutine_enter (co=0x555557876310, opaque=0x0) at qemu-coroutine.c:116
        #5  0x0000555555859b84 in thread_pool_completion_bh (opaque=0x7fffd40010e0) at thread-pool.c:187
        #6  0x0000555555859514 in aio_bh_poll (ctx=ctx@entry=0x5555562953b0) at async.c:85
        #7  0x0000555555864d10 in aio_dispatch (ctx=ctx@entry=0x5555562953b0) at aio-posix.c:135
        #8  0x0000555555864f75 in aio_poll (ctx=ctx@entry=0x5555562953b0, blocking=blocking@entry=true) at aio-posix.c:291
        #9  0x000055555589c40d in bdrv_prwv_co (bs=bs@entry=0x5555562accb0, offset=offset@entry=0, qiov=qiov@entry=0x7fffffffd260, is_write=is_write@entry=false, flags=flags@entry=(unknown: 0)) at block/io.c:591
        #10 0x000055555589c503 in bdrv_rw_co (bs=bs@entry=0x5555562accb0, sector_num=sector_num@entry=0, buf=buf@entry=0x7fffffffd2e0 "\321,", nb_sectors=nb_sectors@entry=21845, is_write=is_write@entry=false, flags=flags@entry=(unknown: 0)) at block/io.c:614
        #11 0x000055555589c562 in bdrv_read_unthrottled (nb_sectors=21845, buf=0x7fffffffd2e0 "\321,", sector_num=0, bs=0x5555562accb0) at block/io.c:622
        #12 0x000055555589c562 in bdrv_read_unthrottled (bs=0x5555562accb0, sector_num=sector_num@entry=0, buf=buf@entry=0x7fffffffd2e0 "\321,", nb_sectors=nb_sectors@entry=21845) at block/io.c:634
          nb_sectors@entry=1) at block/block-backend.c:504
        #14 0x0000555555752e9f in guess_disk_lchs (blk=blk@entry=0x5555562a5290, pcylinders=pcylinders@entry=0x7fffffffd52c, pheads=pheads@entry=0x7fffffffd530, psectors=psectors@entry=0x7fffffffd534) at hw/block/hd-geometry.c:68
        #15 0x0000555555752ff7 in hd_geometry_guess (blk=0x5555562a5290, pcyls=pcyls@entry=0x555557875d1c, pheads=pheads@entry=0x555557875d20, psecs=psecs@entry=0x555557875d24, ptrans=ptrans@entry=0x555557875d28) at hw/block/hd-geometry.c:133
        #16 0x0000555555752b87 in blkconf_geometry (conf=conf@entry=0x555557875d00, ptrans=ptrans@entry=0x555557875d28, cyls_max=cyls_max@entry=65536, heads_max=heads_max@entry=16, secs_max=secs_max@entry=255, errp=errp@entry=0x7fffffffd5e0) at hw/block/block.c:71
        #17 0x0000555555799bc4 in ide_dev_initfn (dev=0x555557875c80, kind=IDE_HD) at hw/ide/qdev.c:174
        #18 0x0000555555768394 in device_realize (dev=0x555557875c80, errp=0x7fffffffd640) at hw/core/qdev.c:247
        #19 0x0000555555769a81 in device_set_realized (obj=0x555557875c80, value=<optimized out>, errp=0x7fffffffd730) at hw/core/qdev.c:1058
        #20 0x00005555558240ce in property_set_bool (obj=0x555557875c80, v=<optimized out>, opaque=0x555557875de0, name=<optimized out>, errp=0x7fffffffd730)
              at qom/object.c:1514
        #21 0x0000555555826c87 in object_property_set_qobject (obj=obj@entry=0x555557875c80, value=value@entry=0x55555784bcb0, name=name@entry=0x55555591cb3d "realized", errp=errp@entry=0x7fffffffd730) at qom/qom-qobject.c:24
        #22 0x0000555555825760 in object_property_set_bool (obj=obj@entry=0x555557875c80, value=value@entry=true, name=name@entry=0x55555591cb3d "realized", errp=errp@entry=0x7fffffffd730) at qom/object.c:905
        #23 0x000055555576897b in qdev_init_nofail (dev=dev@entry=0x555557875c80) at hw/core/qdev.c:380
        #24 0x0000555555799ead in ide_create_drive (bus=bus@entry=0x555557629630, unit=unit@entry=0, drive=0x5555562b77e0) at hw/ide/qdev.c:122
        #25 0x000055555579a746 in pci_ide_create_devs (dev=dev@entry=0x555557628db0, hd_table=hd_table@entry=0x7fffffffd830) at hw/ide/pci.c:440
        #26 0x000055555579b165 in pci_piix3_ide_init (bus=<optimized out>, hd_table=0x7fffffffd830, devfn=<optimized out>) at hw/ide/piix.c:218
        #27 0x000055555568ca55 in pc_init1 (machine=0x5555562960a0, pci_enabled=1, kvmclock_enabled=<optimized out>) at /home/berrange/src/virt/qemu/hw/i386/pc_piix.c:256
        #28 0x0000555555603ab2 in main (argc=<optimized out>, argv=<optimized out>, envp=<optimized out>) at vl.c:4249
      
      So the safety net is correctly preventing QEMU reading cipher
      text as if it were plain text, during startup and aborting QEMU
      to avoid bad usage of this data.
      
      For added fun this bug only happens if the encrypted qcow2
      file happens to have data written to the first cluster,
      otherwise the cluster won't be allocated and so qcow2 would
      not try the decryption routines at all, just return all 0's.
      
      That no one even noticed, let alone reported, this bug that
      has shipped in 2.4.0, 2.5.0 and 2.6.0 shows that the number
      of actual users of encrypted qcow2 is approximately zero.
      
      So rather than fix the crash, and backport it to stable
      releases, just go ahead with what we have warned users about
      and disable any use of qcow2 encryption in the system
      emulators. qemu-img/qemu-io/qemu-nbd are still able to access
      qcow2 encrypted images for the sake of data conversion.
      
      In the future, qcow2 will gain support for the alternative
      luks format, but when this happens it'll be using the
      '-object secret' infrastructure for getting keys, which
      avoids this problematic scenario entirely.
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      8c0dcbc4
    • E
      block: Assert that flags are in range · fa166538
      Eric Blake 提交于
      Add a new BDRV_REQ_MASK constant, and use it to make sure that
      caller flags are always valid.
      
      Tested with 'make check' and with qemu-iotests on both '-raw'
      and '-qcow2'; the only failure turned up was fixed in the
      previous commit.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      fa166538
    • E
      block: Avoid bogus flags during mirroring · 73698c30
      Eric Blake 提交于
      Commit e253f4b8 converted mirroring from sector-based bdrv_aio_*
      to byte-based blk_aio_*, but failed to account for the subtle
      difference in signatures (the former takes a semi-redundant length,
      the latter takes a flags parameter).  Since all of our flags are
      currently smaller in size than BDRV_SECTOR_SIZE, it has no ill
      effects until we either perform sub-sector mirroring, or we start
      asserting that no unexpected flags are set.  I found it while
      testing new asserts when qemu-iotests 132 started warning about an
      unknown flag 0x200000.
      Signed-off-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      73698c30
    • K
      qemu-img bench: Fix uninitialised writethrough mode · 604e8613
      Kevin Wolf 提交于
      If no -t option is specified, bool writethrough stayed uninitialised.
      Initialise it as false, which makes cache=writeback the default cache
      mode.
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      Reviewed-by: NMax Reitz <mreitz@redhat.com>
      Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
      604e8613
    • C
      m25p80: fix test on blk_pread() return value · 9e19036e
      Cédric Le Goater 提交于
      commit 243e6f69 ("m25p80: Switch to byte-based block access")
      replaced blk_read() calls with blk_pread() but return values are
      different.
      Signed-off-by: NCédric Le Goater <clg@kaod.org>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      9e19036e
    • V
      hmp: acquire aio_context in hmp_qemu_io · 479b5998
      Vladimir Sementsov-Ogievskiy 提交于
      Acquire aio context before run command, this is mandatory for unit tests.
      Signed-off-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
      Signed-off-by: NDenis V. Lunev <den@openvz.org>
      CC: Kevin Wolf <kwolf@redhat.com>
      CC: Paolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      479b5998
    • C
      blockdev: clarify error on attempt to open locked tray · 38a53d50
      Colin Lord 提交于
      When opening a device with a locked tray, gives an error explaining the
      device tray is locked and that the user should wait and try again. This
      is less confusing than the previous error, which simply stated that the
      tray was locked.
      Signed-off-by: NColin Lord <clord@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      38a53d50