* [Qemu-devel] [PULL 00/12] Block patches
@ 2011-06-08 13:48 Kevin Wolf
2011-06-09 12:39 ` Anthony Liguori
0 siblings, 1 reply; 39+ messages in thread
From: Kevin Wolf @ 2011-06-08 13:48 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit a90d4690074526f54ad0851fce19fa6783f06803:
Add an isa device for SGA (2011-06-07 13:52:30 -0500)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Alexander Graf (1):
vmdk: fix endianness bugs
Christoph Egger (2):
block/raw-posix: use a character device if a block device is given
block/raw-posix: get right partition size
Christoph Hellwig (1):
block: clarify the meaning of BDRV_O_NOCACHE
Josh Durgin (4):
rbd: use the higher level librbd instead of just librados
rbd: allow configuration of rados from the rbd filename
rbd: check return values when scheduling aio
rbd: Add bdrv_truncate implementation
Kevin Wolf (4):
ide/core: Remove explicit setting of BM_STATUS_INT
qcow2: Fix memory leaks in error cases
bdrv_img_create: Fix segfault
qemu-img create: Fix displayed default cluster size
block.c | 13 +-
block/qcow2-cluster.c | 2 +-
block/qcow2-refcount.c | 9 +-
block/qcow2.c | 7 +-
block/qcow2.h | 2 +
block/qed.c | 3 +-
block/raw-posix.c | 77 ++++-
block/raw-win32.c | 12 +-
block/rbd.c | 896 ++++++++++++++++++------------------------------
block/rbd_types.h | 71 ----
block/vdi.c | 6 +-
block/vmdk.c | 22 +-
blockdev.c | 2 +-
configure | 33 +--
hw/ide/core.c | 7 +-
qemu-io.c | 4 +-
qemu-nbd.c | 2 +-
17 files changed, 461 insertions(+), 707 deletions(-)
delete mode 100644 block/rbd_types.h
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2011-06-08 13:48 Kevin Wolf
@ 2011-06-09 12:39 ` Anthony Liguori
0 siblings, 0 replies; 39+ messages in thread
From: Anthony Liguori @ 2011-06-09 12:39 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 06/08/2011 08:48 AM, Kevin Wolf wrote:
> The following changes since commit a90d4690074526f54ad0851fce19fa6783f06803:
>
> Add an isa device for SGA (2011-06-07 13:52:30 -0500)
>
> are available in the git repository at:
> git://repo.or.cz/qemu/kevin.git for-anthony
Pulled. Thanks.
Regards,
Anthony Liguori
>
> Alexander Graf (1):
> vmdk: fix endianness bugs
>
> Christoph Egger (2):
> block/raw-posix: use a character device if a block device is given
> block/raw-posix: get right partition size
>
> Christoph Hellwig (1):
> block: clarify the meaning of BDRV_O_NOCACHE
>
> Josh Durgin (4):
> rbd: use the higher level librbd instead of just librados
> rbd: allow configuration of rados from the rbd filename
> rbd: check return values when scheduling aio
> rbd: Add bdrv_truncate implementation
>
> Kevin Wolf (4):
> ide/core: Remove explicit setting of BM_STATUS_INT
> qcow2: Fix memory leaks in error cases
> bdrv_img_create: Fix segfault
> qemu-img create: Fix displayed default cluster size
>
> block.c | 13 +-
> block/qcow2-cluster.c | 2 +-
> block/qcow2-refcount.c | 9 +-
> block/qcow2.c | 7 +-
> block/qcow2.h | 2 +
> block/qed.c | 3 +-
> block/raw-posix.c | 77 ++++-
> block/raw-win32.c | 12 +-
> block/rbd.c | 896 ++++++++++++++++++------------------------------
> block/rbd_types.h | 71 ----
> block/vdi.c | 6 +-
> block/vmdk.c | 22 +-
> blockdev.c | 2 +-
> configure | 33 +--
> hw/ide/core.c | 7 +-
> qemu-io.c | 4 +-
> qemu-nbd.c | 2 +-
> 17 files changed, 461 insertions(+), 707 deletions(-)
> delete mode 100644 block/rbd_types.h
>
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2012-06-04 11:13 Kevin Wolf
2012-06-07 1:17 ` Anthony Liguori
0 siblings, 1 reply; 39+ messages in thread
From: Kevin Wolf @ 2012-06-04 11:13 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 8cc9b43f7c5f826b39af4b012ad89bb55faac29c:
target-microblaze: lwx/swx: first implementation (2012-06-04 10:19:46 +0200)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Josh Durgin (1):
rbd: hook up cache options
Kevin Wolf (3):
qemu-img check -r for repairing images
qemu-img check: Print fixed clusters and recheck
qcow2: Support for fixing refcount inconsistencies
MORITA Kazutaka (1):
sheepdog: add coroutine_fn markers to coroutine functions
Markus Armbruster (1):
Un-inline fdctrl_init_isa()
Paolo Bonzini (4):
block: implement is_allocated for raw
stream: tweak usage of bdrv_co_is_allocated
stream: move is_allocated_above to block.c
stream: move rate limiting to a separate header file
Zhi Yong Wu (2):
qcow2: remove a line of unnecessary code
qcow2: fix the byte endian convertion
block.c | 53 +++++++++++++++++++++-
block.h | 13 +++++-
block/qcow2-cluster.c | 1 -
block/qcow2-refcount.c | 33 ++++++++++++--
block/qcow2.c | 5 +-
block/qcow2.h | 3 +-
block/qed-check.c | 2 +
block/qed.c | 5 +-
block/raw-posix.c | 98 +++++++++++++++++++++++++++++++++++++++++
block/raw.c | 8 +++
block/rbd.c | 19 ++++++++
block/sheepdog.c | 9 ++--
block/stream.c | 109 +++++++---------------------------------------
block/vdi.c | 7 +++-
block_int.h | 3 +-
hw/fdc.c | 20 ++++++++
hw/fdc.h | 24 +---------
hw/ide/piix.c | 3 +-
hw/isa.h | 2 -
hw/pc_sysfw.c | 1 +
include/qemu/ratelimit.h | 48 ++++++++++++++++++++
qemu-common.h | 1 +
qemu-img-cmds.hx | 4 +-
qemu-img.c | 35 +++++++++++++-
qemu-img.texi | 7 +++-
25 files changed, 369 insertions(+), 144 deletions(-)
create mode 100644 include/qemu/ratelimit.h
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2012-06-04 11:13 Kevin Wolf
@ 2012-06-07 1:17 ` Anthony Liguori
2012-06-08 9:48 ` Kevin Wolf
0 siblings, 1 reply; 39+ messages in thread
From: Anthony Liguori @ 2012-06-07 1:17 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 06/04/2012 07:13 PM, Kevin Wolf wrote:
> The following changes since commit 8cc9b43f7c5f826b39af4b012ad89bb55faac29c:
>
> target-microblaze: lwx/swx: first implementation (2012-06-04 10:19:46 +0200)
>
> are available in the git repository at:
> git://repo.or.cz/qemu/kevin.git for-anthony
Pulled. Thanks.
Regards,
Anthony Liguori
>
> Josh Durgin (1):
> rbd: hook up cache options
>
> Kevin Wolf (3):
> qemu-img check -r for repairing images
> qemu-img check: Print fixed clusters and recheck
> qcow2: Support for fixing refcount inconsistencies
>
> MORITA Kazutaka (1):
> sheepdog: add coroutine_fn markers to coroutine functions
>
> Markus Armbruster (1):
> Un-inline fdctrl_init_isa()
>
> Paolo Bonzini (4):
> block: implement is_allocated for raw
> stream: tweak usage of bdrv_co_is_allocated
> stream: move is_allocated_above to block.c
> stream: move rate limiting to a separate header file
>
> Zhi Yong Wu (2):
> qcow2: remove a line of unnecessary code
> qcow2: fix the byte endian convertion
>
> block.c | 53 +++++++++++++++++++++-
> block.h | 13 +++++-
> block/qcow2-cluster.c | 1 -
> block/qcow2-refcount.c | 33 ++++++++++++--
> block/qcow2.c | 5 +-
> block/qcow2.h | 3 +-
> block/qed-check.c | 2 +
> block/qed.c | 5 +-
> block/raw-posix.c | 98 +++++++++++++++++++++++++++++++++++++++++
> block/raw.c | 8 +++
> block/rbd.c | 19 ++++++++
> block/sheepdog.c | 9 ++--
> block/stream.c | 109 +++++++---------------------------------------
> block/vdi.c | 7 +++-
> block_int.h | 3 +-
> hw/fdc.c | 20 ++++++++
> hw/fdc.h | 24 +---------
> hw/ide/piix.c | 3 +-
> hw/isa.h | 2 -
> hw/pc_sysfw.c | 1 +
> include/qemu/ratelimit.h | 48 ++++++++++++++++++++
> qemu-common.h | 1 +
> qemu-img-cmds.hx | 4 +-
> qemu-img.c | 35 +++++++++++++-
> qemu-img.texi | 7 +++-
> 25 files changed, 369 insertions(+), 144 deletions(-)
> create mode 100644 include/qemu/ratelimit.h
>
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2012-06-07 1:17 ` Anthony Liguori
@ 2012-06-08 9:48 ` Kevin Wolf
2012-06-08 14:07 ` Anthony Liguori
0 siblings, 1 reply; 39+ messages in thread
From: Kevin Wolf @ 2012-06-08 9:48 UTC (permalink / raw)
To: Anthony Liguori; +Cc: qemu-devel
Am 07.06.2012 03:17, schrieb Anthony Liguori:
> On 06/04/2012 07:13 PM, Kevin Wolf wrote:
>> The following changes since commit 8cc9b43f7c5f826b39af4b012ad89bb55faac29c:
>>
>> target-microblaze: lwx/swx: first implementation (2012-06-04 10:19:46 +0200)
>>
>> are available in the git repository at:
>> git://repo.or.cz/qemu/kevin.git for-anthony
>
> Pulled. Thanks.
But not pushed?
Kevin
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2012-06-08 9:48 ` Kevin Wolf
@ 2012-06-08 14:07 ` Anthony Liguori
2012-06-08 14:57 ` Kevin Wolf
0 siblings, 1 reply; 39+ messages in thread
From: Anthony Liguori @ 2012-06-08 14:07 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 06/08/2012 05:48 PM, Kevin Wolf wrote:
> Am 07.06.2012 03:17, schrieb Anthony Liguori:
>> On 06/04/2012 07:13 PM, Kevin Wolf wrote:
>>> The following changes since commit 8cc9b43f7c5f826b39af4b012ad89bb55faac29c:
>>>
>>> target-microblaze: lwx/swx: first implementation (2012-06-04 10:19:46 +0200)
>>>
>>> are available in the git repository at:
>>> git://repo.or.cz/qemu/kevin.git for-anthony
>>
>> Pulled. Thanks.
>
> But not pushed?
I'm having a really hard time connecting to repo.or.cz here. Looks like I
mistook a timeout for success and mistakenly merged nothing.
I'm still having trouble getting to repo.or.cz. I'll be back in the States
Saturday evening so will process this pull Sunday or Monday.
Do you want to update the branch in the interim to fix the build issue?
Regards,
Anthony Liguori
>
> Kevin
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2012-06-08 14:07 ` Anthony Liguori
@ 2012-06-08 14:57 ` Kevin Wolf
0 siblings, 0 replies; 39+ messages in thread
From: Kevin Wolf @ 2012-06-08 14:57 UTC (permalink / raw)
To: Anthony Liguori; +Cc: qemu-devel
Am 08.06.2012 16:07, schrieb Anthony Liguori:
> On 06/08/2012 05:48 PM, Kevin Wolf wrote:
>> Am 07.06.2012 03:17, schrieb Anthony Liguori:
>>> On 06/04/2012 07:13 PM, Kevin Wolf wrote:
>>>> The following changes since commit 8cc9b43f7c5f826b39af4b012ad89bb55faac29c:
>>>>
>>>> target-microblaze: lwx/swx: first implementation (2012-06-04 10:19:46 +0200)
>>>>
>>>> are available in the git repository at:
>>>> git://repo.or.cz/qemu/kevin.git for-anthony
>>>
>>> Pulled. Thanks.
>>
>> But not pushed?
>
> I'm having a really hard time connecting to repo.or.cz here. Looks like I
> mistook a timeout for success and mistakenly merged nothing.
>
> I'm still having trouble getting to repo.or.cz. I'll be back in the States
> Saturday evening so will process this pull Sunday or Monday.
Hm, when repo.or.cz started behaving bad, I started to use things like
'while ! git fetch repo.or.cz; do sleep 1; done' (it would always
succeed after a few attempts), but recently it never needed more than
one attempt.
> Do you want to update the branch in the interim to fix the build issue?
Sure, updated it now.
Kevin
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2012-08-06 20:44 Kevin Wolf
2012-08-07 8:28 ` Paolo Bonzini
2012-08-07 15:36 ` Anthony Liguori
0 siblings, 2 replies; 39+ messages in thread
From: Kevin Wolf @ 2012-08-06 20:44 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 26b9b5fe17cc1b6be2e8bf8b9d16094f420bb8ad:
virtio: fix vhost handling (2012-08-06 14:01:44 -0500)
are available in the git repository at:
http://repo.or.cz/r/qemu/kevin.git for-anthony
Dong Xu Wang (1):
qemu-img: use QemuOpts instead of QEMUOptionParameter in resize function
Kevin Wolf (1):
qemu-iotests: Be more flexible with image creation options
Markus Armbruster (1):
ide scsi: Mess with geometry only for hard disk devices
Paolo Bonzini (1):
qapi: generalize documentation of streaming commands
Stefan Hajnoczi (8):
qemu-iotests: add qed.py image manipulation utility
docs: add dirty bit to qcow2 specification
qcow2: introduce dirty bit
docs: add lazy refcounts bit to qcow2 specification
qemu-iotests: ignore qemu-img create lazy_refcounts output
qcow2: implement lazy refcounts
qemu-io: add "abort" command to simulate program crash
qemu-iotests: add 039 qcow2 lazy refcounts test
block/qcow2-cluster.c | 5 +-
block/qcow2.c | 123 +++++++++++++++++++++--
block/qcow2.h | 21 ++++
block_int.h | 26 +++--
docs/specs/qcow2.txt | 14 ++-
hmp-commands.hx | 2 +-
hw/ide/qdev.c | 3 +-
hw/scsi-disk.c | 3 +-
qapi-schema.json | 17 ++--
qemu-img.c | 28 +++--
qemu-io.c | 12 ++
tests/qemu-iotests/031.out | 20 ++--
tests/qemu-iotests/036.out | 4 +-
tests/qemu-iotests/039 | 136 ++++++++++++++++++++++++
tests/qemu-iotests/039.out | 53 ++++++++++
tests/qemu-iotests/common.rc | 7 +-
tests/qemu-iotests/group | 1 +
tests/qemu-iotests/qed.py | 235 ++++++++++++++++++++++++++++++++++++++++++
18 files changed, 650 insertions(+), 60 deletions(-)
create mode 100755 tests/qemu-iotests/039
create mode 100644 tests/qemu-iotests/039.out
create mode 100755 tests/qemu-iotests/qed.py
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2012-08-06 20:44 Kevin Wolf
@ 2012-08-07 8:28 ` Paolo Bonzini
2012-08-07 15:36 ` Anthony Liguori
1 sibling, 0 replies; 39+ messages in thread
From: Paolo Bonzini @ 2012-08-07 8:28 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel, anthony
Il 06/08/2012 22:44, Kevin Wolf ha scritto:
> The following changes since commit 26b9b5fe17cc1b6be2e8bf8b9d16094f420bb8ad:
>
> virtio: fix vhost handling (2012-08-06 14:01:44 -0500)
I see the virtio caching patches are not included, should I resubmit
them together with the change of the default from writethrough to writeback?
Paolo
> are available in the git repository at:
> http://repo.or.cz/r/qemu/kevin.git for-anthony
>
> Dong Xu Wang (1):
> qemu-img: use QemuOpts instead of QEMUOptionParameter in resize function
>
> Kevin Wolf (1):
> qemu-iotests: Be more flexible with image creation options
>
> Markus Armbruster (1):
> ide scsi: Mess with geometry only for hard disk devices
>
> Paolo Bonzini (1):
> qapi: generalize documentation of streaming commands
>
> Stefan Hajnoczi (8):
> qemu-iotests: add qed.py image manipulation utility
> docs: add dirty bit to qcow2 specification
> qcow2: introduce dirty bit
> docs: add lazy refcounts bit to qcow2 specification
> qemu-iotests: ignore qemu-img create lazy_refcounts output
> qcow2: implement lazy refcounts
> qemu-io: add "abort" command to simulate program crash
> qemu-iotests: add 039 qcow2 lazy refcounts test
>
> block/qcow2-cluster.c | 5 +-
> block/qcow2.c | 123 +++++++++++++++++++++--
> block/qcow2.h | 21 ++++
> block_int.h | 26 +++--
> docs/specs/qcow2.txt | 14 ++-
> hmp-commands.hx | 2 +-
> hw/ide/qdev.c | 3 +-
> hw/scsi-disk.c | 3 +-
> qapi-schema.json | 17 ++--
> qemu-img.c | 28 +++--
> qemu-io.c | 12 ++
> tests/qemu-iotests/031.out | 20 ++--
> tests/qemu-iotests/036.out | 4 +-
> tests/qemu-iotests/039 | 136 ++++++++++++++++++++++++
> tests/qemu-iotests/039.out | 53 ++++++++++
> tests/qemu-iotests/common.rc | 7 +-
> tests/qemu-iotests/group | 1 +
> tests/qemu-iotests/qed.py | 235 ++++++++++++++++++++++++++++++++++++++++++
> 18 files changed, 650 insertions(+), 60 deletions(-)
> create mode 100755 tests/qemu-iotests/039
> create mode 100644 tests/qemu-iotests/039.out
> create mode 100755 tests/qemu-iotests/qed.py
>
>
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2012-08-06 20:44 Kevin Wolf
2012-08-07 8:28 ` Paolo Bonzini
@ 2012-08-07 15:36 ` Anthony Liguori
1 sibling, 0 replies; 39+ messages in thread
From: Anthony Liguori @ 2012-08-07 15:36 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
Kevin Wolf <kwolf@redhat.com> writes:
> The following changes since commit 26b9b5fe17cc1b6be2e8bf8b9d16094f420bb8ad:
>
> virtio: fix vhost handling (2012-08-06 14:01:44 -0500)
>
> are available in the git repository at:
> http://repo.or.cz/r/qemu/kevin.git for-anthony
Pulled. Thanks.
Regards,
Anthony Liguori
>
> Dong Xu Wang (1):
> qemu-img: use QemuOpts instead of QEMUOptionParameter in resize function
>
> Kevin Wolf (1):
> qemu-iotests: Be more flexible with image creation options
>
> Markus Armbruster (1):
> ide scsi: Mess with geometry only for hard disk devices
>
> Paolo Bonzini (1):
> qapi: generalize documentation of streaming commands
>
> Stefan Hajnoczi (8):
> qemu-iotests: add qed.py image manipulation utility
> docs: add dirty bit to qcow2 specification
> qcow2: introduce dirty bit
> docs: add lazy refcounts bit to qcow2 specification
> qemu-iotests: ignore qemu-img create lazy_refcounts output
> qcow2: implement lazy refcounts
> qemu-io: add "abort" command to simulate program crash
> qemu-iotests: add 039 qcow2 lazy refcounts test
>
> block/qcow2-cluster.c | 5 +-
> block/qcow2.c | 123 +++++++++++++++++++++--
> block/qcow2.h | 21 ++++
> block_int.h | 26 +++--
> docs/specs/qcow2.txt | 14 ++-
> hmp-commands.hx | 2 +-
> hw/ide/qdev.c | 3 +-
> hw/scsi-disk.c | 3 +-
> qapi-schema.json | 17 ++--
> qemu-img.c | 28 +++--
> qemu-io.c | 12 ++
> tests/qemu-iotests/031.out | 20 ++--
> tests/qemu-iotests/036.out | 4 +-
> tests/qemu-iotests/039 | 136 ++++++++++++++++++++++++
> tests/qemu-iotests/039.out | 53 ++++++++++
> tests/qemu-iotests/common.rc | 7 +-
> tests/qemu-iotests/group | 1 +
> tests/qemu-iotests/qed.py | 235 ++++++++++++++++++++++++++++++++++++++++++
> 18 files changed, 650 insertions(+), 60 deletions(-)
> create mode 100755 tests/qemu-iotests/039
> create mode 100644 tests/qemu-iotests/039.out
> create mode 100755 tests/qemu-iotests/qed.py
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2015-01-23 18:20 Kevin Wolf
2015-01-26 10:16 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Kevin Wolf @ 2015-01-23 18:20 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf
The following changes since commit c6441452b50c44fdbb362b239ce623f77cf3cd51:
Merge remote-tracking branch 'remotes/kraxel/tags/pull-audio-20150122-1' into staging (2015-01-22 18:57:36 +0000)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to bc63781ca350cad4c9eb142ce8f55bfaded4276e:
Merge remote-tracking branch 'mreitz/block' into queue-block (2015-01-23 18:51:47 +0100)
----------------------------------------------------------------
Block patches for 2.3
----------------------------------------------------------------
Fam Zheng (2):
virtio-blk: Pass req to virtio_blk_handle_scsi_req
virtio-blk: Use blk_aio_ioctl
Jeff Cody (7):
block: vmdk - make ret variable usage clear
block: vmdk - move string allocations from stack to the heap
block: qapi - move string allocation from stack to the heap
block: remove unused variable in bdrv_commit
block: mirror - change string allocation to 2-bytes
block: update string sizes for filename,backing_file,exact_filename
block: vhdx - force FileOffsetMB field to '0' for certain block states
Kevin Wolf (1):
Merge remote-tracking branch 'mreitz/block' into queue-block
Max Reitz (3):
qcow2: Add two more unalignment checks
iotests: Add tests for more corruption cases
iotests: Lower 064's memory usage
block.c | 3 -
block/mirror.c | 3 +-
block/qapi.c | 7 ++-
block/qcow.c | 2 +-
block/qcow2-cluster.c | 21 +++++++
block/qcow2.c | 3 +-
block/vhdx.c | 13 +++-
block/vmdk.c | 51 +++++++++-------
block/vvfat.c | 4 +-
hw/block/virtio-blk.c | 134 ++++++++++++++++++++++++++---------------
include/block/block_int.h | 8 +--
include/hw/virtio/virtio-blk.h | 3 -
qemu-img.c | 4 +-
tests/qemu-iotests/060 | 15 +++++
tests/qemu-iotests/060.out | 13 ++++
tests/qemu-iotests/064 | 19 +++++-
tests/qemu-iotests/064.out | 34 +++++++++--
17 files changed, 239 insertions(+), 98 deletions(-)
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2015-01-23 18:20 Kevin Wolf
@ 2015-01-26 10:16 ` Peter Maydell
0 siblings, 0 replies; 39+ messages in thread
From: Peter Maydell @ 2015-01-26 10:16 UTC (permalink / raw)
To: Kevin Wolf; +Cc: QEMU Developers
On 23 January 2015 at 18:20, Kevin Wolf <kwolf@redhat.com> wrote:
> The following changes since commit c6441452b50c44fdbb362b239ce623f77cf3cd51:
>
> Merge remote-tracking branch 'remotes/kraxel/tags/pull-audio-20150122-1' into staging (2015-01-22 18:57:36 +0000)
>
> are available in the git repository at:
>
>
> git://repo.or.cz/qemu/kevin.git tags/for-upstream
>
> for you to fetch changes up to bc63781ca350cad4c9eb142ce8f55bfaded4276e:
>
> Merge remote-tracking branch 'mreitz/block' into queue-block (2015-01-23 18:51:47 +0100)
>
> ----------------------------------------------------------------
>
> Block patches for 2.3
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2015-10-29 18:09 Stefan Hajnoczi
2015-10-30 9:40 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Stefan Hajnoczi @ 2015-10-29 18:09 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
The following changes since commit 7bc8e0c967a4ef77657174d28af775691e18b4ce:
Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-10-29 09:49:52 +0000)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 37a639a7fbc5c6b065c80e7e2de78d22af735496:
block: Consider all child nodes in bdrv_requests_pending() (2015-10-29 17:59:27 +0000)
----------------------------------------------------------------
----------------------------------------------------------------
Cornelia Huck (3):
s390x: include HW_COMPAT_* props
ppc/spapr: add 2.4 compat props
virtio-blk: switch off scsi-passthrough by default
Dr. David Alan Gilbert (1):
gdb command: qemu handlers
Kevin Wolf (1):
block: Consider all child nodes in bdrv_requests_pending()
Paolo Bonzini (3):
qemu-gdb: allow using glibc_pointer_guard() on core dumps
qemu-gdb: extract parts of "qemu coroutine" implementation
qemu-gdb: add $qemu_coroutine_sp and $qemu_coroutine_pc
Pavel Butsykin (1):
virtio: sync the dataplane vring state to the virtqueue before
virtio_save
Sai Pavan Boddu (3):
sd.h: Move sd.h to include/hw/sd/
sdhci: Split sdhci.h for public and internal device usage
target-arm: xlnx-zynqmp: Add sdhci support.
block/io.c | 13 +-
hw/arm/xlnx-zynqmp.c | 28 ++++
hw/block/virtio-blk.c | 7 +-
hw/ppc/spapr.c | 9 ++
hw/s390x/s390-virtio-ccw.c | 2 +
hw/scsi/virtio-scsi.c | 5 +
hw/sd/milkymist-memcard.c | 2 +-
hw/sd/omap_mmc.c | 2 +-
hw/sd/pl181.c | 2 +-
hw/sd/pxa2xx_mmci.c | 2 +-
hw/sd/sd.c | 2 +-
hw/sd/sdhci-internal.h | 232 +++++++++++++++++++++++++++++++++
hw/sd/sdhci.c | 3 +-
hw/sd/sdhci.h | 297 -------------------------------------------
hw/sd/ssi-sd.c | 2 +-
include/hw/arm/xlnx-zynqmp.h | 3 +
include/hw/compat.h | 6 +-
include/hw/sd.h | 80 ------------
include/hw/sd/sd.h | 80 ++++++++++++
include/hw/sd/sdhci.h | 94 ++++++++++++++
scripts/qemu-gdb.py | 6 +-
scripts/qemugdb/aio.py | 58 +++++++++
scripts/qemugdb/coroutine.py | 90 ++++++++-----
23 files changed, 601 insertions(+), 424 deletions(-)
create mode 100644 hw/sd/sdhci-internal.h
delete mode 100644 hw/sd/sdhci.h
delete mode 100644 include/hw/sd.h
create mode 100644 include/hw/sd/sd.h
create mode 100644 include/hw/sd/sdhci.h
create mode 100644 scripts/qemugdb/aio.py
--
2.4.3
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2015-10-29 18:09 Stefan Hajnoczi
@ 2015-10-30 9:40 ` Peter Maydell
2015-10-30 14:19 ` Markus Armbruster
0 siblings, 1 reply; 39+ messages in thread
From: Peter Maydell @ 2015-10-30 9:40 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 29 October 2015 at 18:09, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 7bc8e0c967a4ef77657174d28af775691e18b4ce:
>
> Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into staging (2015-10-29 09:49:52 +0000)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 37a639a7fbc5c6b065c80e7e2de78d22af735496:
>
> block: Consider all child nodes in bdrv_requests_pending() (2015-10-29 17:59:27 +0000)
>
> ----------------------------------------------------------------
>
> ----------------------------------------------------------------
I get an error on 64-bit ARM running the ivshmem tests:
TEST: tests/ivshmem-test... (pid=22948)
/i386/ivshmem/single: OK
/i386/ivshmem/pair: OK
/i386/ivshmem/server: **
ERROR:/home/petmay01/qemu/tests/ivshmem-test.c:345:test_ivshmem_server:
assertion failed (ret != 0): (0 != 0)
FAIL
GTester: last random seed: R02S51e68a84790014e86af5b8b7264d3e39
(pid=23709)
/i386/ivshmem/hotplug: OK
/i386/ivshmem/memdev: OK
FAIL: tests/ivshmem-test
Nothing obviously related in this patchset that would cause that,
though...
thanks
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2015-10-30 9:40 ` Peter Maydell
@ 2015-10-30 14:19 ` Markus Armbruster
2015-10-30 17:37 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Markus Armbruster @ 2015-10-30 14:19 UTC (permalink / raw)
To: Peter Maydell; +Cc: QEMU Developers, Stefan Hajnoczi
Peter Maydell <peter.maydell@linaro.org> writes:
> On 29 October 2015 at 18:09, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>> The following changes since commit 7bc8e0c967a4ef77657174d28af775691e18b4ce:
>>
>> Merge remote-tracking branch 'remotes/mst/tags/for_upstream' into
>> staging (2015-10-29 09:49:52 +0000)
>>
>> are available in the git repository at:
>>
>> git://github.com/stefanha/qemu.git tags/block-pull-request
>>
>> for you to fetch changes up to 37a639a7fbc5c6b065c80e7e2de78d22af735496:
>>
>> block: Consider all child nodes in bdrv_requests_pending()
>> (2015-10-29 17:59:27 +0000)
>>
>> ----------------------------------------------------------------
>>
>> ----------------------------------------------------------------
>
> I get an error on 64-bit ARM running the ivshmem tests:
>
> TEST: tests/ivshmem-test... (pid=22948)
> /i386/ivshmem/single: OK
> /i386/ivshmem/pair: OK
> /i386/ivshmem/server: **
> ERROR:/home/petmay01/qemu/tests/ivshmem-test.c:345:test_ivshmem_server:
> assertion failed (ret != 0): (0 != 0)
> FAIL
> GTester: last random seed: R02S51e68a84790014e86af5b8b7264d3e39
> (pid=23709)
> /i386/ivshmem/hotplug: OK
> /i386/ivshmem/memdev: OK
> FAIL: tests/ivshmem-test
>
> Nothing obviously related in this patchset that would cause that,
> though...
I've seen this, too, but throwing away my build tree made it go away, so
I blamed "make choking on stale build tree" syndrome. Perhaps it's an
intermittent ivshmem bug instead.
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2015-10-30 14:19 ` Markus Armbruster
@ 2015-10-30 17:37 ` Peter Maydell
2015-10-30 21:59 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Peter Maydell @ 2015-10-30 17:37 UTC (permalink / raw)
To: Markus Armbruster; +Cc: QEMU Developers, Stefan Hajnoczi
On 30 October 2015 at 14:19, Markus Armbruster <armbru@redhat.com> wrote:
> Peter Maydell <peter.maydell@linaro.org> writes:
>> I get an error on 64-bit ARM running the ivshmem tests:
>>
>> TEST: tests/ivshmem-test... (pid=22948)
>> /i386/ivshmem/single: OK
>> /i386/ivshmem/pair: OK
>> /i386/ivshmem/server: **
>> ERROR:/home/petmay01/qemu/tests/ivshmem-test.c:345:test_ivshmem_server:
>> assertion failed (ret != 0): (0 != 0)
>> FAIL
>> GTester: last random seed: R02S51e68a84790014e86af5b8b7264d3e39
>> (pid=23709)
>> /i386/ivshmem/hotplug: OK
>> /i386/ivshmem/memdev: OK
>> FAIL: tests/ivshmem-test
>>
>> Nothing obviously related in this patchset that would cause that,
>> though...
>
> I've seen this, too, but throwing away my build tree made it go away, so
> I blamed "make choking on stale build tree" syndrome. Perhaps it's an
> intermittent ivshmem bug instead.
I didn't do a make clean before successfully applying other pulls,
so I think my money is on "intermittent ivshmem issue". I'll have
another go with this one once I've finished the rest of the queue...
thanks
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2015-10-30 17:37 ` Peter Maydell
@ 2015-10-30 21:59 ` Peter Maydell
0 siblings, 0 replies; 39+ messages in thread
From: Peter Maydell @ 2015-10-30 21:59 UTC (permalink / raw)
To: Markus Armbruster; +Cc: QEMU Developers, Stefan Hajnoczi
On 30 October 2015 at 17:37, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 30 October 2015 at 14:19, Markus Armbruster <armbru@redhat.com> wrote:
>> Peter Maydell <peter.maydell@linaro.org> writes:
>>> I get an error on 64-bit ARM running the ivshmem tests:
>>>
>>> TEST: tests/ivshmem-test... (pid=22948)
>>> /i386/ivshmem/single: OK
>>> /i386/ivshmem/pair: OK
>>> /i386/ivshmem/server: **
>>> ERROR:/home/petmay01/qemu/tests/ivshmem-test.c:345:test_ivshmem_server:
>>> assertion failed (ret != 0): (0 != 0)
>>> FAIL
>>> GTester: last random seed: R02S51e68a84790014e86af5b8b7264d3e39
>>> (pid=23709)
>>> /i386/ivshmem/hotplug: OK
>>> /i386/ivshmem/memdev: OK
>>> FAIL: tests/ivshmem-test
>>>
>>> Nothing obviously related in this patchset that would cause that,
>>> though...
>>
>> I've seen this, too, but throwing away my build tree made it go away, so
>> I blamed "make choking on stale build tree" syndrome. Perhaps it's an
>> intermittent ivshmem bug instead.
>
> I didn't do a make clean before successfully applying other pulls,
> so I think my money is on "intermittent ivshmem issue". I'll have
> another go with this one once I've finished the rest of the queue...
Second try did indeed work fine, so I've applied it.
thanks
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2016-02-29 20:08 Jeff Cody
2016-03-01 10:34 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Jeff Cody @ 2016-02-29 20:08 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, famz, qemu-devel
The following changes since commit 071608b519adf62bc29c914343a21c5407ab1ac9:
Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-20160229-1' into staging (2016-02-29 12:24:26 +0000)
are available in the git repository at:
git@github.com:codyprime/qemu-kvm-jtc.git tags/block-pull-request
for you to fetch changes up to cc199b16cf4cb9279aca73f5f5dce2cc337b9079:
iotests/124: Add cluster_size mismatch test (2016-02-29 14:55:14 -0500)
----------------------------------------------------------------
Block patches
----------------------------------------------------------------
Daniel P. Berrange (3):
rbd: add support for getting password from QCryptoSecret object
curl: add support for HTTP authentication parameters
iscsi: add support for getting CHAP password via QCryptoSecret API
Fam Zheng (2):
mirror: Rewrite mirror_iteration
mirror: Add mirror_wait_for_io
John Snow (3):
block/backup: make backup cluster size configurable
block/backup: avoid copying less than full target clusters
iotests/124: Add cluster_size mismatch test
Max Reitz (2):
vhdx: DIV_ROUND_UP() in vhdx_calc_bat_entries()
vhdx: Simplify vhdx_set_shift_bits()
Peter Lieven (1):
block/nfs: add support for setting debug level
Vasiliy Tolstov (1):
sheepdog: allow to delete snapshot
block/backup.c | 87 +++++++----
block/curl.c | 66 +++++++++
block/iscsi.c | 24 ++-
block/mirror.c | 353 +++++++++++++++++++++++++++------------------
block/nfs.c | 12 ++
block/rbd.c | 47 ++++++
block/sheepdog.c | 125 +++++++++++++++-
block/vhdx.c | 18 +--
tests/qemu-iotests/109.out | 80 +++++-----
tests/qemu-iotests/124 | 58 +++++++-
tests/qemu-iotests/124.out | 4 +-
trace-events | 1 -
12 files changed, 641 insertions(+), 234 deletions(-)
--
1.9.3
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2016-02-29 20:08 Jeff Cody
@ 2016-03-01 10:34 ` Peter Maydell
0 siblings, 0 replies; 39+ messages in thread
From: Peter Maydell @ 2016-03-01 10:34 UTC (permalink / raw)
To: Jeff Cody; +Cc: Fam Zheng, QEMU Developers, Qemu-block
On 29 February 2016 at 20:08, Jeff Cody <jcody@redhat.com> wrote:
> The following changes since commit 071608b519adf62bc29c914343a21c5407ab1ac9:
>
> Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-20160229-1' into staging (2016-02-29 12:24:26 +0000)
>
> are available in the git repository at:
>
>
> git@github.com:codyprime/qemu-kvm-jtc.git tags/block-pull-request
>
> for you to fetch changes up to cc199b16cf4cb9279aca73f5f5dce2cc337b9079:
>
> iotests/124: Add cluster_size mismatch test (2016-02-29 14:55:14 -0500)
>
> ----------------------------------------------------------------
> Block patches
> ----------------------------------------------------------------
>
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2016-06-07 14:26 Stefan Hajnoczi
2016-06-07 15:34 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Stefan Hajnoczi @ 2016-06-07 14:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
The following changes since commit 76462405809d29bab65a3699686998ba124ab942:
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160606-1' into staging (2016-06-06 17:02:42 +0100)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 8860eabdee32f78d9a34273a340b8f74476bc9a0:
throttle: refuse iops-size without iops-total/read/write (2016-06-07 14:40:51 +0100)
----------------------------------------------------------------
----------------------------------------------------------------
Changlong Xie (1):
iostatus: fix comments for block_job_iostatus_reset
Eric Blake (1):
block: Move BlockRequest type to io.c
Fam Zheng (5):
blockdev-backup: Use bdrv_lookup_bs on target
blockdev-backup: Don't move target AioContext if it's attached
virtio-blk: Remove op blocker for dataplane
virtio-scsi: Remove op blocker for dataplane
block: Drop bdrv_ioctl_bh_cb
Kevin Wolf (1):
block/io: Remove unused bdrv_aio_write_zeroes()
Peter Lieven (1):
block/io: optimize bdrv_co_pwritev for small requests
Stefan Hajnoczi (3):
tests: avoid coroutine pool test crash
virtio: drop duplicate virtio_queue_get_id() function
throttle: refuse iops-size without iops-total/read/write
block/io.c | 60 +++++++++++++++++++-------------------
blockdev.c | 23 ++++++++-------
hw/block/dataplane/virtio-blk.c | 63 ----------------------------------------
hw/scsi/virtio-scsi.c | 64 +----------------------------------------
hw/virtio/virtio.c | 7 -----
include/block/block.h | 24 ----------------
include/block/blockjob.h | 2 +-
include/hw/virtio/virtio-scsi.h | 11 -------
include/hw/virtio/virtio.h | 1 -
tests/qemu-iotests/077 | 12 +-------
tests/qemu-iotests/077.out | 26 -----------------
tests/test-coroutine.c | 10 ++++++-
tests/test-throttle.c | 10 +++++++
trace-events | 1 -
util/throttle.c | 8 ++++++
15 files changed, 74 insertions(+), 248 deletions(-)
--
2.5.5
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2016-06-07 14:26 Stefan Hajnoczi
@ 2016-06-07 15:34 ` Peter Maydell
0 siblings, 0 replies; 39+ messages in thread
From: Peter Maydell @ 2016-06-07 15:34 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 7 June 2016 at 15:26, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 76462405809d29bab65a3699686998ba124ab942:
>
> Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160606-1' into staging (2016-06-06 17:02:42 +0100)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 8860eabdee32f78d9a34273a340b8f74476bc9a0:
>
> throttle: refuse iops-size without iops-total/read/write (2016-06-07 14:40:51 +0100)
>
> ----------------------------------------------------------------
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2017-04-21 13:46 Jeff Cody
2017-04-21 16:55 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Jeff Cody @ 2017-04-21 13:46 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel
The following changes since commit bfec359afba088aaacc7d316f43302f28c6e642a:
Merge remote-tracking branch 'remotes/armbru/tags/pull-qdev-2017-04-21' into staging (2017-04-21 11:42:03 +0100)
are available in the git repository at:
git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
for you to fetch changes up to 1507631e438930bc07f776f303af127a9cdb4d41:
qemu-iotests: _cleanup_qemu must be called on exit (2017-04-21 08:32:44 -0400)
----------------------------------------------------------------
Block patches for 2.10
----------------------------------------------------------------
Ashish Mittal (2):
block/vxhs.c: Add support for a new block device type called "vxhs"
block/vxhs.c: Add qemu-iotests for new block device type "vxhs"
Jeff Cody (10):
qemu-iotests: exclude vxhs from image creation via protocol
block: add bdrv_set_read_only() helper function
block: do not set BDS read_only if copy_on_read enabled
block: honor BDRV_O_ALLOW_RDWR when clearing bs->read_only
block: code movement
block: introduce bdrv_can_set_read_only()
block: use bdrv_can_set_read_only() during reopen
block/rbd - update variable names to more apt names
block/rbd: Add support for reopen()
qemu-iotests: _cleanup_qemu must be called on exit
block.c | 56 +++-
block/Makefile.objs | 2 +
block/bochs.c | 5 +-
block/cloop.c | 5 +-
block/dmg.c | 6 +-
block/rbd.c | 65 +++--
block/trace-events | 17 ++
block/vvfat.c | 19 +-
block/vxhs.c | 575 +++++++++++++++++++++++++++++++++++++++
configure | 39 +++
include/block/block.h | 2 +
qapi/block-core.json | 23 +-
tests/qemu-iotests/017 | 1 +
tests/qemu-iotests/020 | 1 +
tests/qemu-iotests/028 | 1 +
tests/qemu-iotests/029 | 1 +
tests/qemu-iotests/073 | 1 +
tests/qemu-iotests/094 | 11 +-
tests/qemu-iotests/102 | 5 +-
tests/qemu-iotests/109 | 1 +
tests/qemu-iotests/114 | 1 +
tests/qemu-iotests/117 | 1 +
tests/qemu-iotests/130 | 2 +
tests/qemu-iotests/134 | 1 +
tests/qemu-iotests/140 | 1 +
tests/qemu-iotests/141 | 1 +
tests/qemu-iotests/143 | 1 +
tests/qemu-iotests/156 | 2 +
tests/qemu-iotests/158 | 1 +
tests/qemu-iotests/common | 6 +
tests/qemu-iotests/common.config | 13 +
tests/qemu-iotests/common.filter | 1 +
tests/qemu-iotests/common.rc | 19 ++
33 files changed, 844 insertions(+), 42 deletions(-)
create mode 100644 block/vxhs.c
--
2.9.3
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2017-04-21 13:46 Jeff Cody
@ 2017-04-21 16:55 ` Peter Maydell
0 siblings, 0 replies; 39+ messages in thread
From: Peter Maydell @ 2017-04-21 16:55 UTC (permalink / raw)
To: Jeff Cody; +Cc: Qemu-block, QEMU Developers
On 21 April 2017 at 14:46, Jeff Cody <jcody@redhat.com> wrote:
> The following changes since commit bfec359afba088aaacc7d316f43302f28c6e642a:
>
> Merge remote-tracking branch 'remotes/armbru/tags/pull-qdev-2017-04-21' into staging (2017-04-21 11:42:03 +0100)
>
> are available in the git repository at:
>
> git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
>
> for you to fetch changes up to 1507631e438930bc07f776f303af127a9cdb4d41:
>
> qemu-iotests: _cleanup_qemu must be called on exit (2017-04-21 08:32:44 -0400)
>
> ----------------------------------------------------------------
>
> Block patches for 2.10
>
Hi, I'm afraid this runs into format string compile issues:
In file included from block/trace.c:4:
/Users/pm215/src/qemu-for-merges/build/all/block/trace.h:1465:42:
error: format specifies type 'unsigned long' but the argument has type
'uint64_t' (aka 'unsigned long long') [-Werror,-Wformat]
, guid, iodir, size, off, acb, ret, err);
^~~~
/Users/pm215/src/qemu-for-merges/include/qemu/log.h:94:30: note:
expanded from macro 'qemu_log_mask'
qemu_log(FMT, ## __VA_ARGS__); \
^
In file included from block/trace.c:4:
/Users/pm215/src/qemu-for-merges/build/all/block/trace.h:1465:48:
error: format specifies type 'unsigned long' but the argument has type
'uint64_t' (aka 'unsigned long long') [-Werror,-Wformat]
, guid, iodir, size, off, acb, ret, err);
^~~
/Users/pm215/src/qemu-for-merges/include/qemu/log.h:94:30: note:
expanded from macro 'qemu_log_mask'
qemu_log(FMT, ## __VA_ARGS__); \
^
In file included from block/trace.c:4:
/Users/pm215/src/qemu-for-merges/build/all/block/trace.h:1493:41:
error: format specifies type 'unsigned long' but the argument has type
'uint64_t' (aka 'unsigned long long') [-Werror,-Wformat]
, vdisk_guid, vdisk_size);
^~~~~~~~~~
/Users/pm215/src/qemu-for-merges/include/qemu/log.h:94:30: note:
expanded from macro 'qemu_log_mask'
qemu_log(FMT, ## __VA_ARGS__); \
^
In file included from block/trace.c:4:
/Users/pm215/src/qemu-for-merges/build/all/block/trace.h:1507:34:
error: format specifies type 'long' but the argument has type
'uint64_t' (aka 'unsigned long long') [-Werror,-Wformat]
, acb, ret);
^~~
/Users/pm215/src/qemu-for-merges/include/qemu/log.h:94:30: note:
expanded from macro 'qemu_log_mask'
qemu_log(FMT, ## __VA_ARGS__); \
^
4 errors generated.
Those are the OSX errors, but the compile also fails for 32-bit
hosts (including w32).
thanks
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2017-05-26 19:23 Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 01/12] blockjob: remove unnecessary check Jeff Cody
` (12 more replies)
0 siblings, 13 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha
The following changes since commit 9964e96dc9999cf7f7c936ee854a795415d19b60:
Merge remote-tracking branch 'jasowang/tags/net-pull-request' into staging (2017-05-23 15:01:31 +0100)
are available in the git repository at:
git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
for you to fetch changes up to 223a23c198787328ae75bc65d84edf5fde33c0b6:
block/gluster: glfs_lseek() workaround (2017-05-24 16:44:46 -0400)
----------------------------------------------------------------
Block patches
----------------------------------------------------------------
Jeff Cody (1):
block/gluster: glfs_lseek() workaround
Paolo Bonzini (11):
blockjob: remove unnecessary check
blockjob: remove iostatus_reset callback
blockjob: introduce block_job_early_fail
blockjob: introduce block_job_pause/resume_all
blockjob: separate monitor and blockjob APIs
blockjob: move iostatus reset inside block_job_user_resume
blockjob: introduce block_job_cancel_async, check iostatus invariants
blockjob: group BlockJob transaction functions together
blockjob: strengthen a bit test-blockjob-txn
blockjob: reorganize block_job_completed_txn_abort
blockjob: use deferred_to_main_loop to indicate the coroutine has
ended
block/backup.c | 2 +-
block/commit.c | 2 +-
block/gluster.c | 18 +-
block/io.c | 19 +-
block/mirror.c | 2 +-
blockdev.c | 1 -
blockjob.c | 750 ++++++++++++++++++++++++-------------------
include/block/blockjob.h | 16 -
include/block/blockjob_int.h | 27 +-
tests/test-blockjob-txn.c | 7 +-
tests/test-blockjob.c | 10 +-
11 files changed, 463 insertions(+), 391 deletions(-)
--
2.9.3
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 01/12] blockjob: remove unnecessary check
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 02/12] blockjob: remove iostatus_reset callback Jeff Cody
` (11 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
!job is always checked prior to the call, drop it from here.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 20170508141310.8674-2-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/blockjob.c b/blockjob.c
index 6e48932..23022b3 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -480,7 +480,7 @@ static bool block_job_should_pause(BlockJob *job)
bool block_job_user_paused(BlockJob *job)
{
- return job ? job->user_paused : 0;
+ return job->user_paused;
}
void coroutine_fn block_job_pause_point(BlockJob *job)
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 02/12] blockjob: remove iostatus_reset callback
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 01/12] blockjob: remove unnecessary check Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 03/12] blockjob: introduce block_job_early_fail Jeff Cody
` (10 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
This is unused since commit 66a0fae ("blockjob: Don't touch BDS iostatus",
2016-05-19).
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 20170508141310.8674-3-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 3 ---
include/block/blockjob_int.h | 3 ---
2 files changed, 6 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index 23022b3..71187d0 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -555,9 +555,6 @@ bool block_job_is_cancelled(BlockJob *job)
void block_job_iostatus_reset(BlockJob *job)
{
job->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
- if (job->driver->iostatus_reset) {
- job->driver->iostatus_reset(job);
- }
}
static int block_job_finish_sync(BlockJob *job,
diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h
index 3f86cc5..bfcc5d1 100644
--- a/include/block/blockjob_int.h
+++ b/include/block/blockjob_int.h
@@ -44,9 +44,6 @@ struct BlockJobDriver {
/** Optional callback for job types that support setting a speed limit */
void (*set_speed)(BlockJob *job, int64_t speed, Error **errp);
- /** Optional callback for job types that need to forward I/O status reset */
- void (*iostatus_reset)(BlockJob *job);
-
/** Mandatory: Entrypoint for the Coroutine. */
CoroutineEntry *start;
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 03/12] blockjob: introduce block_job_early_fail
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 01/12] blockjob: remove unnecessary check Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 02/12] blockjob: remove iostatus_reset callback Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 04/12] blockjob: introduce block_job_pause/resume_all Jeff Cody
` (9 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Outside blockjob.c, block_job_unref is only used when a block job fails
to start, and block_job_ref is not used at all. The reference counting
thus is pretty well hidden. Introduce a separate function to be used
by block jobs; because block_job_ref and block_job_unref now become
static, move them earlier in blockjob.c.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 20170508141310.8674-4-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/backup.c | 2 +-
block/commit.c | 2 +-
block/mirror.c | 2 +-
blockjob.c | 47 ++++++++++++++++++++++++++------------------
include/block/blockjob_int.h | 15 +++-----------
tests/test-blockjob.c | 10 +++++-----
6 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/block/backup.c b/block/backup.c
index a4fb288..5387fbd 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -692,7 +692,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
}
if (job) {
backup_clean(&job->common);
- block_job_unref(&job->common);
+ block_job_early_fail(&job->common);
}
return NULL;
diff --git a/block/commit.c b/block/commit.c
index 76a0d98..a3028b2 100644
--- a/block/commit.c
+++ b/block/commit.c
@@ -426,7 +426,7 @@ fail:
if (commit_top_bs) {
bdrv_set_backing_hd(overlay_bs, top, &error_abort);
}
- block_job_unref(&s->common);
+ block_job_early_fail(&s->common);
}
diff --git a/block/mirror.c b/block/mirror.c
index e86f8f8..b9eb2a2 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1252,7 +1252,7 @@ fail:
g_free(s->replaces);
blk_unref(s->target);
- block_job_unref(&s->common);
+ block_job_early_fail(&s->common);
}
bdrv_child_try_set_perm(mirror_top_bs->backing, 0, BLK_PERM_ALL,
diff --git a/blockjob.c b/blockjob.c
index 71187d0..5a722c3 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -106,6 +106,32 @@ BlockJob *block_job_get(const char *id)
return NULL;
}
+static void block_job_ref(BlockJob *job)
+{
+ ++job->refcnt;
+}
+
+static void block_job_attached_aio_context(AioContext *new_context,
+ void *opaque);
+static void block_job_detach_aio_context(void *opaque);
+
+static void block_job_unref(BlockJob *job)
+{
+ if (--job->refcnt == 0) {
+ BlockDriverState *bs = blk_bs(job->blk);
+ bs->job = NULL;
+ block_job_remove_all_bdrv(job);
+ blk_remove_aio_context_notifier(job->blk,
+ block_job_attached_aio_context,
+ block_job_detach_aio_context, job);
+ blk_unref(job->blk);
+ error_free(job->blocker);
+ g_free(job->id);
+ QLIST_REMOVE(job, job_list);
+ g_free(job);
+ }
+}
+
static void block_job_attached_aio_context(AioContext *new_context,
void *opaque)
{
@@ -293,26 +319,9 @@ void block_job_start(BlockJob *job)
bdrv_coroutine_enter(blk_bs(job->blk), job->co);
}
-void block_job_ref(BlockJob *job)
+void block_job_early_fail(BlockJob *job)
{
- ++job->refcnt;
-}
-
-void block_job_unref(BlockJob *job)
-{
- if (--job->refcnt == 0) {
- BlockDriverState *bs = blk_bs(job->blk);
- bs->job = NULL;
- block_job_remove_all_bdrv(job);
- blk_remove_aio_context_notifier(job->blk,
- block_job_attached_aio_context,
- block_job_detach_aio_context, job);
- blk_unref(job->blk);
- error_free(job->blocker);
- g_free(job->id);
- QLIST_REMOVE(job, job_list);
- g_free(job);
- }
+ block_job_unref(job);
}
static void block_job_completed_single(BlockJob *job)
diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h
index bfcc5d1..45cdfd4 100644
--- a/include/block/blockjob_int.h
+++ b/include/block/blockjob_int.h
@@ -156,21 +156,12 @@ void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns);
void block_job_yield(BlockJob *job);
/**
- * block_job_ref:
+ * block_job_early_fail:
* @bs: The block device.
*
- * Grab a reference to the block job. Should be paired with block_job_unref.
+ * The block job could not be started, free it.
*/
-void block_job_ref(BlockJob *job);
-
-/**
- * block_job_unref:
- * @bs: The block device.
- *
- * Release reference to the block job and release resources if it is the last
- * reference.
- */
-void block_job_unref(BlockJob *job);
+void block_job_early_fail(BlockJob *job);
/**
* block_job_completed:
diff --git a/tests/test-blockjob.c b/tests/test-blockjob.c
index 740e740..23bdf1a 100644
--- a/tests/test-blockjob.c
+++ b/tests/test-blockjob.c
@@ -116,11 +116,11 @@ static void test_job_ids(void)
job[1] = do_test_id(blk[1], "id0", false);
/* But once job[0] finishes we can reuse its ID */
- block_job_unref(job[0]);
+ block_job_early_fail(job[0]);
job[1] = do_test_id(blk[1], "id0", true);
/* No job ID specified, defaults to the backend name ('drive1') */
- block_job_unref(job[1]);
+ block_job_early_fail(job[1]);
job[1] = do_test_id(blk[1], NULL, true);
/* Duplicate job ID */
@@ -133,9 +133,9 @@ static void test_job_ids(void)
/* This one is valid */
job[2] = do_test_id(blk[2], "id_2", true);
- block_job_unref(job[0]);
- block_job_unref(job[1]);
- block_job_unref(job[2]);
+ block_job_early_fail(job[0]);
+ block_job_early_fail(job[1]);
+ block_job_early_fail(job[2]);
destroy_blk(blk[0]);
destroy_blk(blk[1]);
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 04/12] blockjob: introduce block_job_pause/resume_all
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (2 preceding siblings ...)
2017-05-26 19:23 ` [Qemu-devel] [PULL 03/12] blockjob: introduce block_job_early_fail Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 05/12] blockjob: separate monitor and blockjob APIs Jeff Cody
` (8 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Remove use of block_job_pause/resume from outside blockjob.c, thus
making them static. The new functions are used by the block layer,
so place them in blockjob_int.h.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 20170508141310.8674-5-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/io.c | 19 ++------
blockjob.c | 114 ++++++++++++++++++++++++++-----------------
include/block/blockjob.h | 16 ------
include/block/blockjob_int.h | 14 ++++++
4 files changed, 86 insertions(+), 77 deletions(-)
diff --git a/block/io.c b/block/io.c
index fdd7485..ed31810 100644
--- a/block/io.c
+++ b/block/io.c
@@ -26,6 +26,7 @@
#include "trace.h"
#include "sysemu/block-backend.h"
#include "block/blockjob.h"
+#include "block/blockjob_int.h"
#include "block/block_int.h"
#include "qemu/cutils.h"
#include "qapi/error.h"
@@ -301,16 +302,9 @@ void bdrv_drain_all_begin(void)
bool waited = true;
BlockDriverState *bs;
BdrvNextIterator it;
- BlockJob *job = NULL;
GSList *aio_ctxs = NULL, *ctx;
- while ((job = block_job_next(job))) {
- AioContext *aio_context = blk_get_aio_context(job->blk);
-
- aio_context_acquire(aio_context);
- block_job_pause(job);
- aio_context_release(aio_context);
- }
+ block_job_pause_all();
for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
AioContext *aio_context = bdrv_get_aio_context(bs);
@@ -354,7 +348,6 @@ void bdrv_drain_all_end(void)
{
BlockDriverState *bs;
BdrvNextIterator it;
- BlockJob *job = NULL;
for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
AioContext *aio_context = bdrv_get_aio_context(bs);
@@ -365,13 +358,7 @@ void bdrv_drain_all_end(void)
aio_context_release(aio_context);
}
- while ((job = block_job_next(job))) {
- AioContext *aio_context = blk_get_aio_context(job->blk);
-
- aio_context_acquire(aio_context);
- block_job_resume(job);
- aio_context_release(aio_context);
- }
+ block_job_resume_all();
}
void bdrv_drain_all(void)
diff --git a/blockjob.c b/blockjob.c
index 5a722c3..85ad610 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -55,36 +55,6 @@ struct BlockJobTxn {
static QLIST_HEAD(, BlockJob) block_jobs = QLIST_HEAD_INITIALIZER(block_jobs);
-static char *child_job_get_parent_desc(BdrvChild *c)
-{
- BlockJob *job = c->opaque;
- return g_strdup_printf("%s job '%s'",
- BlockJobType_lookup[job->driver->job_type],
- job->id);
-}
-
-static const BdrvChildRole child_job = {
- .get_parent_desc = child_job_get_parent_desc,
- .stay_at_node = true,
-};
-
-static void block_job_drained_begin(void *opaque)
-{
- BlockJob *job = opaque;
- block_job_pause(job);
-}
-
-static void block_job_drained_end(void *opaque)
-{
- BlockJob *job = opaque;
- block_job_resume(job);
-}
-
-static const BlockDevOps block_job_dev_ops = {
- .drained_begin = block_job_drained_begin,
- .drained_end = block_job_drained_end,
-};
-
BlockJob *block_job_next(BlockJob *job)
{
if (!job) {
@@ -106,6 +76,21 @@ BlockJob *block_job_get(const char *id)
return NULL;
}
+static void block_job_pause(BlockJob *job)
+{
+ job->pause_count++;
+}
+
+static void block_job_resume(BlockJob *job)
+{
+ assert(job->pause_count > 0);
+ job->pause_count--;
+ if (job->pause_count) {
+ return;
+ }
+ block_job_enter(job);
+}
+
static void block_job_ref(BlockJob *job)
{
++job->refcnt;
@@ -171,6 +156,36 @@ static void block_job_detach_aio_context(void *opaque)
block_job_unref(job);
}
+static char *child_job_get_parent_desc(BdrvChild *c)
+{
+ BlockJob *job = c->opaque;
+ return g_strdup_printf("%s job '%s'",
+ BlockJobType_lookup[job->driver->job_type],
+ job->id);
+}
+
+static const BdrvChildRole child_job = {
+ .get_parent_desc = child_job_get_parent_desc,
+ .stay_at_node = true,
+};
+
+static void block_job_drained_begin(void *opaque)
+{
+ BlockJob *job = opaque;
+ block_job_pause(job);
+}
+
+static void block_job_drained_end(void *opaque)
+{
+ BlockJob *job = opaque;
+ block_job_resume(job);
+}
+
+static const BlockDevOps block_job_dev_ops = {
+ .drained_begin = block_job_drained_begin,
+ .drained_end = block_job_drained_end,
+};
+
void block_job_remove_all_bdrv(BlockJob *job)
{
GSList *l;
@@ -471,11 +486,6 @@ void block_job_complete(BlockJob *job, Error **errp)
job->driver->complete(job, errp);
}
-void block_job_pause(BlockJob *job)
-{
- job->pause_count++;
-}
-
void block_job_user_pause(BlockJob *job)
{
job->user_paused = true;
@@ -520,16 +530,6 @@ void coroutine_fn block_job_pause_point(BlockJob *job)
}
}
-void block_job_resume(BlockJob *job)
-{
- assert(job->pause_count > 0);
- job->pause_count--;
- if (job->pause_count) {
- return;
- }
- block_job_enter(job);
-}
-
void block_job_user_resume(BlockJob *job)
{
if (job && job->user_paused && job->pause_count > 0) {
@@ -723,6 +723,30 @@ static void block_job_event_completed(BlockJob *job, const char *msg)
&error_abort);
}
+void block_job_pause_all(void)
+{
+ BlockJob *job = NULL;
+ while ((job = block_job_next(job))) {
+ AioContext *aio_context = blk_get_aio_context(job->blk);
+
+ aio_context_acquire(aio_context);
+ block_job_pause(job);
+ aio_context_release(aio_context);
+ }
+}
+
+void block_job_resume_all(void)
+{
+ BlockJob *job = NULL;
+ while ((job = block_job_next(job))) {
+ AioContext *aio_context = blk_get_aio_context(job->blk);
+
+ aio_context_acquire(aio_context);
+ block_job_resume(job);
+ aio_context_release(aio_context);
+ }
+}
+
void block_job_event_ready(BlockJob *job)
{
job->ready = true;
diff --git a/include/block/blockjob.h b/include/block/blockjob.h
index 9e906f7..09c7c69 100644
--- a/include/block/blockjob.h
+++ b/include/block/blockjob.h
@@ -235,14 +235,6 @@ void block_job_complete(BlockJob *job, Error **errp);
BlockJobInfo *block_job_query(BlockJob *job, Error **errp);
/**
- * block_job_pause:
- * @job: The job to be paused.
- *
- * Asynchronously pause the specified job.
- */
-void block_job_pause(BlockJob *job);
-
-/**
* block_job_user_pause:
* @job: The job to be paused.
*
@@ -260,14 +252,6 @@ void block_job_user_pause(BlockJob *job);
bool block_job_user_paused(BlockJob *job);
/**
- * block_job_resume:
- * @job: The job to be resumed.
- *
- * Resume the specified job. Must be paired with a preceding block_job_pause.
- */
-void block_job_resume(BlockJob *job);
-
-/**
* block_job_user_resume:
* @job: The job to be resumed.
*
diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h
index 45cdfd4..4f2d2ac 100644
--- a/include/block/blockjob_int.h
+++ b/include/block/blockjob_int.h
@@ -156,6 +156,20 @@ void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns);
void block_job_yield(BlockJob *job);
/**
+ * block_job_pause_all:
+ *
+ * Asynchronously pause all jobs.
+ */
+void block_job_pause_all(void);
+
+/**
+ * block_job_resume_all:
+ *
+ * Resume all block jobs. Must be paired with a preceding block_job_pause_all.
+ */
+void block_job_resume_all(void);
+
+/**
* block_job_early_fail:
* @bs: The block device.
*
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 05/12] blockjob: separate monitor and blockjob APIs
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (3 preceding siblings ...)
2017-05-26 19:23 ` [Qemu-devel] [PULL 04/12] blockjob: introduce block_job_pause/resume_all Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 06/12] blockjob: move iostatus reset inside block_job_user_resume Jeff Cody
` (7 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
We have two different headers for block job operations, blockjob.h
and blockjob_int.h. The former contains APIs called by the monitor,
the latter contains APIs called by the block job drivers and the
block layer itself.
Keep the two APIs separate in the blockjob.c file too. This will
be useful when transitioning away from the AioContext lock, because
there will be locking policies for the two categories, too---the
monitor will have to call new block_job_lock/unlock APIs, while blockjob
APIs will take care of this for the users.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-6-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 390 ++++++++++++++++++++++++++++++++-----------------------------
1 file changed, 205 insertions(+), 185 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index 85ad610..a8ecb41 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -55,6 +55,21 @@ struct BlockJobTxn {
static QLIST_HEAD(, BlockJob) block_jobs = QLIST_HEAD_INITIALIZER(block_jobs);
+/*
+ * The block job API is composed of two categories of functions.
+ *
+ * The first includes functions used by the monitor. The monitor is
+ * peculiar in that it accesses the block job list with block_job_get, and
+ * therefore needs consistency across block_job_get and the actual operation
+ * (e.g. block_job_set_speed). The consistency is achieved with
+ * aio_context_acquire/release. These functions are declared in blockjob.h.
+ *
+ * The second includes functions used by the block job drivers and sometimes
+ * by the core block layer. These do not care about locking, because the
+ * whole coroutine runs under the AioContext lock, and are declared in
+ * blockjob_int.h.
+ */
+
BlockJob *block_job_next(BlockJob *job)
{
if (!job) {
@@ -216,90 +231,6 @@ int block_job_add_bdrv(BlockJob *job, const char *name, BlockDriverState *bs,
return 0;
}
-void *block_job_create(const char *job_id, const BlockJobDriver *driver,
- BlockDriverState *bs, uint64_t perm,
- uint64_t shared_perm, int64_t speed, int flags,
- BlockCompletionFunc *cb, void *opaque, Error **errp)
-{
- BlockBackend *blk;
- BlockJob *job;
- int ret;
-
- if (bs->job) {
- error_setg(errp, QERR_DEVICE_IN_USE, bdrv_get_device_name(bs));
- return NULL;
- }
-
- if (job_id == NULL && !(flags & BLOCK_JOB_INTERNAL)) {
- job_id = bdrv_get_device_name(bs);
- if (!*job_id) {
- error_setg(errp, "An explicit job ID is required for this node");
- return NULL;
- }
- }
-
- if (job_id) {
- if (flags & BLOCK_JOB_INTERNAL) {
- error_setg(errp, "Cannot specify job ID for internal block job");
- return NULL;
- }
-
- if (!id_wellformed(job_id)) {
- error_setg(errp, "Invalid job ID '%s'", job_id);
- return NULL;
- }
-
- if (block_job_get(job_id)) {
- error_setg(errp, "Job ID '%s' already in use", job_id);
- return NULL;
- }
- }
-
- blk = blk_new(perm, shared_perm);
- ret = blk_insert_bs(blk, bs, errp);
- if (ret < 0) {
- blk_unref(blk);
- return NULL;
- }
-
- job = g_malloc0(driver->instance_size);
- job->driver = driver;
- job->id = g_strdup(job_id);
- job->blk = blk;
- job->cb = cb;
- job->opaque = opaque;
- job->busy = false;
- job->paused = true;
- job->pause_count = 1;
- job->refcnt = 1;
-
- error_setg(&job->blocker, "block device is in use by block job: %s",
- BlockJobType_lookup[driver->job_type]);
- block_job_add_bdrv(job, "main node", bs, 0, BLK_PERM_ALL, &error_abort);
- bs->job = job;
-
- blk_set_dev_ops(blk, &block_job_dev_ops, job);
- bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, job->blocker);
-
- QLIST_INSERT_HEAD(&block_jobs, job, job_list);
-
- blk_add_aio_context_notifier(blk, block_job_attached_aio_context,
- block_job_detach_aio_context, job);
-
- /* Only set speed when necessary to avoid NotSupported error */
- if (speed != 0) {
- Error *local_err = NULL;
-
- block_job_set_speed(job, speed, &local_err);
- if (local_err) {
- block_job_unref(job);
- error_propagate(errp, local_err);
- return NULL;
- }
- }
- return job;
-}
-
bool block_job_is_internal(BlockJob *job)
{
return (job->id == NULL);
@@ -334,11 +265,6 @@ void block_job_start(BlockJob *job)
bdrv_coroutine_enter(blk_bs(job->blk), job->co);
}
-void block_job_early_fail(BlockJob *job)
-{
- block_job_unref(job);
-}
-
static void block_job_completed_single(BlockJob *job)
{
if (!job->ret) {
@@ -440,21 +366,6 @@ static void block_job_completed_txn_success(BlockJob *job)
}
}
-void block_job_completed(BlockJob *job, int ret)
-{
- assert(blk_bs(job->blk)->job == job);
- assert(!job->completed);
- job->completed = true;
- job->ret = ret;
- if (!job->txn) {
- block_job_completed_single(job);
- } else if (ret < 0 || block_job_is_cancelled(job)) {
- block_job_completed_txn_abort(job);
- } else {
- block_job_completed_txn_success(job);
- }
-}
-
void block_job_set_speed(BlockJob *job, int64_t speed, Error **errp)
{
Error *local_err = NULL;
@@ -492,44 +403,11 @@ void block_job_user_pause(BlockJob *job)
block_job_pause(job);
}
-static bool block_job_should_pause(BlockJob *job)
-{
- return job->pause_count > 0;
-}
-
bool block_job_user_paused(BlockJob *job)
{
return job->user_paused;
}
-void coroutine_fn block_job_pause_point(BlockJob *job)
-{
- assert(job && block_job_started(job));
-
- if (!block_job_should_pause(job)) {
- return;
- }
- if (block_job_is_cancelled(job)) {
- return;
- }
-
- if (job->driver->pause) {
- job->driver->pause(job);
- }
-
- if (block_job_should_pause(job) && !block_job_is_cancelled(job)) {
- job->paused = true;
- job->busy = false;
- qemu_coroutine_yield(); /* wait for block_job_resume() */
- job->busy = true;
- job->paused = false;
- }
-
- if (job->driver->resume) {
- job->driver->resume(job);
- }
-}
-
void block_job_user_resume(BlockJob *job)
{
if (job && job->user_paused && job->pause_count > 0) {
@@ -538,13 +416,6 @@ void block_job_user_resume(BlockJob *job)
}
}
-void block_job_enter(BlockJob *job)
-{
- if (job->co && !job->busy) {
- bdrv_coroutine_enter(blk_bs(job->blk), job->co);
- }
-}
-
void block_job_cancel(BlockJob *job)
{
if (block_job_started(job)) {
@@ -556,11 +427,6 @@ void block_job_cancel(BlockJob *job)
}
}
-bool block_job_is_cancelled(BlockJob *job)
-{
- return job->cancelled;
-}
-
void block_job_iostatus_reset(BlockJob *job)
{
job->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
@@ -628,42 +494,6 @@ int block_job_complete_sync(BlockJob *job, Error **errp)
return block_job_finish_sync(job, &block_job_complete, errp);
}
-void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns)
-{
- assert(job->busy);
-
- /* Check cancellation *before* setting busy = false, too! */
- if (block_job_is_cancelled(job)) {
- return;
- }
-
- job->busy = false;
- if (!block_job_should_pause(job)) {
- co_aio_sleep_ns(blk_get_aio_context(job->blk), type, ns);
- }
- job->busy = true;
-
- block_job_pause_point(job);
-}
-
-void block_job_yield(BlockJob *job)
-{
- assert(job->busy);
-
- /* Check cancellation *before* setting busy = false, too! */
- if (block_job_is_cancelled(job)) {
- return;
- }
-
- job->busy = false;
- if (!block_job_should_pause(job)) {
- qemu_coroutine_yield();
- }
- job->busy = true;
-
- block_job_pause_point(job);
-}
-
BlockJobInfo *block_job_query(BlockJob *job, Error **errp)
{
BlockJobInfo *info;
@@ -723,6 +553,95 @@ static void block_job_event_completed(BlockJob *job, const char *msg)
&error_abort);
}
+/*
+ * API for block job drivers and the block layer. These functions are
+ * declared in blockjob_int.h.
+ */
+
+void *block_job_create(const char *job_id, const BlockJobDriver *driver,
+ BlockDriverState *bs, uint64_t perm,
+ uint64_t shared_perm, int64_t speed, int flags,
+ BlockCompletionFunc *cb, void *opaque, Error **errp)
+{
+ BlockBackend *blk;
+ BlockJob *job;
+ int ret;
+
+ if (bs->job) {
+ error_setg(errp, QERR_DEVICE_IN_USE, bdrv_get_device_name(bs));
+ return NULL;
+ }
+
+ if (job_id == NULL && !(flags & BLOCK_JOB_INTERNAL)) {
+ job_id = bdrv_get_device_name(bs);
+ if (!*job_id) {
+ error_setg(errp, "An explicit job ID is required for this node");
+ return NULL;
+ }
+ }
+
+ if (job_id) {
+ if (flags & BLOCK_JOB_INTERNAL) {
+ error_setg(errp, "Cannot specify job ID for internal block job");
+ return NULL;
+ }
+
+ if (!id_wellformed(job_id)) {
+ error_setg(errp, "Invalid job ID '%s'", job_id);
+ return NULL;
+ }
+
+ if (block_job_get(job_id)) {
+ error_setg(errp, "Job ID '%s' already in use", job_id);
+ return NULL;
+ }
+ }
+
+ blk = blk_new(perm, shared_perm);
+ ret = blk_insert_bs(blk, bs, errp);
+ if (ret < 0) {
+ blk_unref(blk);
+ return NULL;
+ }
+
+ job = g_malloc0(driver->instance_size);
+ job->driver = driver;
+ job->id = g_strdup(job_id);
+ job->blk = blk;
+ job->cb = cb;
+ job->opaque = opaque;
+ job->busy = false;
+ job->paused = true;
+ job->pause_count = 1;
+ job->refcnt = 1;
+
+ error_setg(&job->blocker, "block device is in use by block job: %s",
+ BlockJobType_lookup[driver->job_type]);
+ block_job_add_bdrv(job, "main node", bs, 0, BLK_PERM_ALL, &error_abort);
+ bs->job = job;
+
+ blk_set_dev_ops(blk, &block_job_dev_ops, job);
+ bdrv_op_unblock(bs, BLOCK_OP_TYPE_DATAPLANE, job->blocker);
+
+ QLIST_INSERT_HEAD(&block_jobs, job, job_list);
+
+ blk_add_aio_context_notifier(blk, block_job_attached_aio_context,
+ block_job_detach_aio_context, job);
+
+ /* Only set speed when necessary to avoid NotSupported error */
+ if (speed != 0) {
+ Error *local_err = NULL;
+
+ block_job_set_speed(job, speed, &local_err);
+ if (local_err) {
+ block_job_unref(job);
+ error_propagate(errp, local_err);
+ return NULL;
+ }
+ }
+ return job;
+}
+
void block_job_pause_all(void)
{
BlockJob *job = NULL;
@@ -735,6 +654,59 @@ void block_job_pause_all(void)
}
}
+void block_job_early_fail(BlockJob *job)
+{
+ block_job_unref(job);
+}
+
+void block_job_completed(BlockJob *job, int ret)
+{
+ assert(blk_bs(job->blk)->job == job);
+ assert(!job->completed);
+ job->completed = true;
+ job->ret = ret;
+ if (!job->txn) {
+ block_job_completed_single(job);
+ } else if (ret < 0 || block_job_is_cancelled(job)) {
+ block_job_completed_txn_abort(job);
+ } else {
+ block_job_completed_txn_success(job);
+ }
+}
+
+static bool block_job_should_pause(BlockJob *job)
+{
+ return job->pause_count > 0;
+}
+
+void coroutine_fn block_job_pause_point(BlockJob *job)
+{
+ assert(job && block_job_started(job));
+
+ if (!block_job_should_pause(job)) {
+ return;
+ }
+ if (block_job_is_cancelled(job)) {
+ return;
+ }
+
+ if (job->driver->pause) {
+ job->driver->pause(job);
+ }
+
+ if (block_job_should_pause(job) && !block_job_is_cancelled(job)) {
+ job->paused = true;
+ job->busy = false;
+ qemu_coroutine_yield(); /* wait for block_job_resume() */
+ job->busy = true;
+ job->paused = false;
+ }
+
+ if (job->driver->resume) {
+ job->driver->resume(job);
+ }
+}
+
void block_job_resume_all(void)
{
BlockJob *job = NULL;
@@ -747,6 +719,54 @@ void block_job_resume_all(void)
}
}
+void block_job_enter(BlockJob *job)
+{
+ if (job->co && !job->busy) {
+ bdrv_coroutine_enter(blk_bs(job->blk), job->co);
+ }
+}
+
+bool block_job_is_cancelled(BlockJob *job)
+{
+ return job->cancelled;
+}
+
+void block_job_sleep_ns(BlockJob *job, QEMUClockType type, int64_t ns)
+{
+ assert(job->busy);
+
+ /* Check cancellation *before* setting busy = false, too! */
+ if (block_job_is_cancelled(job)) {
+ return;
+ }
+
+ job->busy = false;
+ if (!block_job_should_pause(job)) {
+ co_aio_sleep_ns(blk_get_aio_context(job->blk), type, ns);
+ }
+ job->busy = true;
+
+ block_job_pause_point(job);
+}
+
+void block_job_yield(BlockJob *job)
+{
+ assert(job->busy);
+
+ /* Check cancellation *before* setting busy = false, too! */
+ if (block_job_is_cancelled(job)) {
+ return;
+ }
+
+ job->busy = false;
+ if (!block_job_should_pause(job)) {
+ qemu_coroutine_yield();
+ }
+ job->busy = true;
+
+ block_job_pause_point(job);
+}
+
void block_job_event_ready(BlockJob *job)
{
job->ready = true;
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 06/12] blockjob: move iostatus reset inside block_job_user_resume
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (4 preceding siblings ...)
2017-05-26 19:23 ` [Qemu-devel] [PULL 05/12] blockjob: separate monitor and blockjob APIs Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 07/12] blockjob: introduce block_job_cancel_async, check iostatus invariants Jeff Cody
` (6 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Outside blockjob.c, the block_job_iostatus_reset function is used once
in the monitor and once in BlockBackend. When we introduce the block
job mutex, block_job_iostatus_reset's client is going to be the block
layer (for which blockjob.c will take the block job mutex) rather than
the monitor (which will take the block job mutex by itself).
The monitor's call to block_job_iostatus_reset from the monitor comes
just before the sole call to block_job_user_resume, so reset the
iostatus directly from block_job_iostatus_reset. This will avoid
the need to introduce separate block_job_iostatus_reset and
block_job_iostatus_reset_locked APIs.
After making this change, move the function together with the others
that were moved in the previous patch.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Message-id: 20170508141310.8674-7-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockdev.c | 1 -
blockjob.c | 11 ++++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index c63f4e8..892d768 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -3715,7 +3715,6 @@ void qmp_block_job_resume(const char *device, Error **errp)
}
trace_qmp_block_job_resume(job);
- block_job_iostatus_reset(job);
block_job_user_resume(job);
aio_context_release(aio_context);
}
diff --git a/blockjob.c b/blockjob.c
index a8ecb41..cd1f4c0 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -412,6 +412,7 @@ void block_job_user_resume(BlockJob *job)
{
if (job && job->user_paused && job->pause_count > 0) {
job->user_paused = false;
+ block_job_iostatus_reset(job);
block_job_resume(job);
}
}
@@ -427,11 +428,6 @@ void block_job_cancel(BlockJob *job)
}
}
-void block_job_iostatus_reset(BlockJob *job)
-{
- job->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
-}
-
static int block_job_finish_sync(BlockJob *job,
void (*finish)(BlockJob *, Error **errp),
Error **errp)
@@ -767,6 +763,11 @@ void block_job_yield(BlockJob *job)
block_job_pause_point(job);
}
+void block_job_iostatus_reset(BlockJob *job)
+{
+ job->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
+}
+
void block_job_event_ready(BlockJob *job)
{
job->ready = true;
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 07/12] blockjob: introduce block_job_cancel_async, check iostatus invariants
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (5 preceding siblings ...)
2017-05-26 19:23 ` [Qemu-devel] [PULL 06/12] blockjob: move iostatus reset inside block_job_user_resume Jeff Cody
@ 2017-05-26 19:23 ` Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 08/12] blockjob: group BlockJob transaction functions together Jeff Cody
` (5 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:23 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
The new functions helps respecting the invariant that the coroutine
is entered with false user_resume, zero pause count and no error
recorded in the iostatus.
Resetting the iostatus is now common to all of block_job_cancel_async,
block_job_user_resume and block_job_iostatus_reset, albeit with slight
differences:
- block_job_cancel_async resets the iostatus, and resumes the job if
there was an error, but the coroutine is not restarted immediately.
For example the caller may continue with a call to block_job_finish_sync.
- block_job_user_resume resets the iostatus. It wants to resume the job
unconditionally, even if there was no error.
- block_job_iostatus_reset doesn't resume the job at all. Maybe that's
a bug but it should be fixed separately.
block_job_iostatus_reset does the least common denominator, so add some
checking but otherwise leave it as the entry point for resetting the
iostatus.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-8-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index cd1f4c0..eae8fe7 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -304,6 +304,19 @@ static void block_job_completed_single(BlockJob *job)
block_job_unref(job);
}
+static void block_job_cancel_async(BlockJob *job)
+{
+ if (job->iostatus != BLOCK_DEVICE_IO_STATUS_OK) {
+ block_job_iostatus_reset(job);
+ }
+ if (job->user_paused) {
+ /* Do not call block_job_enter here, the caller will handle it. */
+ job->user_paused = false;
+ job->pause_count--;
+ }
+ job->cancelled = true;
+}
+
static void block_job_completed_txn_abort(BlockJob *job)
{
AioContext *ctx;
@@ -328,7 +341,7 @@ static void block_job_completed_txn_abort(BlockJob *job)
* them; this job, however, may or may not be cancelled, depending
* on the caller, so leave it. */
if (other_job != job) {
- other_job->cancelled = true;
+ block_job_cancel_async(other_job);
}
continue;
}
@@ -411,8 +424,8 @@ bool block_job_user_paused(BlockJob *job)
void block_job_user_resume(BlockJob *job)
{
if (job && job->user_paused && job->pause_count > 0) {
- job->user_paused = false;
block_job_iostatus_reset(job);
+ job->user_paused = false;
block_job_resume(job);
}
}
@@ -420,8 +433,7 @@ void block_job_user_resume(BlockJob *job)
void block_job_cancel(BlockJob *job)
{
if (block_job_started(job)) {
- job->cancelled = true;
- block_job_iostatus_reset(job);
+ block_job_cancel_async(job);
block_job_enter(job);
} else {
block_job_completed(job, -ECANCELED);
@@ -765,6 +777,10 @@ void block_job_yield(BlockJob *job)
void block_job_iostatus_reset(BlockJob *job)
{
+ if (job->iostatus == BLOCK_DEVICE_IO_STATUS_OK) {
+ return;
+ }
+ assert(job->user_paused && job->pause_count > 0);
job->iostatus = BLOCK_DEVICE_IO_STATUS_OK;
}
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 08/12] blockjob: group BlockJob transaction functions together
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (6 preceding siblings ...)
2017-05-26 19:23 ` [Qemu-devel] [PULL 07/12] blockjob: introduce block_job_cancel_async, check iostatus invariants Jeff Cody
@ 2017-05-26 19:24 ` Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 09/12] blockjob: strengthen a bit test-blockjob-txn Jeff Cody
` (4 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:24 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Yet another pure code movement patch, preparing for the next change.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-9-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 128 ++++++++++++++++++++++++++++++-------------------------------
1 file changed, 64 insertions(+), 64 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index eae8fe7..c6ae07d 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -91,6 +91,39 @@ BlockJob *block_job_get(const char *id)
return NULL;
}
+BlockJobTxn *block_job_txn_new(void)
+{
+ BlockJobTxn *txn = g_new0(BlockJobTxn, 1);
+ QLIST_INIT(&txn->jobs);
+ txn->refcnt = 1;
+ return txn;
+}
+
+static void block_job_txn_ref(BlockJobTxn *txn)
+{
+ txn->refcnt++;
+}
+
+void block_job_txn_unref(BlockJobTxn *txn)
+{
+ if (txn && --txn->refcnt == 0) {
+ g_free(txn);
+ }
+}
+
+void block_job_txn_add_job(BlockJobTxn *txn, BlockJob *job)
+{
+ if (!txn) {
+ return;
+ }
+
+ assert(!job->txn);
+ job->txn = txn;
+
+ QLIST_INSERT_HEAD(&txn->jobs, job, txn_list);
+ block_job_txn_ref(txn);
+}
+
static void block_job_pause(BlockJob *job)
{
job->pause_count++;
@@ -317,6 +350,37 @@ static void block_job_cancel_async(BlockJob *job)
job->cancelled = true;
}
+static int block_job_finish_sync(BlockJob *job,
+ void (*finish)(BlockJob *, Error **errp),
+ Error **errp)
+{
+ Error *local_err = NULL;
+ int ret;
+
+ assert(blk_bs(job->blk)->job == job);
+
+ block_job_ref(job);
+
+ finish(job, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ block_job_unref(job);
+ return -EBUSY;
+ }
+ /* block_job_drain calls block_job_enter, and it should be enough to
+ * induce progress until the job completes or moves to the main thread.
+ */
+ while (!job->deferred_to_main_loop && !job->completed) {
+ block_job_drain(job);
+ }
+ while (!job->completed) {
+ aio_poll(qemu_get_aio_context(), true);
+ }
+ ret = (job->cancelled && job->ret == 0) ? -ECANCELED : job->ret;
+ block_job_unref(job);
+ return ret;
+}
+
static void block_job_completed_txn_abort(BlockJob *job)
{
AioContext *ctx;
@@ -440,37 +504,6 @@ void block_job_cancel(BlockJob *job)
}
}
-static int block_job_finish_sync(BlockJob *job,
- void (*finish)(BlockJob *, Error **errp),
- Error **errp)
-{
- Error *local_err = NULL;
- int ret;
-
- assert(blk_bs(job->blk)->job == job);
-
- block_job_ref(job);
-
- finish(job, &local_err);
- if (local_err) {
- error_propagate(errp, local_err);
- block_job_unref(job);
- return -EBUSY;
- }
- /* block_job_drain calls block_job_enter, and it should be enough to
- * induce progress until the job completes or moves to the main thread.
- */
- while (!job->deferred_to_main_loop && !job->completed) {
- block_job_drain(job);
- }
- while (!job->completed) {
- aio_poll(qemu_get_aio_context(), true);
- }
- ret = (job->cancelled && job->ret == 0) ? -ECANCELED : job->ret;
- block_job_unref(job);
- return ret;
-}
-
/* A wrapper around block_job_cancel() taking an Error ** parameter so it may be
* used with block_job_finish_sync() without the need for (rather nasty)
* function pointer casts there. */
@@ -883,36 +916,3 @@ void block_job_defer_to_main_loop(BlockJob *job,
aio_bh_schedule_oneshot(qemu_get_aio_context(),
block_job_defer_to_main_loop_bh, data);
}
-
-BlockJobTxn *block_job_txn_new(void)
-{
- BlockJobTxn *txn = g_new0(BlockJobTxn, 1);
- QLIST_INIT(&txn->jobs);
- txn->refcnt = 1;
- return txn;
-}
-
-static void block_job_txn_ref(BlockJobTxn *txn)
-{
- txn->refcnt++;
-}
-
-void block_job_txn_unref(BlockJobTxn *txn)
-{
- if (txn && --txn->refcnt == 0) {
- g_free(txn);
- }
-}
-
-void block_job_txn_add_job(BlockJobTxn *txn, BlockJob *job)
-{
- if (!txn) {
- return;
- }
-
- assert(!job->txn);
- job->txn = txn;
-
- QLIST_INSERT_HEAD(&txn->jobs, job, txn_list);
- block_job_txn_ref(txn);
-}
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 09/12] blockjob: strengthen a bit test-blockjob-txn
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (7 preceding siblings ...)
2017-05-26 19:24 ` [Qemu-devel] [PULL 08/12] blockjob: group BlockJob transaction functions together Jeff Cody
@ 2017-05-26 19:24 ` Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 10/12] blockjob: reorganize block_job_completed_txn_abort Jeff Cody
` (3 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:24 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
Unlike test-blockjob-txn, QMP releases the reference to the transaction
before the jobs finish. Thus, qemu-iotest 124 showed a failure while
working on the next patch that the unit tests did not have. Make
the test a little nastier.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-10-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
tests/test-blockjob-txn.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tests/test-blockjob-txn.c b/tests/test-blockjob-txn.c
index 0f80194..c77343f 100644
--- a/tests/test-blockjob-txn.c
+++ b/tests/test-blockjob-txn.c
@@ -167,6 +167,11 @@ static void test_pair_jobs(int expected1, int expected2)
block_job_start(job1);
block_job_start(job2);
+ /* Release our reference now to trigger as many nice
+ * use-after-free bugs as possible.
+ */
+ block_job_txn_unref(txn);
+
if (expected1 == -ECANCELED) {
block_job_cancel(job1);
}
@@ -187,8 +192,6 @@ static void test_pair_jobs(int expected1, int expected2)
g_assert_cmpint(result1, ==, expected1);
g_assert_cmpint(result2, ==, expected2);
-
- block_job_txn_unref(txn);
}
static void test_pair_jobs_success(void)
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 10/12] blockjob: reorganize block_job_completed_txn_abort
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (8 preceding siblings ...)
2017-05-26 19:24 ` [Qemu-devel] [PULL 09/12] blockjob: strengthen a bit test-blockjob-txn Jeff Cody
@ 2017-05-26 19:24 ` Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 11/12] blockjob: use deferred_to_main_loop to indicate the coroutine has ended Jeff Cody
` (2 subsequent siblings)
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:24 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
This splits the part that touches job states from the part that invokes
callbacks. It will make the code simpler to understand once job states will
be protected by a different mutex than the AioContext lock.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-11-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 35 ++++++++++++++++++++++-------------
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index c6ae07d..9a97c73 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -300,6 +300,8 @@ void block_job_start(BlockJob *job)
static void block_job_completed_single(BlockJob *job)
{
+ assert(job->completed);
+
if (!job->ret) {
if (job->driver->commit) {
job->driver->commit(job);
@@ -361,7 +363,9 @@ static int block_job_finish_sync(BlockJob *job,
block_job_ref(job);
- finish(job, &local_err);
+ if (finish) {
+ finish(job, &local_err);
+ }
if (local_err) {
error_propagate(errp, local_err);
block_job_unref(job);
@@ -385,7 +389,7 @@ static void block_job_completed_txn_abort(BlockJob *job)
{
AioContext *ctx;
BlockJobTxn *txn = job->txn;
- BlockJob *other_job, *next;
+ BlockJob *other_job;
if (txn->aborting) {
/*
@@ -394,29 +398,34 @@ static void block_job_completed_txn_abort(BlockJob *job)
return;
}
txn->aborting = true;
+ block_job_txn_ref(txn);
+
/* We are the first failed job. Cancel other jobs. */
QLIST_FOREACH(other_job, &txn->jobs, txn_list) {
ctx = blk_get_aio_context(other_job->blk);
aio_context_acquire(ctx);
}
+
+ /* Other jobs are effectively cancelled by us, set the status for
+ * them; this job, however, may or may not be cancelled, depending
+ * on the caller, so leave it. */
QLIST_FOREACH(other_job, &txn->jobs, txn_list) {
- if (other_job == job || other_job->completed) {
- /* Other jobs are "effectively" cancelled by us, set the status for
- * them; this job, however, may or may not be cancelled, depending
- * on the caller, so leave it. */
- if (other_job != job) {
- block_job_cancel_async(other_job);
- }
- continue;
+ if (other_job != job) {
+ block_job_cancel_async(other_job);
}
- block_job_cancel_sync(other_job);
- assert(other_job->completed);
}
- QLIST_FOREACH_SAFE(other_job, &txn->jobs, txn_list, next) {
+ while (!QLIST_EMPTY(&txn->jobs)) {
+ other_job = QLIST_FIRST(&txn->jobs);
ctx = blk_get_aio_context(other_job->blk);
+ if (!other_job->completed) {
+ assert(other_job->cancelled);
+ block_job_finish_sync(other_job, NULL, NULL);
+ }
block_job_completed_single(other_job);
aio_context_release(ctx);
}
+
+ block_job_txn_unref(txn);
}
static void block_job_completed_txn_success(BlockJob *job)
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 11/12] blockjob: use deferred_to_main_loop to indicate the coroutine has ended
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (9 preceding siblings ...)
2017-05-26 19:24 ` [Qemu-devel] [PULL 10/12] blockjob: reorganize block_job_completed_txn_abort Jeff Cody
@ 2017-05-26 19:24 ` Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 12/12] block/gluster: glfs_lseek() workaround Jeff Cody
2017-05-30 9:25 ` [Qemu-devel] [Qemu-block] [PULL 00/12] Block patches Stefan Hajnoczi
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:24 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha, Paolo Bonzini
From: Paolo Bonzini <pbonzini@redhat.com>
All block jobs are using block_job_defer_to_main_loop as the final
step just before the coroutine terminates. At this point,
block_job_enter should do nothing, but currently it restarts
the freed coroutine.
Now, the job->co states should probably be changed to an enum
(e.g. BEFORE_START, STARTED, YIELDED, COMPLETED) subsuming
block_job_started, job->deferred_to_main_loop and job->busy.
For now, this patch eliminates the problematic reenter by
removing the reset of job->deferred_to_main_loop (which served
no purpose, as far as I could see) and checking the flag in
block_job_enter.
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-12-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
blockjob.c | 10 ++++++++--
include/block/blockjob_int.h | 3 ++-
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/blockjob.c b/blockjob.c
index 9a97c73..a0d7e29 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -771,7 +771,14 @@ void block_job_resume_all(void)
void block_job_enter(BlockJob *job)
{
- if (job->co && !job->busy) {
+ if (!block_job_started(job)) {
+ return;
+ }
+ if (job->deferred_to_main_loop) {
+ return;
+ }
+
+ if (!job->busy) {
bdrv_coroutine_enter(blk_bs(job->blk), job->co);
}
}
@@ -899,7 +906,6 @@ static void block_job_defer_to_main_loop_bh(void *opaque)
aio_context_acquire(aio_context);
}
- data->job->deferred_to_main_loop = false;
data->fn(data->job, data->opaque);
if (aio_context != data->aio_context) {
diff --git a/include/block/blockjob_int.h b/include/block/blockjob_int.h
index 4f2d2ac..f13ad05 100644
--- a/include/block/blockjob_int.h
+++ b/include/block/blockjob_int.h
@@ -241,7 +241,8 @@ typedef void BlockJobDeferToMainLoopFn(BlockJob *job, void *opaque);
* @fn: The function to run in the main loop
* @opaque: The opaque value that is passed to @fn
*
- * Execute a given function in the main loop with the BlockDriverState
+ * This function must be called by the main job coroutine just before it
+ * returns. @fn is executed in the main loop with the BlockDriverState
* AioContext acquired. Block jobs must call bdrv_unref(), bdrv_close(), and
* anything that uses bdrv_drain_all() in the main loop.
*
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 12/12] block/gluster: glfs_lseek() workaround
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (10 preceding siblings ...)
2017-05-26 19:24 ` [Qemu-devel] [PULL 11/12] blockjob: use deferred_to_main_loop to indicate the coroutine has ended Jeff Cody
@ 2017-05-26 19:24 ` Jeff Cody
2017-05-30 9:25 ` [Qemu-devel] [Qemu-block] [PULL 00/12] Block patches Stefan Hajnoczi
12 siblings, 0 replies; 39+ messages in thread
From: Jeff Cody @ 2017-05-26 19:24 UTC (permalink / raw)
To: qemu-block; +Cc: peter.maydell, jcody, qemu-devel, stefanha
On current released versions of glusterfs, glfs_lseek() will sometimes
return invalid values for SEEK_DATA or SEEK_HOLE. For SEEK_DATA and
SEEK_HOLE, the returned value should be >= the passed offset, or < 0 in
the case of error:
LSEEK(2):
off_t lseek(int fd, off_t offset, int whence);
[...]
SEEK_HOLE
Adjust the file offset to the next hole in the file greater
than or equal to offset. If offset points into the middle of
a hole, then the file offset is set to offset. If there is no
hole past offset, then the file offset is adjusted to the end
of the file (i.e., there is an implicit hole at the end of
any file).
[...]
RETURN VALUE
Upon successful completion, lseek() returns the resulting
offset location as measured in bytes from the beginning of the
file. On error, the value (off_t) -1 is returned and errno is
set to indicate the error
However, occasionally glfs_lseek() for SEEK_HOLE/DATA will return a
value less than the passed offset, yet greater than zero.
For instance, here are example values observed from this call:
offs = glfs_lseek(s->fd, start, SEEK_HOLE);
if (offs < 0) {
return -errno; /* D1 and (H3 or H4) */
}
start == 7608336384
offs == 7607877632
This causes QEMU to abort on the assert test. When this value is
returned, errno is also 0.
This is a reported and known bug to glusterfs:
https://bugzilla.redhat.com/show_bug.cgi?id=1425293
Although this is being fixed in gluster, we still should work around it
in QEMU, given that multiple released versions of gluster behave this
way.
This patch treats the return case of (offs < start) the same as if an
error value other than ENXIO is returned; we will assume we learned
nothing, and there are no holes in the file.
Signed-off-by: Jeff Cody <jcody@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Message-id: 87c0140e9407c08f6e74b04131b610f2e27c014c.1495560397.git.jcody@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/gluster.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/block/gluster.c b/block/gluster.c
index 7c76cd0..8ba3bcc 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -1275,7 +1275,14 @@ static int find_allocation(BlockDriverState *bs, off_t start,
if (offs < 0) {
return -errno; /* D3 or D4 */
}
- assert(offs >= start);
+
+ if (offs < start) {
+ /* This is not a valid return by lseek(). We are safe to just return
+ * -EIO in this case, and we'll treat it like D4. Unfortunately some
+ * versions of gluster server will return offs < start, so an assert
+ * here will unnecessarily abort QEMU. */
+ return -EIO;
+ }
if (offs > start) {
/* D2: in hole, next data at offs */
@@ -1307,7 +1314,14 @@ static int find_allocation(BlockDriverState *bs, off_t start,
if (offs < 0) {
return -errno; /* D1 and (H3 or H4) */
}
- assert(offs >= start);
+
+ if (offs < start) {
+ /* This is not a valid return by lseek(). We are safe to just return
+ * -EIO in this case, and we'll treat it like H4. Unfortunately some
+ * versions of gluster server will return offs < start, so an assert
+ * here will unnecessarily abort QEMU. */
+ return -EIO;
+ }
if (offs > start) {
/*
--
2.9.3
^ permalink raw reply related [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [Qemu-block] [PULL 00/12] Block patches
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
` (11 preceding siblings ...)
2017-05-26 19:24 ` [Qemu-devel] [PULL 12/12] block/gluster: glfs_lseek() workaround Jeff Cody
@ 2017-05-30 9:25 ` Stefan Hajnoczi
12 siblings, 0 replies; 39+ messages in thread
From: Stefan Hajnoczi @ 2017-05-30 9:25 UTC (permalink / raw)
To: Jeff Cody; +Cc: qemu-block, peter.maydell, qemu-devel, stefanha
[-- Attachment #1: Type: text/plain, Size: 2096 bytes --]
On Fri, May 26, 2017 at 03:23:52PM -0400, Jeff Cody wrote:
> The following changes since commit 9964e96dc9999cf7f7c936ee854a795415d19b60:
>
> Merge remote-tracking branch 'jasowang/tags/net-pull-request' into staging (2017-05-23 15:01:31 +0100)
>
> are available in the git repository at:
>
> git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request
>
> for you to fetch changes up to 223a23c198787328ae75bc65d84edf5fde33c0b6:
>
> block/gluster: glfs_lseek() workaround (2017-05-24 16:44:46 -0400)
>
> ----------------------------------------------------------------
> Block patches
> ----------------------------------------------------------------
>
> Jeff Cody (1):
> block/gluster: glfs_lseek() workaround
>
> Paolo Bonzini (11):
> blockjob: remove unnecessary check
> blockjob: remove iostatus_reset callback
> blockjob: introduce block_job_early_fail
> blockjob: introduce block_job_pause/resume_all
> blockjob: separate monitor and blockjob APIs
> blockjob: move iostatus reset inside block_job_user_resume
> blockjob: introduce block_job_cancel_async, check iostatus invariants
> blockjob: group BlockJob transaction functions together
> blockjob: strengthen a bit test-blockjob-txn
> blockjob: reorganize block_job_completed_txn_abort
> blockjob: use deferred_to_main_loop to indicate the coroutine has
> ended
>
> block/backup.c | 2 +-
> block/commit.c | 2 +-
> block/gluster.c | 18 +-
> block/io.c | 19 +-
> block/mirror.c | 2 +-
> blockdev.c | 1 -
> blockjob.c | 750 ++++++++++++++++++++++++-------------------
> include/block/blockjob.h | 16 -
> include/block/blockjob_int.h | 27 +-
> tests/test-blockjob-txn.c | 7 +-
> tests/test-blockjob.c | 10 +-
> 11 files changed, 463 insertions(+), 391 deletions(-)
>
> --
> 2.9.3
>
>
Thanks, applied to my staging tree:
https://github.com/stefanha/qemu/commits/staging
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 39+ messages in thread
* [Qemu-devel] [PULL 00/12] Block patches
@ 2019-08-27 20:16 Stefan Hajnoczi
2019-09-03 10:05 ` Peter Maydell
0 siblings, 1 reply; 39+ messages in thread
From: Stefan Hajnoczi @ 2019-08-27 20:16 UTC (permalink / raw)
To: qemu-devel
Cc: Fam Zheng, Kevin Wolf, qemu-block, Peter Maydell, Max Reitz,
Stefan Hajnoczi, John Snow
The following changes since commit dac03af5d5482ec7ee9c23db467bb7230b33c0d9:
Merge remote-tracking branch 'remotes/rth/tags/pull-axp-20190825' into staging (2019-08-27 10:00:51 +0100)
are available in the Git repository at:
https://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 5396234b96a2ac743f48644529771498e036e698:
block/qcow2: implement .bdrv_co_pwritev(_compressed)_part (2019-08-27 14:58:42 +0100)
----------------------------------------------------------------
Pull request
----------------------------------------------------------------
Vladimir Sementsov-Ogievskiy (12):
util/iov: introduce qemu_iovec_init_extended
util/iov: improve qemu_iovec_is_zero
block/io: refactor padding
block: define .*_part io handlers in BlockDriver
block/io: bdrv_co_do_copy_on_readv: use and support qiov_offset
block/io: bdrv_co_do_copy_on_readv: lazy allocation
block/io: bdrv_aligned_preadv: use and support qiov_offset
block/io: bdrv_aligned_pwritev: use and support qiov_offset
block/io: introduce bdrv_co_p{read, write}v_part
block/qcow2: refactor qcow2_co_preadv to use buffer-based io
block/qcow2: implement .bdrv_co_preadv_part
block/qcow2: implement .bdrv_co_pwritev(_compressed)_part
block/qcow2.h | 1 +
include/block/block_int.h | 21 ++
include/qemu/iov.h | 10 +-
block/backup.c | 2 +-
block/io.c | 541 +++++++++++++++++++++++---------------
block/qcow2-cluster.c | 14 +-
block/qcow2.c | 131 +++++----
qemu-img.c | 4 +-
util/iov.c | 153 +++++++++--
9 files changed, 568 insertions(+), 309 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 39+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] Block patches
2019-08-27 20:16 [Qemu-devel] " Stefan Hajnoczi
@ 2019-09-03 10:05 ` Peter Maydell
0 siblings, 0 replies; 39+ messages in thread
From: Peter Maydell @ 2019-09-03 10:05 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: Fam Zheng, Kevin Wolf, Qemu-block, QEMU Developers, Max Reitz,
John Snow
On Tue, 27 Aug 2019 at 21:16, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> The following changes since commit dac03af5d5482ec7ee9c23db467bb7230b33c0d9:
>
> Merge remote-tracking branch 'remotes/rth/tags/pull-axp-20190825' into staging (2019-08-27 10:00:51 +0100)
>
> are available in the Git repository at:
>
> https://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 5396234b96a2ac743f48644529771498e036e698:
>
> block/qcow2: implement .bdrv_co_pwritev(_compressed)_part (2019-08-27 14:58:42 +0100)
>
> ----------------------------------------------------------------
> Pull request
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/4.2
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 39+ messages in thread
end of thread, other threads:[~2019-09-03 10:07 UTC | newest]
Thread overview: 39+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-26 19:23 [Qemu-devel] [PULL 00/12] Block patches Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 01/12] blockjob: remove unnecessary check Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 02/12] blockjob: remove iostatus_reset callback Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 03/12] blockjob: introduce block_job_early_fail Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 04/12] blockjob: introduce block_job_pause/resume_all Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 05/12] blockjob: separate monitor and blockjob APIs Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 06/12] blockjob: move iostatus reset inside block_job_user_resume Jeff Cody
2017-05-26 19:23 ` [Qemu-devel] [PULL 07/12] blockjob: introduce block_job_cancel_async, check iostatus invariants Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 08/12] blockjob: group BlockJob transaction functions together Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 09/12] blockjob: strengthen a bit test-blockjob-txn Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 10/12] blockjob: reorganize block_job_completed_txn_abort Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 11/12] blockjob: use deferred_to_main_loop to indicate the coroutine has ended Jeff Cody
2017-05-26 19:24 ` [Qemu-devel] [PULL 12/12] block/gluster: glfs_lseek() workaround Jeff Cody
2017-05-30 9:25 ` [Qemu-devel] [Qemu-block] [PULL 00/12] Block patches Stefan Hajnoczi
-- strict thread matches above, loose matches on Subject: below --
2019-08-27 20:16 [Qemu-devel] " Stefan Hajnoczi
2019-09-03 10:05 ` Peter Maydell
2017-04-21 13:46 Jeff Cody
2017-04-21 16:55 ` Peter Maydell
2016-06-07 14:26 Stefan Hajnoczi
2016-06-07 15:34 ` Peter Maydell
2016-02-29 20:08 Jeff Cody
2016-03-01 10:34 ` Peter Maydell
2015-10-29 18:09 Stefan Hajnoczi
2015-10-30 9:40 ` Peter Maydell
2015-10-30 14:19 ` Markus Armbruster
2015-10-30 17:37 ` Peter Maydell
2015-10-30 21:59 ` Peter Maydell
2015-01-23 18:20 Kevin Wolf
2015-01-26 10:16 ` Peter Maydell
2012-08-06 20:44 Kevin Wolf
2012-08-07 8:28 ` Paolo Bonzini
2012-08-07 15:36 ` Anthony Liguori
2012-06-04 11:13 Kevin Wolf
2012-06-07 1:17 ` Anthony Liguori
2012-06-08 9:48 ` Kevin Wolf
2012-06-08 14:07 ` Anthony Liguori
2012-06-08 14:57 ` Kevin Wolf
2011-06-08 13:48 Kevin Wolf
2011-06-09 12:39 ` Anthony Liguori
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).