[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for Kevin 00/19] Block job improvements part 1
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL for Kevin 00/19] Block job improvements part 1 |
Date: |
Fri, 28 Sep 2012 17:22:43 +0200 |
Kevin,
the following changes since commit ac05f3492421caeb05809ffa02c6198ede179e43:
add a boot parameter to set reboot timeout (2012-09-25 20:05:04 -0500)
are available in the git repository at:
git://github.com/bonzini/qemu.git blkmirror-job-1.3-part1
for you to fetch changes up to ed306a929f16fda8a85561430b1ac370bde65097:
qemu-iotests: add tests for streaming error handling (2012-09-27 15:11:22
+0200)
This message has the diff from my post of Sep 25th. You reviewed 18 patches,
these are 19 because of the new "qmp: add 'busy' member to BlockJobInfo" patch.
----------------------------------------------------------------
Jeff Cody (1):
blockdev: rename block_stream_cb to a generic block_job_cb
Paolo Bonzini (18):
qerror/block: introduce QERR_BLOCK_JOB_NOT_ACTIVE
block: fix documentation of block_job_cancel_sync
block: move job APIs to separate files
block: add block_job_query
qmp: add 'busy' member to BlockJobInfo
block: add support for job pause/resume
qmp: add block-job-pause and block-job-resume
qemu-iotests: add test for pausing a streaming operation
block: rename block_job_complete to block_job_completed
iostatus: rename BlockErrorAction, BlockQMPEventAction
iostatus: move BlockdevOnError declaration to QAPI
iostatus: change is_read to a bool
iostatus: reorganize io error code
block: introduce block job error
stream: add on-error argument
blkdebug: process all set_state rules in the old state
qemu-iotests: map underscore to dash in QMP argument names
qemu-iotests: add tests for streaming error handling
Makefile.objs | 5 +-
QMP/qmp-events.txt | 22 ++++
block.c | 187 ++++++++----------------------
block.h | 20 ++--
block/Makefile.objs | 3 +-
block/blkdebug.c | 12 +-
block/stream.c | 33 +++++-
block_int.h | 162 ++------------------------
blockdev.c | 86 +++++++++-----
blockjob.c | 249 ++++++++++++++++++++++++++++++++++++++++
blockjob.h | 243 +++++++++++++++++++++++++++++++++++++++
hmp-commands.hx | 35 +++++-
hmp.c | 26 ++++-
hmp.h | 2 +
hw/fdc.c | 4 +-
hw/ide/core.c | 22 +---
hw/ide/pci.c | 4 +-
hw/scsi-disk.c | 25 ++--
hw/scsi-generic.c | 4 +-
hw/virtio-blk.c | 23 ++--
monitor.c | 1 +
monitor.h | 1 +
qapi-schema.json | 91 ++++++++++++++-
qemu-tool.c | 6 +
qerror.h | 6 +
qmp-commands.hx | 14 ++-
tests/qemu-iotests/030 | 260 +++++++++++++++++++++++++++++++++++++++++-
tests/qemu-iotests/030.out | 4 +-
tests/qemu-iotests/group | 2 +-
tests/qemu-iotests/iotests.py | 15 ++-
trace-events | 4 +-
31 file modificati, 1152 inserzioni(+), 419 rimozioni(-)
create mode 100644 blockjob.c
create mode 100644 blockjob.h
diff --git a/blockjob.c b/blockjob.c
index 5dd9c1e..b5c16f3 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -198,6 +198,7 @@ BlockJobInfo *block_job_query(BlockJob *job)
info->type = g_strdup(job->job_type->job_type);
info->device = g_strdup(bdrv_get_device_name(job->bs));
info->len = job->len;
+ info->busy = job->busy;
info->paused = job->paused;
info->offset = job->offset;
info->speed = job->speed;
diff --git a/blockjob.h b/blockjob.h
index 45cc03d..c2261a9 100644
--- a/blockjob.h
+++ b/blockjob.h
@@ -199,7 +199,8 @@ void block_job_resume(BlockJob *job);
* block_job_is_paused:
* @job: The job being queried.
*
- * Returns whether the job is currently paused.
+ * Returns whether the job is currently paused, or will pause
+ * as soon as it reaches a sleeping point.
*/
bool block_job_is_paused(BlockJob *job);
@@ -207,12 +208,10 @@ bool block_job_is_paused(BlockJob *job);
* block_job_cancel_sync:
* @job: The job to be canceled.
*
- * Synchronously cancel the job and wait for it to reach a quiescent
- * state. Note that the completion callback will still be called
- * asynchronously, hence it is *not* valid to call #bdrv_delete
- * immediately after #block_job_cancel_sync. Users of block jobs
- * will usually protect the BlockDriverState objects with a reference
- * count, should this be a concern.
+ * Synchronously cancel the job. The completion callback is called
+ * before the function returns. The job may actually complete
+ * instead of canceling itself; the circumstances under which this
+ * happens depend on the kind of job that is active.
*
* Returns the return value from the job if the job actually completed
* during the call, or -ECANCELED if it was canceled.
diff --git a/qapi-schema.json b/qapi-schema.json
index 8719a9d..d31ff0e 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1100,11 +1100,11 @@
# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
# or BLOCK_JOB_ERROR)
#
+# @enospc: same as @stop on ENOSPC, same as @report otherwise.
+#
# @stop: for guest operations, stop the virtual machine;
# for jobs, pause the job
#
-# @enospc: same as @stop on ENOSPC, same as @report otherwise.
-#
# Since: 1.3
##
{ 'enum': 'BlockdevOnError',
@@ -1121,19 +1121,23 @@
#
# @len: the maximum progress value
#
-# @paused: whether the job is paused (since 1.2)
+# @busy: false if the job is known to be in a quiescent state, with
+# no pending I/O. Since 1.3.
+#
+# @paused: whether the job is paused or, if @busy is true, will
+# pause itself as soon as possible. Since 1.3.
#
# @offset: the current progress value
#
# @speed: the rate limit, bytes per second
#
-# @io-status: the status of the job (since 1.2)
+# @io-status: the status of the job (since 1.3)
#
# Since: 1.1
##
{ 'type': 'BlockJobInfo',
'data': {'type': 'str', 'device': 'str', 'len': 'int',
- 'offset': 'int', 'paused': 'bool', 'speed': 'int',
+ 'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
'io-status': 'BlockDeviceIoStatus'} }
##
@@ -1833,7 +1837,7 @@
#
# @on-error: #optional the action to take on an error (default report).
# 'stop' and 'enospc' can only be used if the block device
-# supports io-status (see BlockInfo). Since 1.2.
+# supports io-status (see BlockInfo). Since 1.3.
#
# Returns: Nothing on success
# If @device does not exist, DeviceNotFound
@@ -1886,7 +1890,8 @@
#
# @device: the device name
#
-# @force: #optional whether to allow cancellation of a paused job (default
false)
+# @force: #optional whether to allow cancellation of a paused job (default
+# false). Since 1.3.
#
# Returns: Nothing on success
# If no background operation is active on this device, DeviceNotActive
--
1.7.12
- [Qemu-devel] [PULL for Kevin 00/19] Block job improvements part 1,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 01/19] qerror/block: introduce QERR_BLOCK_JOB_NOT_ACTIVE, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 02/19] blockdev: rename block_stream_cb to a generic block_job_cb, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 03/19] block: fix documentation of block_job_cancel_sync, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 04/19] block: move job APIs to separate files, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 06/19] qmp: add 'busy' member to BlockJobInfo, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 05/19] block: add block_job_query, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 09/19] qemu-iotests: add test for pausing a streaming operation, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 08/19] qmp: add block-job-pause and block-job-resume, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 07/19] block: add support for job pause/resume, Paolo Bonzini, 2012/09/28
- [Qemu-devel] [PATCH 10/19] block: rename block_job_complete to block_job_completed, Paolo Bonzini, 2012/09/28