All of lore.kernel.org
 help / color / mirror / Atom feed
From: Doug Ledford <dledford@redhat.com>
To: Alexander Viro <viro@math.psu.edu>
Cc: Linus Torvalds <torvalds@transmeta.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Scsi Mailing List <linux-scsi@vger.kernel.org>
Subject: Re: Several Misc SCSI updates...
Date: Sun, 17 Nov 2002 17:04:10 -0500	[thread overview]
Message-ID: <20021117220410.GI3280@redhat.com> (raw)
In-Reply-To: <Pine.GSO.4.21.0211171653391.23400-100000@steklov.math.psu.edu>

On Sun, Nov 17, 2002 at 04:55:26PM -0500, Alexander Viro wrote:
> 
> 
> On Sun, 17 Nov 2002, Linus Torvalds wrote:
> 
> > 
> > On Sun, 17 Nov 2002, Doug Ledford wrote:
> > > 
> > > Won't work.  module->live is what Rusty uses to indicate that the module 
> > > is in the process of unloading, which is when we *do* want the attempt to 
> > > module_get() to fail.
> > 
> > That's fine, as long as "module_get()" is the only thing that cares. Just 
> > make it go "live" early as you indicate, and everybody should be happy. I 
> > certainly agree that it should be illegal to do more module_get()'s once 
> > we've already started unloading..
> 
> On the unload side it's OK.  module_get() also breaks during _init_ and that's
> the problem.  IOW, you'll need to make every block device driver to set ->live
> manually.  Smells like a wrong API...

This is the patch I just put into my tree (beware cut-n-paste breakage is 
in effect, but Linus should have the change in his tree momentarily 
anyway):

diff -Nru a/kernel/module.c b/kernel/module.c
--- a/kernel/module.c   Sun Nov 17 17:02:48 2002
+++ b/kernel/module.c   Sun Nov 17 17:02:48 2002
@@ -1058,6 +1058,15 @@
        list_add(&mod->extable.list, &extables);
        spin_unlock_irq(&modlist_lock);

+       /* Note, setting the mod->live to 1 here is safe because we haven't
+        * linked the module into the system's kernel symbol table yet,
+        * which means that the only way any other kernel code can call
+        * into this module right now is if this module hands out entry
+        * pointers to the other code.  We assume that no module hands out
+        * entry pointers to the rest of the kernel unless it is ready to
+        * have them used.
+        */
+       mod->live = 1;
        /* Start the module */
        ret = mod->init ? mod->init() : 0;
        if (ret < 0) {
@@ -1070,9 +1079,10 @@
                        /* Mark it "live" so that they can force
                           deletion later, and we don't keep getting
                           woken on every decrement. */
-                       mod->live = 1;
-               } else
+               } else {
+                       mod->live = 0;
                        free_module(mod);
+               }
                up(&module_mutex);
                return ret;
        }
@@ -1087,7 +1097,6 @@
        mod->module_init = NULL;

        /* All ok! */
-       mod->live = 1;
        up(&module_mutex);
        return 0;
 }


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

      reply	other threads:[~2002-11-17 22:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-17 20:28 Several Misc SCSI updates Doug Ledford
2002-11-17 20:29 ` Linus Torvalds
2002-11-17 20:38   ` Doug Ledford
2002-11-17 21:40     ` Linus Torvalds
2002-11-17 21:55       ` Alexander Viro
2002-11-17 22:04         ` Doug Ledford [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=20021117220410.GI3280@redhat.com \
    --to=dledford@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.