From: Tejun Heo <htejun@gmail.com>
To: Peter Osterlund <petero2@telia.com>
Cc: Thomas Maier <balagi@justmail.de>,
Jens Axboe <jens.axboe@oracle.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
gregkh@suse.de
Subject: Re: pktcdvd oops
Date: Wed, 07 Nov 2007 11:44:43 +0900 [thread overview]
Message-ID: <4731269B.6010509@gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0711062229490.5800@quad.localdomain>
Peter Osterlund wrote:
> On Tue, 6 Nov 2007, Thomas Maier wrote:
>
>> Hello,
>>
>> have not tested it yet, but i quess, the code mentioned by Peter
>> is in pkt_new_dev() that is called by pkt_setup_dev():
>>
>> /* This is safe, since we have a reference from open(). */
>> __module_get(THIS_MODULE);
>>
>>
>> So, now, there must be checks in every sysfs operation in the module
>> code,
>> to ensure that the module is still loaded?
>
> I haven't tested it either yet. What I don't understand is this: If the
> __module_get() is not safe because the module code could have already
> been unloaded, how can it possibly be made safe by adding more code to
> the pktcdvd module? If the module is unloaded, trying to execute its
> code can't be a good thing no matter what the code does.
>
sysfs itself is now out of module lifespan rules. sysfs callbacks are
guaranteed to stay in memory while running by sysfs node removal waiting
for completion of in-flight operations before returning. In pktcdvd's
case, class_destroy() call in pkt_sysfs_cleanup() will wait for all
in-flight sysfs r/w ops to complete.
So, even while sysfs callbacks are executing, the module beneath can die
but it will stay in memory till all the callbacks return. You need to
test module liveness using try_module_get() (and it can fail) if you
want to grab module reference from sysfs callbacks.
>> BTW: the bug report says:
>>
>> Steps to reproduce:
>>
>> modprobe pktcdvd
>> echo 22:0 >/sys/class/pktcdvd/add
>>
>> Is there any module unload??? Why is the module not available after
>> the modprobe, but the sysfs entries, generated by the module? Confused ;)
>
> I think the purpose of the BUG_ON in __module_get() is to catch cases
> that are unsafe, even if the call would have happened to work in this
> particular case.
The BUG_ON is detecting valid condition here. If you rmmod pktcdvd
after sysfs write has begun but before __module_get() ran, device node
will be created after the module is killed and scheduled to be unloaded.
Thanks.
--
tejun
next prev parent reply other threads:[~2007-11-07 2:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20071105092018.GD5359@kernel.dk>
2007-11-05 22:19 ` pktcdvd oops Peter Osterlund
2007-11-06 9:06 ` Tejun Heo
2007-11-06 21:07 ` Thomas Maier
2007-11-06 21:42 ` Peter Osterlund
2007-11-07 2:44 ` Tejun Heo [this message]
2007-11-07 22:06 ` Peter Osterlund
2007-11-08 2:27 ` [PATCH] pktcdvd: fix BUG caused by sysfs module reference semantics change Tejun Heo
2007-11-08 5:24 ` Greg KH
2007-11-08 6:55 ` Tejun Heo
2007-11-08 6:59 ` Jens Axboe
2007-11-08 9:08 Re: pktcdvd oops balagi
2007-11-08 9:34 ` Tejun Heo
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=4731269B.6010509@gmail.com \
--to=htejun@gmail.com \
--cc=balagi@justmail.de \
--cc=gregkh@suse.de \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=petero2@telia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox