public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Doug Ledford <dledford@redhat.com>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: Alexander Viro <viro@math.psu.edu>,
	Linux Scsi Mailing List <linux-scsi@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linus Torvalds <torvalds@transmeta.com>
Subject: Re: Why /dev/sdc1 doesn't show up...
Date: Tue, 19 Nov 2002 11:06:22 -0500	[thread overview]
Message-ID: <20021119160622.GA8738@redhat.com> (raw)
In-Reply-To: <20021119055636.94C182C088@lists.samba.org>

On Tue, Nov 19, 2002 at 04:52:25PM +1100, Rusty Russell wrote:
> > right).  Or you can run a notifier on "enlivening" a module: I'd hoped
> > to avoid that.
> 
> Actually, after some thought, this seems to clearly be the Right
> Thing, because it solves another existing race.  Consider a module
> which does:
> 
> 	if (!register_foo(&my_foo))
> 		goto cleanup;
> 	if (!create_proc_entry(&my_entry))
> 		goto cleanup_foo;

There is *NO* module that does this right now and can be considered even 
close to working.  The rule always has been "register yourself when you 
are ready for use".  You're trying to add this new "You can fail after 
registering yourself" semantic for brain dead coders that can't write an 
init function to save thier ass.  My position is that in doing so, you 
fuck all of us that do write a reasonable init sequence and handle our 
error conditions.  Plus, since this is a changes in semantics, you have 
possibly 50 or 100 modules that rely on the old behaviour, and maybe a few 
that are broken in regards to registration ordering.  I think you are 
trying to fix the wrong group of modules here.

So, to me, the answer is clear.  The rule is hard and fast, you don't hand 
out your function pointers to other modules or the core kernel until you 
are ready for them to be used.  Don't muck with the module loader to solve 
the problem, fix the maybe 4 or 5 modules that might violate this rule.

> If register_foo() calls /sbin/hotplug, the module can still fail to
> load and /sbin/hotplug is called for something that doesn't exist.

Which is just totally fucking stupid on the part of any module author that 
would do things in that order.  You're trying to write a module loader 
that makes it safe for a module author to be a total moron.  Don't.  Let 
the morons go code somewhere else.  For the kernel, make them follow a few 
sensible rules instead of enforcing moron proof crap on everyone else.

> With the new module loader, you can also have /sbin/hotplug try to
> access the module before it's gone live, which will fail to prevent
> the "using before we know module won't fail init" race.
> 
> Now, if you run /sbin/hotplug out of a notifier which is fired when
> the module actually goes live, this problem vanishes.  It also means
> we can block module unload until /sbin/hotplug is run.
> 
> The part that makes this feel like the Right Thing is that adding to
> init/main.c:
> 
> 	/* THIS_MODULE == NULL */
> 	notifier_call_chain(&module_notifiers, MODULE_LIVE, NULL);
> 
> means that /sbin/hotplug is called for everything which was registered
> at boot.  (We may not want to do this, but in general the symmetry
> seems really nice).
> 
> [ Note: the logic for /sbin/hotplug applies to any similar "publicity"
>   function which promises that something now exists. ]
> 
> Al, thoughts?

I actually like the idea of having an automatic go live function that we 
can trigger, but I still don't think that justifies blocking a module from 
entering itself during init.

-- 
  Doug Ledford <dledford@redhat.com>     919-754-3700 x44233
         Red Hat, Inc. 
         1801 Varsity Dr.
         Raleigh, NC 27606
  

  parent reply	other threads:[~2002-11-19 15:58 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-19  5:52 Why /dev/sdc1 doesn't show up Rusty Russell
2002-11-19  7:12 ` Alexander Viro
2002-11-19 21:29   ` Rusty Russell
2002-11-19 22:33   ` Andries Brouwer
2002-11-19 16:06 ` Doug Ledford [this message]
2002-11-19 17:55 ` Jeff Garzik
2002-11-19 21:42   ` Rusty Russell
2002-11-20 23:41   ` john slee
  -- strict thread matches above, loose matches on Subject: below --
2002-11-17 19:52 Doug Ledford
2002-11-17 20:01 ` Alexander Viro
2002-11-17 20:12   ` Doug Ledford
2002-11-17 20:16   ` Alexander Viro
2002-11-17 23:20 ` Andries Brouwer
2002-11-17 23:45   ` Doug Ledford
2002-11-18  8:52 ` Rusty Russell
2002-11-18  9:51   ` Alexander Viro
2002-11-18 23:49     ` Rusty Russell
2002-11-19  0:08       ` Linus Torvalds
2002-11-19 20:54         ` Rusty Russell
2002-11-20 15:45           ` Linus Torvalds
2002-11-24 22:30             ` Rusty Russell
2002-11-19  0:09       ` Doug Ledford
2002-11-19 20:58         ` Rusty Russell
2002-11-19  0:32       ` Alan Cox
2002-11-18 10:02   ` Roman Zippel

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=20021119160622.GA8738@redhat.com \
    --to=dledford@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=torvalds@transmeta.com \
    --cc=viro@math.psu.edu \
    /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