Skip to content

RFC Generic background jobs

Kevin Wolf qemu-devel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest33 patches 8 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/33blockjob: Wrappers for progress counter accessblock/backup.c block/commit.c block/mirror.c +3 more+63 -291 reply
2/33blockjob: Move RateLimit to BlockJobblock/backup.c block/commit.c block/mirror.c +2 more+13 -121 reply
3/33blockjob: Implement block_job_set_speed() centrallyblock/backup.c block/commit.c block/mirror.c +4 more+6 -661 reply
4/33blockjob: Introduce block_job_ratelimit_get_delay()block/backup.c block/commit.c block/mirror.c +3 more+29 -191 reply
5/33blockjob: Add block_job_driver()block/backup.c blockjob.c include/block/blockjob.h+17 -31 reply
6/33blockjob: Remove block_job_pause/resume_all()blockjob.c include/block/blockjob_int.h+0 -410 replies
7/33job: Create Job, JobDriver and job_create()MAINTAINERS Makefile.objs block/backup.c +11 more+169 -440 replies
8/33job: Rename BlockJobType into JobTypeblock/backup.c block/commit.c block/mirror.c +4 more+16 -161 reply
9/33job: Add JobDriver.job_typeblock/backup.c block/commit.c block/mirror.c +5 more+33 -170 replies
10/33job: Add job_delete()blockjob.c include/qemu/job.h job.c+10 -21 reply
11/33job: Maintain a list of all jobsblockjob.c include/block/blockjob.h include/qemu/job.h +1 more+75 -250 replies
12/33job: Move state transitions to Jobblock/trace-events blockjob.c include/block/blockjob.h +5 more+117 -1110 replies
13/33job: Add reference countingblock/backup.c block/commit.c block/mirror.c +10 more+76 -580 replies
14/33job: Move cancelled to Jobblock/backup.c block/commit.c block/mirror.c +8 more+50 -520 replies
15/33job: Add Job.aio_contextblockjob.c include/qemu/job.h job.c+13 -30 replies
16/33job: Move defer_to_main_loop to Jobblock/backup.c block/commit.c block/mirror.c +9 more+98 -1100 replies
17/33job: Move coroutine and related code to Jobblock/backup.c block/commit.c block/mirror.c +11 more+294 -2900 replies
18/33job: Add job_sleep_ns()block/backup.c block/commit.c block/mirror.c +8 more+60 -490 replies
19/33job: Move pause/resume functions to Jobblock/backup.c block/commit.c block/mirror.c +10 more+117 -940 replies
20/33job: Replace BlockJob.completed with job_is_completed()blockjob.c include/block/blockjob.h include/qemu/job.h +2 more+34 -140 replies
21/33job: Move BlockJobCreateFlags to Jobblock/commit.c block/mirror.c block/replication.c +10 more+53 -570 replies
22/33blockjob: Split block_job_event_pending()blockjob.c+18 -90 replies
23/33job: Add job_event_*()blockjob.c include/block/blockjob.h include/qemu/job.h +1 more+74 -140 replies
24/33job: Move single job finalisation to Jobblock/backup.c block/commit.c block/mirror.c +7 more+194 -1810 replies
25/33job: Convert block_job_cancel_async() to Jobblock/mirror.c blockjob.c include/block/blockjob.h +1 more+21 -200 replies
26/33job: Add job_drain()block/backup.c block/commit.c block/mirror.c +8 more+55 -100 replies
27/33job: Move .complete callback to Jobblock/mirror.c blockdev.c blockjob.c +6 more+43 -480 replies
28/33job: Move job_finish_sync() to Jobblockjob.c include/qemu/job.h job.c+46 -460 replies
29/33job: Switch transactions to JobTxnblock/backup.c blockdev.c blockjob.c +5 more+54 -480 replies
30/33job: Move transactions to Jobblockdev.c blockjob.c include/block/blockjob.h +5 more+303 -3220 replies
31/33job: Move completion and cancellation to Jobblock.c block/backup.c block/commit.c +15 more+157 -1920 replies
32/33job: Add job_yield()block/backup.c block/mirror.c blockjob.c +4 more+27 -290 replies
33/33job: Add job_dismiss()blockdev.c blockjob.c include/block/blockjob.h +3 more+26 -270 replies

Reviews trailers per patch

6 of 33 patches have a Reviewed-by or Acked-by.

PatchEric Blake
1/33R-b
2/33R-b
3/33R-b
4/33R-b
5/33R-b
6/33
7/33
8/33R-b
9/33
10/33
11/33
12/33
13/33
14/33
15/33
16/33
17/33
18/33
19/33
20/33
21/33
22/33
23/33
24/33
25/33
26/33
27/33
28/33
29/33
30/33
31/33
32/33
33/33

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [Qemu-devel] [RFC PATCH 00/33] Generic background jobs

Before we can make x-blockdev-create a background job, we need to generalise the job infrastructure so that it can be used without any associated block node.

This series extracts a Job object from the block job infrastructure, which should contain everything related to jobs that doesn't require the block layer to be involved.

The split between BlockJob and Job is reasonably complete as of this RFC (though there are still some rough edges). Missing are mainly:

* Some cleanups. This means mostly TODOs left for functions moved to job.c that should become static again, but were still called from blockjob.c. At this point, most of these public declarations aren't actually necessary any more, or very little is missing to make them unnecessary.

* A QMP interface that can be used with non-block job. The existing block-job-* QMP commands will tell the user that they don't know the job if you pass the ID of a non-block job.

* The actual conversion of x-blockdev-create to Job, as a proof of concept that the generalised infrastructure actually works.

Kevin Wolf (33):
blockjob: Wrappers for progress counter access
blockjob: Move RateLimit to BlockJob
blockjob: Implement block_job_set_speed() centrally
blockjob: Introduce block_job_ratelimit_get_delay()
blockjob: Add block_job_driver()
blockjob: Remove block_job_pause/resume_all()
job: Create Job, JobDriver and job_create()
job: Rename BlockJobType into JobType
job: Add JobDriver.job_type
job: Add job_delete()
job: Maintain a list of all jobs
job: Move state transitions to Job
job: Add reference counting
job: Move cancelled to Job
job: Add Job.aio_context
job: Move defer_to_main_loop to Job
job: Move coroutine and related code to Job
job: Add job_sleep_ns()
job: Move pause/resume functions to Job
job: Replace BlockJob.completed with job_is_completed()
job: Move BlockJobCreateFlags to Job
blockjob: Split block_job_event_pending()
job: Add job_event_*()
job: Move single job finalisation to Job
job: Convert block_job_cancel_async() to Job
job: Add job_drain()
job: Move .complete callback to Job
job: Move job_finish_sync() to Job
job: Switch transactions to JobTxn
job: Move transactions to Job
job: Move completion and cancellation to Job
job: Add job_yield()
job: Add job_dismiss()

 qapi/block-core.json         |   28 +-
 include/block/block_int.h    |    2 +-
 include/block/blockjob.h     |  306 ++----------
 include/block/blockjob_int.h |  179 +------
 include/qemu/job.h           |  513 ++++++++++++++++++++
 block.c                      |    2 +-
 block/backup.c               |  111 +++--
 block/commit.c               |   75 ++-
 block/mirror.c               |  131 +++---
 block/replication.c          |   10 +-
 block/stream.c               |   68 ++-
 blockdev.c                   |   66 +--
 blockjob.c                   | 1054 ++++++------------------------------------
 job.c                        |  950 +++++++++++++++++++++++++++++++++++++
 qemu-img.c                   |   14 +-
 tests/test-bdrv-drain.c      |   61 +--
 tests/test-blockjob-txn.c    |   74 +--
 tests/test-blockjob.c        |  137 +++---
 MAINTAINERS                  |    2 +
 Makefile.objs                |    2 +-
 block/trace-events           |    5 -
 trace-events                 |    5 +
 22 files changed, 2049 insertions(+), 1746 deletions(-)
 create mode 100644 include/qemu/job.h
 create mode 100644 job.c
Signature · 1 line
2.13.6