From: Kevin Wolf <kwolf@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-block@nongnu.org, eblake@redhat.com, jsnow@redhat.com,
armbru@redhat.com, jcody@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 02/42] blockjob: Wrappers for progress counter access
Date: Mon, 14 May 2018 12:16:36 +0200 [thread overview]
Message-ID: <20180514101636.GB6665@localhost.localdomain> (raw)
In-Reply-To: <aa12ad3e-c335-2e8a-e9ac-d55ba0fb91d5@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4050 bytes --]
Am 12.05.2018 um 00:12 hat Max Reitz geschrieben:
> On 2018-05-09 18:25, Kevin Wolf wrote:
> > Block job drivers are not expected to mess with the internals of the
> > BlockJob object, so provide wrapper functions for one of the cases where
> > they still do it: Updating the progress counter.
> >
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > Reviewed-by: Eric Blake <eblake@redhat.com>
> > ---
> > include/block/blockjob.h | 19 +++++++++++++++++++
> > block/backup.c | 22 +++++++++++++---------
> > block/commit.c | 16 ++++++++--------
> > block/mirror.c | 11 +++++------
> > block/stream.c | 14 ++++++++------
> > blockjob.c | 10 ++++++++++
> > 6 files changed, 63 insertions(+), 29 deletions(-)
> >
>
> [...]
>
> > diff --git a/block/backup.c b/block/backup.c
> > index 453cd62c24..5d95805472 100644
> > --- a/block/backup.c
> > +++ b/block/backup.c
> >
>
> [...]
>
> > @@ -420,8 +421,9 @@ static void backup_incremental_init_copy_bitmap(BackupBlockJob *job)
> > bdrv_set_dirty_iter(dbi, next_cluster * job->cluster_size);
> > }
> >
> > - job->common.offset = job->common.len -
> > - hbitmap_count(job->copy_bitmap) * job->cluster_size;
> > + /* TODO block_job_progress_set_remaining() would make more sense */
>
> Extremely true, especially considering that at least there was an
> assignment before.
>
> > + block_job_progress_update(&job->common,
> > + job->len - hbitmap_count(job->copy_bitmap) * job->cluster_size);
>
> Now, with an incremental update, you have to know that the progress was
> 0 before this call to make any sense of it.
>
> I could ask: Why don't you just resolve the TODO immediately with
>
> block_job_progress_set_remaining(&job->common,
> hbitmap_count(job->copy_bitmap) * job->cluster_size);
>
> ?
>
> I suppose one possible answer is that this series has 42 patches as it
> is, but I have to say that it took me more time to figure this hunk out
> than it would have taken me to acknowledge the above change.
>
> Considering that job->len and job->common.len are now separate after
> this patch, and that there is only a single other
> block_job_progress_update() call in this file, I can't see any side effects.
Basically just because I tried to make the naive change whenever I had
to touch something that isn't what the patch changes as its main
purpose. The old code changed offset rather than len, so I used the
function that does the same.
If I reduced len instead of increasing offset, I suppose that at least a
few test cases would have to be updated etc. and who knows what else
(QMP clients shouldn't rely on the current way, but do they?).
I'd rather not make such a change as a side effect of a patch that tries
to do something quite different.
> >
> > bdrv_dirty_iter_free(dbi);
> > }
>
> [...]
>
> > diff --git a/block/mirror.c b/block/mirror.c
> > index 99da9c0858..77ee9b1791 100644
> > --- a/block/mirror.c
> > +++ b/block/mirror.c
>
> [...]
>
> > @@ -792,11 +792,10 @@ static void coroutine_fn mirror_run(void *opaque)
> > block_job_pause_point(&s->common);
> >
> > cnt = bdrv_get_dirty_count(s->dirty_bitmap);
> > - /* s->common.offset contains the number of bytes already processed so
> > - * far, cnt is the number of dirty bytes remaining and
> > - * s->bytes_in_flight is the number of bytes currently being
> > - * processed; together those are the current total operation length */
> > - s->common.len = s->common.offset + s->bytes_in_flight + cnt;
> > + /* cnt is the number of dirty bytes remaining and s->bytes_in_flight is
> > + * the number of bytes currently being processed; together those are
> > + * the current total operation length */
>
> No, together, those are the current remaining operation length.
Thanks, will fix.
Kevin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
next prev parent reply other threads:[~2018-05-14 10:16 UTC|newest]
Thread overview: 146+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-09 16:25 [Qemu-devel] [PATCH 00/42] Generic background jobs Kevin Wolf
2018-05-09 16:25 ` [Qemu-devel] [PATCH 01/42] blockjob: Fix assertion in block_job_finalize() Kevin Wolf
2018-05-09 17:28 ` Eric Blake
2018-05-11 21:55 ` Max Reitz
2018-05-11 22:29 ` John Snow
2018-05-09 16:25 ` [Qemu-devel] [PATCH 02/42] blockjob: Wrappers for progress counter access Kevin Wolf
2018-05-11 22:12 ` Max Reitz
2018-05-14 10:16 ` Kevin Wolf [this message]
2018-05-14 19:14 ` John Snow
2018-05-09 16:25 ` [Qemu-devel] [PATCH 03/42] blockjob: Move RateLimit to BlockJob Kevin Wolf
2018-05-11 22:14 ` Max Reitz
2018-05-14 19:19 ` John Snow
2018-05-09 16:25 ` [Qemu-devel] [PATCH 04/42] blockjob: Implement block_job_set_speed() centrally Kevin Wolf
2018-05-11 22:19 ` Max Reitz
2018-05-14 19:27 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 05/42] blockjob: Introduce block_job_ratelimit_get_delay() Kevin Wolf
2018-05-11 22:25 ` Max Reitz
2018-05-14 19:36 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 06/42] blockjob: Add block_job_driver() Kevin Wolf
2018-05-11 22:28 ` Max Reitz
2018-05-14 19:43 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 07/42] blockjob: Remove block_job_pause/resume_all() Kevin Wolf
2018-05-09 17:30 ` Eric Blake
2018-05-11 22:30 ` Max Reitz
2018-05-14 19:44 ` John Snow
2018-05-14 19:45 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 08/42] job: Create Job, JobDriver and job_create() Kevin Wolf
2018-05-11 22:46 ` Max Reitz
2018-05-14 12:58 ` Kevin Wolf
2018-05-14 19:57 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 09/42] job: Rename BlockJobType into JobType Kevin Wolf
2018-05-11 22:48 ` Max Reitz
2018-05-14 20:05 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 10/42] job: Add JobDriver.job_type Kevin Wolf
2018-05-11 22:53 ` Max Reitz
2018-05-14 11:31 ` Kevin Wolf
2018-05-14 20:12 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 11/42] job: Add job_delete() Kevin Wolf
2018-05-11 22:56 ` Max Reitz
2018-05-14 20:15 ` John Snow
2018-05-16 17:54 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 12/42] job: Maintain a list of all jobs Kevin Wolf
2018-05-14 13:59 ` Max Reitz
2018-05-14 20:42 ` John Snow
2018-05-16 18:03 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 13/42] job: Move state transitions to Job Kevin Wolf
2018-05-14 14:20 ` Max Reitz
2018-05-14 20:58 ` John Snow
2018-05-16 18:11 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 14/42] job: Add reference counting Kevin Wolf
2018-05-14 14:29 ` Max Reitz
2018-05-14 21:34 ` John Snow
2018-05-15 9:06 ` Kevin Wolf
2018-05-16 18:17 ` Eric Blake
2018-05-16 20:56 ` Kevin Wolf
2018-05-16 21:25 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 15/42] job: Move cancelled to Job Kevin Wolf
2018-05-14 14:39 ` Max Reitz
2018-05-14 21:53 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 16/42] job: Add Job.aio_context Kevin Wolf
2018-05-14 15:20 ` Max Reitz
2018-05-14 22:02 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 17/42] job: Move defer_to_main_loop to Job Kevin Wolf
2018-05-14 15:52 ` Max Reitz
2018-05-15 12:17 ` Kevin Wolf
2018-05-16 10:51 ` Max Reitz
2018-05-16 18:32 ` Eric Blake
2018-05-14 22:33 ` John Snow
2018-05-15 12:22 ` Kevin Wolf
2018-05-16 18:37 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 18/42] job: Move coroutine and related code " Kevin Wolf
2018-05-14 16:47 ` Max Reitz
2018-05-14 23:02 ` John Snow
2018-05-16 16:50 ` Kevin Wolf
2018-05-16 17:38 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 19/42] job: Add job_sleep_ns() Kevin Wolf
2018-05-14 16:57 ` Max Reitz
2018-05-14 23:10 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 20/42] job: Move pause/resume functions to Job Kevin Wolf
2018-05-14 17:13 ` Max Reitz
2018-05-14 23:23 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 21/42] job: Replace BlockJob.completed with job_is_completed() Kevin Wolf
2018-05-14 17:33 ` Max Reitz
2018-05-14 23:43 ` John Snow
2018-05-09 16:26 ` [Qemu-devel] [PATCH 22/42] job: Move BlockJobCreateFlags to Job Kevin Wolf
2018-05-14 17:50 ` Max Reitz
2018-05-16 19:13 ` Eric Blake
2018-05-16 20:53 ` Kevin Wolf
2018-05-09 16:26 ` [Qemu-devel] [PATCH 23/42] blockjob: Split block_job_event_pending() Kevin Wolf
2018-05-14 17:56 ` Max Reitz
2018-05-16 19:15 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 24/42] job: Add job_event_*() Kevin Wolf
2018-05-14 18:09 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 25/42] job: Move single job finalisation to Job Kevin Wolf
2018-05-14 18:46 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 26/42] job: Convert block_job_cancel_async() " Kevin Wolf
2018-05-14 19:00 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 27/42] job: Add job_drain() Kevin Wolf
2018-05-14 19:26 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 28/42] job: Move .complete callback to Job Kevin Wolf
2018-05-14 19:37 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 29/42] job: Move job_finish_sync() " Kevin Wolf
2018-05-14 19:49 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 30/42] job: Switch transactions to JobTxn Kevin Wolf
2018-05-14 20:00 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 31/42] job: Move transactions to Job Kevin Wolf
2018-05-14 20:28 ` Max Reitz
2018-05-14 21:17 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 32/42] job: Move completion and cancellation " Kevin Wolf
2018-05-14 20:53 ` Max Reitz
2018-05-15 12:59 ` Kevin Wolf
2018-05-16 10:52 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 33/42] job: Add job_yield() Kevin Wolf
2018-05-14 20:59 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 34/42] job: Add job_dismiss() Kevin Wolf
2018-05-14 21:06 ` Max Reitz
2018-05-14 22:26 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 35/42] job: Add job_is_ready() Kevin Wolf
2018-05-14 21:11 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 36/42] job: Add job_transition_to_ready() Kevin Wolf
2018-05-14 21:22 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 37/42] job: Move progress fields to Job Kevin Wolf
2018-05-14 21:33 ` Max Reitz
2018-05-16 21:23 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 38/42] job: Add JOB_STATUS_CHANGE QMP event Kevin Wolf
2018-05-14 22:11 ` Max Reitz
2018-05-16 16:15 ` Kevin Wolf
2018-05-16 19:26 ` Eric Blake
2018-05-16 20:46 ` Kevin Wolf
2018-05-16 20:53 ` Eric Blake
2018-05-09 16:26 ` [Qemu-devel] [PATCH 39/42] job: Add lifecycle QMP commands Kevin Wolf
2018-05-14 22:31 ` Max Reitz
2018-05-15 14:08 ` Kevin Wolf
2018-05-16 10:54 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 40/42] job: Add query-jobs QMP command Kevin Wolf
2018-05-14 23:09 ` Max Reitz
2018-05-16 11:21 ` Kevin Wolf
2018-05-16 11:27 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 41/42] iotests: Move qmp_to_opts() to VM Kevin Wolf
2018-05-14 23:11 ` Max Reitz
2018-05-09 16:26 ` [Qemu-devel] [PATCH 42/42] qemu-iotests: Test job-* with block jobs Kevin Wolf
2018-05-14 23:44 ` Max Reitz
2018-05-17 13:50 ` Kevin Wolf
2018-05-28 13:07 ` Max Reitz
2018-05-15 14:15 ` [Qemu-devel] [PATCH 00/42] Generic background jobs Kevin Wolf
2018-05-15 14:43 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180514101636.GB6665@localhost.localdomain \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=jcody@redhat.com \
--cc=jsnow@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).