From: Rusty Russell <rusty@rustcorp.com.au>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Brandon Philips <brandon@ifup.org>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
LKML <linux-kernel@vger.kernel.org>,
Jon Masters <jonathan@jonmasters.org>,
Tejun Heo <htejun@gmail.com>,
Masami Hiramatsu <mhiramat@redhat.com>,
Kay Sievers <kay.sievers@vrfy.org>
Subject: Re: [PATCH 2/2] module: fix bne2 "gave up waiting for init of module libcrc32c"
Date: Wed, 2 Jun 2010 12:39:40 +0930 [thread overview]
Message-ID: <201006021239.42006.rusty@rustcorp.com.au> (raw)
In-Reply-To: <alpine.LFD.2.00.1006010722160.3637@i5.linux-foundation.org>
On Wed, 2 Jun 2010 12:28:31 am Linus Torvalds wrote:
>
> On Tue, 1 Jun 2010, Rusty Russell wrote:
> >
> > > So explain why I should be more polite, or more terse?
> >
> > How about this:
> >
> > "I hate this patch. It makes already-ugly locking in module.c awful, and I
> > can't see that it's correct. Why not just reduce the locking to cover
> > the minimum needed?"
>
> Umm. Did you read the first few emails I sent out on this thread
> originally?
OK, this might be worthwhile. Take the very first mail you sent:
Hmm. That does seem to be buggy. We can't just drop and re-take the lock:
that may make sense internally as far as resolve_symbol() itself is
concerned, but the caller will its own local variables, and some of those
will no longer be valid if the lock was dropped.
The implication here is that that I don't know locking, and that this was
done without thought or care. In fact, I did worry about it and decided it
was less risky than a locking reduction given my limited cycles (indeed,
it has been slightly).
That commit also changes the return value semantics of "use_module()",
which is an exported interface where the only users seem to be
out-of-kernel (the only in-kernel use is in kernel/module.c itself). That
seems like a really really bad idea too.
Again with the implication that this was done without consideration. I keep
that exported as a courtesy to the ksplice team, but I never intended to let
that shackle internal changes even slightly. And I think it's wrong to even
start down that path (though I changed the name for you in the recent patches)
So I think reverting it is definitely the right thing to do. The commit
seems fundamentally broken. And having modules do request_module() in
their init functions has always been invalid anyway, so that excuse
doesn't really seem to be a reason to do anything crazy like this either.
The code is "fundamentally broken" and "crazy". The purpose of the patch
was "invalid anyway".
You managed to accuse me four times of being an incompetent and downright
crazy maintainer in your first three paragraphs of the first mail!
> They were actually _politer_ than your suggestion above (no
> crap mentioned), and did exactly what you ask for.
My example quote entirely lacked accusations of incompetence; the only
implications are:
(1) Hey, I might be wrong, maybe I just didn't spend enough time on it.
(2) Otherwise, here's what I'd do, you're smart enough to run with it if
it makes sense or explain why I'm barking up the wrong tree.
See Andrew Morton's correspondence for how his "maybe I'm dumb but" tone
is used to brutal effect...
> I would like to note that your original "fix things by dropping the lock"
> patch that I hated so much had this exact bug too. Making this a good
> example of _why_ it's basically always wrong to drop locks in the middle -
> even if you claimed you knew and understood the locking.
And I would like to note that it didn't :) It grabbed references only on
completed modules.
It still had that find_module race, but the kset error actually it. The
lock reduction patch needs that fixed.
> So I do hope we can agree to call the module locking "total and utter
> crap", ok?
OK. And I agree that I was too cautious here; I should have taken the time
to fix locking once and for all. That's much easier to do when there's a
Linus yelling at you about it.
> And yes, my code was crap too. I wrote it for the MODULE_UNLOAD case, and
> only added a comment saying the !unload case was broken, but didn't look
> at just _how_ broken it was. My bad.
Oh no, your code was broken for UNLOAD too.
And sloppy; you would have got a checklist reply email if you had mailed it
anonymously :)
Thanks for the consideration,
Rusty.
next prev parent reply other threads:[~2010-06-02 3:09 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-25 21:00 [Regression] Crash in load_module() while freeing args Rafael J. Wysocki
2010-05-25 22:54 ` Rafael J. Wysocki
2010-05-25 23:47 ` Linus Torvalds
2010-05-26 8:00 ` Rusty Russell
2010-05-26 11:57 ` Rusty Russell
2010-05-26 22:56 ` Rafael J. Wysocki
2010-05-26 23:07 ` Linus Torvalds
2010-05-27 5:26 ` Rusty Russell
2010-05-27 18:46 ` Brandon Philips
2010-05-31 9:40 ` Rusty Russell
2010-05-31 12:00 ` [PATCH 0/2] kernel/module.c locking changes Rusty Russell
2010-05-31 12:01 ` [PATCH 1/2] module: make locking more fine-grained Rusty Russell
2010-05-31 12:02 ` [PATCH 2/2] module: fix bne2 "gave up waiting for init of module libcrc32c" Rusty Russell
2010-05-31 16:48 ` Andrew Morton
2010-05-31 18:19 ` Linus Torvalds
2010-05-31 20:15 ` Linus Torvalds
2010-05-31 20:16 ` [PATCH 1/2] Make the module 'usage' lists be two-way Linus Torvalds
2010-05-31 20:17 ` [PATCH 2/2] module: wait for other modules after dropping the module_mutex Linus Torvalds
2010-06-01 1:37 ` [PATCH 1/2] Make the module 'usage' lists be two-way Rusty Russell
2010-06-01 3:42 ` Rusty Russell
2010-06-01 4:00 ` Linus Torvalds
2010-06-01 4:05 ` Linus Torvalds
2010-06-01 2:44 ` Américo Wang
2010-06-01 3:51 ` Linus Torvalds
2010-06-01 1:57 ` [PATCH 2/2] module: fix bne2 "gave up waiting for init of module libcrc32c" Rusty Russell
2010-06-01 3:40 ` Linus Torvalds
2010-06-01 4:27 ` Linus Torvalds
2010-06-01 5:19 ` Rusty Russell
2010-06-02 3:15 ` Rusty Russell
2010-06-01 1:21 ` Rusty Russell
2010-06-01 3:24 ` Linus Torvalds
2010-06-01 5:22 ` Rusty Russell
2010-06-01 14:58 ` Linus Torvalds
2010-06-01 17:53 ` Linus Torvalds
2010-06-01 23:24 ` Brandon Philips
2010-06-01 23:51 ` Linus Torvalds
2010-06-02 2:10 ` Brandon Philips
2010-06-02 3:03 ` Rusty Russell
2010-06-02 4:35 ` Linus Torvalds
2010-06-02 4:44 ` Linus Torvalds
2010-06-02 6:35 ` Rusty Russell
2010-06-02 7:45 ` Linus Torvalds
2010-06-02 8:12 ` Linus Torvalds
2010-06-02 9:07 ` Rusty Russell
2010-06-02 5:52 ` Rusty Russell
2010-06-02 7:21 ` Linus Torvalds
2010-06-02 14:06 ` Rusty Russell
2010-06-02 14:50 ` Linus Torvalds
2010-06-03 13:06 ` Rusty Russell
2010-06-02 16:53 ` Brandon Philips
2010-06-02 18:01 ` Linus Torvalds
2010-06-03 5:20 ` Rusty Russell
2010-06-03 16:24 ` Linus Torvalds
2010-06-04 1:02 ` Rusty Russell
2010-06-04 1:55 ` Linus Torvalds
2010-06-04 5:20 ` Rusty Russell
2010-06-04 22:48 ` Linus Torvalds
2010-06-05 1:49 ` Rusty Russell
2010-06-02 3:09 ` Rusty Russell [this message]
2010-06-02 4:32 ` Linus Torvalds
2010-06-02 4:56 ` Linus Torvalds
2010-06-02 5:52 ` Rusty Russell
2010-06-02 6:59 ` Linus Torvalds
2010-06-01 1:04 ` Rusty Russell
2010-06-01 5:38 ` [PATCH 1/2] module: make locking more fine-grained Américo Wang
2010-06-01 5:55 ` Rusty Russell
2010-05-27 21:57 ` [Regression] Crash in load_module() while freeing args Rafael J. Wysocki
2010-05-31 7:54 ` Rusty Russell
2010-05-31 10:23 ` [PATCH] module: fix reference to mod->percpu after freeing module Rusty Russell
2010-05-31 10:25 ` Tejun Heo
2010-05-26 15:41 ` [Regression] Crash in load_module() while freeing args Linus Torvalds
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=201006021239.42006.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=akpm@linux-foundation.org \
--cc=brandon@ifup.org \
--cc=htejun@gmail.com \
--cc=jonathan@jonmasters.org \
--cc=kay.sievers@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@redhat.com \
--cc=rjw@sisk.pl \
--cc=torvalds@linux-foundation.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