From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Bart Van Assche <bvanassche@acm.org>
Cc: Greg KH <greg@kroah.com>, Vladislav Bolkhovitin <vst@vlnb.net>,
Boaz Harrosh <bharrosh@panasas.com>,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org,
scst-devel <scst-devel@lists.sourceforge.net>
Subject: Re: [PATCH 8/19]: SCST SYSFS interface implementation
Date: Fri, 12 Nov 2010 10:44:24 -0800 [thread overview]
Message-ID: <20101112184424.GD1224@core.coreip.homeip.net> (raw)
In-Reply-To: <AANLkTikA7GRDR2Y3nUfQYxLHCWVLfzVPJmZED_whuCWD@mail.gmail.com>
On Fri, Nov 12, 2010 at 01:09:48PM +0100, Bart Van Assche wrote:
> On Fri, Nov 12, 2010 at 2:23 AM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > On Thu, Nov 11, 2010 at 11:50:01PM +0300, Vladislav Bolkhovitin wrote:
> > > [ ... ]
> > >
> > > This is the last internal put. All other references are from outsiders.
> > > So, we are waiting for all them to put before we go on.
> >
> > The question is why do you need to wait here? I presume it is module
> > unloading path, but then it is quite bad - you can easily wedge your
> > subsystem if you make something to take a reference to your kobject
> > while module is trying to be unloaded. Back when sysfs attributes tied
> > kobjects the easiest thing was to do:
> >
> > rmmod <module> < / sys/devices/..../attribute
> >
> > If you are done with the kobject - just proceed with what you were doing
> > and let it die its own peaceful death some time later. You just need to
> > make sure release code sticks around to free it and your subsystem core
> > can be tasked with this. Use module counter to prevent unloading of the
> > subsystem core until all kobjects belonging to the subsystem are
> > destroyed.
>
> Do you mean keeping a kref object in the kernel module, invoking
> kref_get() every time a kobject has been created and invoking
> kref_put() from the kobject/ktype release method ? That would help to
> reduce the race window but would not eliminate all races: as soon as
> the last kref_put() has been invoked from the release method, the
> module can get unloaded. And module unloading involves freeing all
> module code sections, including the section that contains the
> implementation of the release method. Which is a race condition.
No, you do not add a kref, but rather manipulate module use counter:
static void blah_blah_release(struct kobject *kobj)
{
struct blah_blah *b = to_blah_blah(kobj);
...
kfree(kobj);
module_put(THIS_MODULE);
}
int blah_blah_register(struct blah_blah *blah)
{
...
__module_get(THIS_MODULE);
...
return 0;
}
The above should reside in subsystem _core_ and it will pin the core
module until last kobject belonging to the subsystem is released.
Once all users are gone module counter will go to 0 and rmmod will
allow core to unload. Note that no new kobjects will be created while
module usage count is 0 because there are no users of the core - all of
them have to be unloaded already, otherwise module loader would have
bumped up usage count as well.
>
> I'm not sure that it is even possible with the current kobject
> implementation to solve this race.
It is possible and it is solved in most (all?) mainline subsystems.
> I haven't found any information
> about this race in Documentation/kobject.txt. And it seems to me that
> the code in samples/kobject/kobject-example.c is vulnerable to this
> race: methods like foo_show() and foo_store() can access statically
> allocated memory ("static int foo") after the module has been
> unloaded. Although the race window is small, this makes me wonder
> whether module unloading been overlooked at the time the kobject
> subsystem has been designed and implemented ?
>
> Bart.
--
Dmitry
next prev parent reply other threads:[~2010-11-12 18:44 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-01 21:34 [PATCHv4 0/19]: New SCSI target framework (SCST) with dev handlers and 2 target drivers Vladislav Bolkhovitin
2010-10-01 21:36 ` [PATCH 1/19]: Integration of SCST into the Linux kernel tree Vladislav Bolkhovitin
2010-10-01 21:36 ` [PATCH 2/19]: SCST core's Makefile and Kconfig Vladislav Bolkhovitin
2010-10-01 21:38 ` [PATCH 3/19]: SCST public headers Vladislav Bolkhovitin
2010-10-01 21:39 ` [PATCH 4/19]: SCST main management files and private headers Vladislav Bolkhovitin
2010-10-01 21:42 ` [PATCH 5/19]: SCST implementation of the SCSI target state machine Vladislav Bolkhovitin
2010-10-01 21:43 ` [PATCH 6/19]: SCST internal library functions Vladislav Bolkhovitin
2010-10-01 21:44 ` [PATCH 7/19]: SCST Persistent Reservations implementation Vladislav Bolkhovitin
2010-10-01 21:46 ` [PATCH 8/19]: SCST SYSFS interface implementation Vladislav Bolkhovitin
2010-10-09 21:20 ` Greg KH
2010-10-11 19:29 ` Vladislav Bolkhovitin
2010-10-11 21:32 ` Greg KH
2010-10-12 18:53 ` Vladislav Bolkhovitin
2010-10-12 19:03 ` Greg KH
2010-10-14 19:48 ` Vladislav Bolkhovitin
2010-10-14 20:04 ` Greg KH
2010-10-22 17:30 ` Vladislav Bolkhovitin
2010-10-22 17:56 ` Greg KH
2010-10-22 18:40 ` Vladislav Bolkhovitin
2010-10-22 18:54 ` Greg KH
2010-11-08 19:58 ` Vladislav Bolkhovitin
2010-11-09 0:28 ` Greg KH
2010-11-09 20:06 ` Vladislav Bolkhovitin
2010-11-10 9:58 ` Boaz Harrosh
2010-11-10 20:19 ` Vladislav Bolkhovitin
2010-11-10 20:29 ` Joe Eykholt
2010-11-10 20:38 ` Vladislav Bolkhovitin
2010-11-10 20:42 ` Joe Eykholt
2010-11-11 9:59 ` Boaz Harrosh
2010-11-11 12:04 ` Greg KH
2010-11-11 14:05 ` Boaz Harrosh
2010-11-11 14:16 ` Greg KH
2010-11-11 14:19 ` Boaz Harrosh
2010-11-11 20:50 ` Vladislav Bolkhovitin
2010-11-12 1:23 ` Dmitry Torokhov
2010-11-12 12:09 ` Bart Van Assche
2010-11-12 18:44 ` Dmitry Torokhov [this message]
2010-11-13 10:52 ` Bart Van Assche
2010-11-13 17:20 ` Vladislav Bolkhovitin
2010-11-13 23:59 ` Greg KH
2010-11-15 6:59 ` Dmitry Torokhov
2010-11-15 17:53 ` Bart Van Assche
2010-11-15 20:36 ` Vladislav Bolkhovitin
2010-11-15 9:46 ` Boaz Harrosh
2010-11-15 16:16 ` Greg KH
2010-11-15 17:19 ` Boaz Harrosh
2010-11-15 17:49 ` Bart Van Assche
2010-11-15 20:19 ` Nicholas A. Bellinger
2010-11-16 13:12 ` Vladislav Bolkhovitin
2010-11-16 11:59 ` [Scst-devel] " Richard Williams
2010-11-16 13:17 ` Vladislav Bolkhovitin
2010-11-18 21:02 ` Vladislav Bolkhovitin
2010-11-18 21:46 ` Greg KH
2010-11-19 18:00 ` Vladislav Bolkhovitin
2010-11-19 20:22 ` Dmitry Torokhov
2010-11-19 20:50 ` Vladislav Bolkhovitin
2010-11-19 21:16 ` Greg KH
2010-11-24 20:35 ` Vladislav Bolkhovitin
2010-11-19 21:19 ` Greg KH
2010-12-10 12:06 ` Bart Van Assche
2010-12-10 19:36 ` Greg KH
2010-12-14 14:10 ` Bart Van Assche
2010-11-19 18:01 ` Bart Van Assche
2010-11-15 20:39 ` Vladislav Bolkhovitin
2010-11-15 20:39 ` Vladislav Bolkhovitin
2010-11-15 17:45 ` Bart Van Assche
2010-11-15 18:44 ` Greg KH
2010-11-15 20:39 ` Vladislav Bolkhovitin
2010-11-15 22:13 ` Greg KH
2010-11-16 5:04 ` Joe Eykholt
2010-11-16 6:03 ` Nicholas A. Bellinger
2010-11-16 8:49 ` Florian Mickler
2010-11-16 13:18 ` Vladislav Bolkhovitin
2010-11-16 7:15 ` Bart Van Assche
2010-11-16 13:19 ` Vladislav Bolkhovitin
2010-11-15 20:36 ` Vladislav Bolkhovitin
2010-11-15 7:04 ` Dmitry Torokhov
2010-11-15 20:37 ` Vladislav Bolkhovitin
2010-11-15 21:14 ` Dmitry Torokhov
2010-11-16 13:13 ` Vladislav Bolkhovitin
2010-10-01 21:46 ` [PATCH 9/19]: SCST debugging support routines Vladislav Bolkhovitin
2010-10-01 21:48 ` [PATCH 10/19]: SCST SGV cache Vladislav Bolkhovitin
2010-10-01 21:48 ` [PATCH 11/19]: SCST core's docs Vladislav Bolkhovitin
2010-10-01 21:49 ` [PATCH 12/19]: SCST dev handlers' Makefile Vladislav Bolkhovitin
2010-10-01 21:50 ` [PATCH 13/19]: SCST vdisk dev handler Vladislav Bolkhovitin
2010-10-01 21:51 ` [PATCH 14/19]: SCST pass-through dev handlers Vladislav Bolkhovitin
2010-10-01 21:53 ` [PATCH 15/19]: Implementation of blk_rq_map_kern_sg() Vladislav Bolkhovitin
2010-10-01 21:57 ` [PATCH 16/19]: scst_local target driver Vladislav Bolkhovitin
2010-10-01 21:58 ` [PATCH 17/19]: SCST InfiniBand SRP " Vladislav Bolkhovitin
2010-10-01 22:04 ` [PATCH 18/19]: ibmvstgt: Port from tgt to SCST Vladislav Bolkhovitin
2010-10-01 22:05 ` [PATCH 19/19]: tgt: Removal Vladislav Bolkhovitin
2010-10-02 7:40 ` [PATCHv4 0/19]: New SCSI target framework (SCST) with dev handlers and 2 target drivers Bart Van Assche
2010-10-06 20:21 ` [Scst-devel] " Steve Modica
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=20101112184424.GD1224@core.coreip.homeip.net \
--to=dmitry.torokhov@gmail.com \
--cc=bharrosh@panasas.com \
--cc=bvanassche@acm.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=scst-devel@lists.sourceforge.net \
--cc=vst@vlnb.net \
/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
Powered by JetHome