From: Kevin Wolf <kwolf@redhat.com>
To: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Cc: qemu-block@nongnu.org, Hanna Reitz <hreitz@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>, John Snow <jsnow@redhat.com>,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
Wen Congyang <wencongyang2@huawei.com>,
Xie Changlong <xiechanglong.d@gmail.com>,
Markus Armbruster <armbru@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>, Fam Zheng <fam@euphon.net>,
qemu-devel@nongnu.org
Subject: Re: [PATCH v6 02/18] job.h: categorize fields in struct Job
Date: Fri, 3 Jun 2022 18:00:20 +0200 [thread overview]
Message-ID: <YpowFFFD0hKOFtWF@redhat.com> (raw)
In-Reply-To: <20220314133707.2206082-3-eesposit@redhat.com>
Am 14.03.2022 um 14:36 hat Emanuele Giuseppe Esposito geschrieben:
> Categorize the fields in struct Job to understand which ones
> need to be protected by the job mutex and which don't.
>
> Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
I suppose it might be a result of moving things back and forth between
patches, but this patch doesn't really define separate categories.
> include/qemu/job.h | 59 ++++++++++++++++++++++++++--------------------
> 1 file changed, 34 insertions(+), 25 deletions(-)
>
> diff --git a/include/qemu/job.h b/include/qemu/job.h
> index d1192ffd61..86ec46c09e 100644
> --- a/include/qemu/job.h
> +++ b/include/qemu/job.h
> @@ -40,27 +40,50 @@ typedef struct JobTxn JobTxn;
> * Long-running operation.
> */
> typedef struct Job {
> +
> + /* Fields set at initialization (job_create), and never modified */
This is clearly a comment starting a category, but I can't see any other
comment indicating that another category would start.
> /** The ID of the job. May be NULL for internal jobs. */
> char *id;
>
> - /** The type of this job. */
> + /**
> + * The type of this job.
> + * All callbacks are called with job_mutex *not* held.
> + */
> const JobDriver *driver;
>
> - /** Reference count of the block job */
> - int refcnt;
> -
> - /** Current state; See @JobStatus for details. */
> - JobStatus status;
> -
> - /** AioContext to run the job coroutine in */
> - AioContext *aio_context;
> -
> /**
> * The coroutine that executes the job. If not NULL, it is reentered when
> * busy is false and the job is cancelled.
> + * Initialized in job_start()
> */
> Coroutine *co;
>
> + /** True if this job should automatically finalize itself */
> + bool auto_finalize;
> +
> + /** True if this job should automatically dismiss itself */
> + bool auto_dismiss;
> +
> + /** The completion function that will be called when the job completes. */
> + BlockCompletionFunc *cb;
> +
> + /** The opaque value that is passed to the completion function. */
> + void *opaque;
> +
> + /* ProgressMeter API is thread-safe */
> + ProgressMeter progress;
> +
> +
And the end of the series, this is where the cutoff is and the rest is:
/** Protected by job_mutex */
With this in mind, it seems correct to me that everything above progress
is indeed never changed after creating the job. Of course, it's hard to
tell without looking at the final result, so if you have to respin for
some reason, it would be good to mark the end of the section more
clearly for the intermediate state to make sense.
Kevin
next prev parent reply other threads:[~2022-06-03 16:07 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-14 13:36 [PATCH v6 00/18] job: replace AioContext lock with job_mutex Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 01/18] job.c: make job_mutex and job_lock/unlock() public Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 02/18] job.h: categorize fields in struct Job Emanuele Giuseppe Esposito
2022-06-03 16:00 ` Kevin Wolf [this message]
2022-06-07 13:20 ` Emanuele Giuseppe Esposito
2022-06-07 15:41 ` Paolo Bonzini
2022-06-08 7:28 ` Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 03/18] job.c: API functions not used outside should be static Emanuele Giuseppe Esposito
2022-06-09 9:16 ` Stefan Hajnoczi
2022-03-14 13:36 ` [PATCH v6 04/18] aio-wait.h: introduce AIO_WAIT_WHILE_UNLOCKED Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 05/18] job.h: add _locked duplicates for job API functions called with and without job_mutex Emanuele Giuseppe Esposito
2022-06-03 16:17 ` Kevin Wolf
2022-06-07 13:23 ` Emanuele Giuseppe Esposito
2022-06-09 9:32 ` Stefan Hajnoczi
2022-03-14 13:36 ` [PATCH v6 06/18] jobs: protect jobs with job_lock/unlock Emanuele Giuseppe Esposito
2022-06-03 16:40 ` Kevin Wolf
2022-06-07 13:17 ` Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 07/18] jobs: add job lock in find_* functions Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 08/18] jobs: use job locks also in the unit tests Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 09/18] block/mirror.c: use of job helpers in drivers to avoid TOC/TOU Emanuele Giuseppe Esposito
2022-03-14 13:36 ` [PATCH v6 10/18] jobs: rename static functions called with job_mutex held Emanuele Giuseppe Esposito
2022-06-09 9:47 ` Stefan Hajnoczi
2022-03-14 13:37 ` [PATCH v6 11/18] job.h: rename job API " Emanuele Giuseppe Esposito
2022-06-09 9:48 ` Stefan Hajnoczi
2022-03-14 13:37 ` [PATCH v6 12/18] block_job: rename block_job " Emanuele Giuseppe Esposito
2022-06-09 9:47 ` Stefan Hajnoczi
2022-03-14 13:37 ` [PATCH v6 13/18] job.h: define unlocked functions Emanuele Giuseppe Esposito
2022-06-09 9:41 ` Stefan Hajnoczi
2022-03-14 13:37 ` [PATCH v6 14/18] commit and mirror: create new nodes using bdrv_get_aio_context, and not the job aiocontext Emanuele Giuseppe Esposito
2022-03-14 13:37 ` [PATCH v6 15/18] job: detect change of aiocontext within job coroutine Emanuele Giuseppe Esposito
2022-06-03 16:59 ` Kevin Wolf
2022-06-07 13:28 ` Emanuele Giuseppe Esposito
2022-03-14 13:37 ` [PATCH v6 16/18] jobs: protect job.aio_context with BQL and job_mutex Emanuele Giuseppe Esposito
2022-03-14 13:37 ` [PATCH v6 17/18] job.c: enable job lock/unlock and remove Aiocontext locks Emanuele Giuseppe Esposito
2022-03-14 13:37 ` [PATCH v6 18/18] block_job_query: remove atomic read Emanuele Giuseppe Esposito
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=YpowFFFD0hKOFtWF@redhat.com \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=eesposit@redhat.com \
--cc=fam@euphon.net \
--cc=hreitz@redhat.com \
--cc=jsnow@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
--cc=wencongyang2@huawei.com \
--cc=xiechanglong.d@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.