From: Tejun Heo <tj@kernel.org>
To: James Bottomley <James.Bottomley@suse.de>
Cc: Linux SCSI List <linux-scsi@vger.kernel.org>,
FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] scsi: don't use execute_in_process_context()
Date: Wed, 15 Dec 2010 17:00:36 +0100 [thread overview]
Message-ID: <4D08E624.3020808@kernel.org> (raw)
In-Reply-To: <1292428486.4688.180.camel@mulgrave.site>
Hello,
On 12/15/2010 04:54 PM, James Bottomley wrote:
> On Wed, 2010-12-15 at 16:47 +0100, Tejun Heo wrote:
>> One way or the other, the current code is racy. The module can go
>> away while the work is still running. We'll have to add sync
>> interface for ew's, which conceptually is fine but is unnecessary with
>> the current code base. Let's do it when it actually is necessary.
>
> OK, ignoring the bickering over API, this is what I don't get.
>
> The executed function releases the parent reference as its last call.
> That will cause the freeing of the embedded work item and a cascade
> release of all the parents. If there's no more references, that will
> result in a final put of the module semaphore and rmmod will then
> proceed. What is racy about that? All the work structures and
> references have been freed before the module gets removed. Nothing
> blocks the execution thread in the function, so it exits long before the
> code path gets zeroed.
Because the final put and return aren't atomic against module
unloading. The worker can get preempted inbetween and the module can
be unloaded beneath it. When the worker is scheduled back, its text,
which was inside the module, is gone.
To make that working, it either has to do the final put from the code
outside of the module (in another module or built-in) or the module
unloading should guarantee that the work item has finished executing
before proceeding with unload, which can only be done by flushing it
from outside the work itself.
Thanks.
--
tejun
next prev parent reply other threads:[~2010-12-15 16:00 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-19 12:57 [PATCH 1/2] scsi: remove bogus use of struct execute_work in sg Tejun Heo
2010-10-19 12:58 ` [PATCH 2/2] scsi: don't use execute_in_process_context() Tejun Heo
2010-10-22 10:03 ` FUJITA Tomonori
2010-12-12 22:48 ` James Bottomley
2010-12-14 9:53 ` Tejun Heo
2010-12-14 14:09 ` James Bottomley
2010-12-14 14:19 ` Tejun Heo
2010-12-14 14:26 ` James Bottomley
2010-12-14 14:33 ` Tejun Heo
2010-12-15 3:04 ` James Bottomley
2010-12-15 15:47 ` Tejun Heo
2010-12-15 15:54 ` James Bottomley
2010-12-15 16:00 ` Tejun Heo [this message]
2010-12-15 17:22 ` James Bottomley
2010-12-15 19:05 ` Tejun Heo
2010-12-15 19:10 ` James Bottomley
2010-12-15 19:19 ` Tejun Heo
2010-12-15 19:33 ` James Bottomley
2010-12-15 19:42 ` Tejun Heo
2010-12-15 19:46 ` Tejun Heo
2010-12-16 14:39 ` James Bottomley
2010-12-16 15:51 ` Tejun Heo
2010-12-15 19:34 ` Tejun Heo
2010-10-20 14:29 ` [PATCH 1/2] scsi: remove bogus use of struct execute_work in sg FUJITA Tomonori
2010-10-20 19:56 ` Douglas Gilbert
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=4D08E624.3020808@kernel.org \
--to=tj@kernel.org \
--cc=James.Bottomley@suse.de \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.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