From: Stefan Hajnoczi <stefanha@redhat.com>
To: Fam Zheng <famz@redhat.com>
Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org,
qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] Revert "blockdev: add note that block_job_cb() must be thread-safe"
Date: Thu, 15 Oct 2015 17:17:38 +0200 [thread overview]
Message-ID: <20151015151738.GE21733@stefanha-thinkpad.redhat.com> (raw)
In-Reply-To: <1190188629.36893385.1444877487828.JavaMail.zimbra@redhat.com>
On Wed, Oct 14, 2015 at 10:51:27PM -0400, Fam Zheng wrote:
>
>
> ----- Original Message -----
> > On Tue, Oct 13, 2015 at 06:16:15PM +0800, Fam Zheng wrote:
> > > This reverts commit 723c5d93c51bdb3adbc238ce90195c0864aa6cd5.
> > >
> > > block_job_cb is called by block_job_completed, which is always called in
> > > a main loop bottom half in existing block jobs. So we don't need to
> > > worry about thread-safety here.
> >
> > This is not correct. Search for block_job_completed() callers.
> >
> > For example, block/stream.c has early exit cases that call
> > block_job_completed() from the coroutine (i.e. dispatched from a
> > coroutine in another AioContext+IOThread).
> >
> > I think you are assuming that all block_job_completed() callers are
> > called from a function scheduled using block_job_defer_to_main_loop().
>
> No, I'm assuming all block_job_completed() callers are (and they should
> be) from main thread. Even the early exit cases in stream are so, because
> they are in the same thread as stream_start, which is main thread.
You are right, the early block_job_completed() calls in stream.c happen
in the main thread.
I'm concerned that we have no comments or assertions to check that the
assumption holds. Luckily only stream.c relies on the trick of calling
block_job_completed() directly but knowing it runs from the main thread.
I'll send a patch to fix stream.c. It needs to be done anyway since
there is a memory leak in the early block_job_completed() stream.c code.
Will CC you.
Stefan
prev parent reply other threads:[~2015-10-15 15:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-13 10:16 [Qemu-devel] [PATCH] Revert "blockdev: add note that block_job_cb() must be thread-safe" Fam Zheng
2015-10-13 11:21 ` Kevin Wolf
2015-10-13 12:33 ` Fam Zheng
2015-10-14 13:51 ` Stefan Hajnoczi
2015-10-15 2:51 ` Fam Zheng
2015-10-15 15:17 ` Stefan Hajnoczi [this message]
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=20151015151738.GE21733@stefanha-thinkpad.redhat.com \
--to=stefanha@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@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).