Re: LOCALVERSION_AUTO considered harmful

Previous thread: Re: staging: udlfb -- staging version does not work, external does by Pavel Machek on Sunday, April 11, 2010 - 9:42 am. (3 messages)

Next thread: none
From: Pavel Machek
Date: Sunday, April 11, 2010 - 9:47 am

LOCALVERSION_AUTO has nasty interaction with modules, warn about it.

Signed-off-by: Pavel Machek <pavel@ucw.cz>

diff --git a/init/Kconfig b/init/Kconfig
index eb77e8c..5d33072 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -88,7 +88,6 @@ config LOCALVERSION
 
 config LOCALVERSION_AUTO
 	bool "Automatically append version information to the version string"
-	default y
 	help
 	  This will try to automatically determine if the current tree is a
 	  release tree by looking for git tags that belong to the current
@@ -99,6 +98,11 @@ config LOCALVERSION_AUTO
 	  appended after any matching localversion* files, and after the value
 	  set in CONFIG_LOCALVERSION.
 
+	  Unfortunately, such finegrained versioning will mean that you will
+	  not be able to use modules for development; even "make modules"
+	  will change module versions, making recompiled modules impossible
+	  to insert into old kernel. 
+
 	  (The actual string used here is the first eight characters produced
 	  by running the command:
 

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--

From: Alexey Dobriyan
Date: Monday, April 12, 2010 - 11:51 am

That's conditional BS.
Turn off CONFIG_MODVERSIONS already.
--

From: Geert Uytterhoeven
Date: Sunday, April 11, 2010 - 11:58 am

Yeah, I disabled it ages ago. Even then (before git, probably even
before bitkeeper)
I had hard times inserting modules...

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds
--

From: Pavel Machek
Date: Sunday, April 11, 2010 - 1:14 pm

I _had_ it off

 # CONFIG_MODVERSIONS is not set

It seems some checking survives CONFIG_MODVERSIONS unset and that
checking is strict enough to refuse module load after one "make
modules" with LOCALVERSION_AUTO on...
									Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--

From: Thomas Gleixner
Date: Sunday, April 11, 2010 - 3:24 pm

So instead of fixing the CONFIG_MODVERSIONS=n case you go the easy way
of killing LOCALVERSION_AUTO ? Brilliant.

Thanks,

	tglx
From: rdunlap
Date: Sunday, April 11, 2010 - 6:20 pm

(saving bits)

~Randy


--

From: rdunlap
Date: Sunday, April 11, 2010 - 7:56 pm

Pavel's original example (afaik) was on April 5:
Subject: 2.6.34-rc3: Can't insmod after make, because versions now differ?!

Apr  5 07:33:16 amd kernel: udlfb: version magic
'2.6.34-rc3-00345-ge8240f9-dirty SMP mod_unload CORE2 ' should be
'2.6.34-rc3-00344-g548fc0a-dirty SMP mod_unload CORE2 '


So what do you suggest?  If the "magic" strings contain "-dirty ",
then ignore that and the 2 preceding hyphen-separated fields?

That could be dangerous if some kernel internal structures have changed.
I.e., user/developer beware.

Maybe ignore those strings iff some override has been set somewhere?

---
~Randy

--

From: Randy Dunlap
Date: Sunday, April 11, 2010 - 8:49 pm

Pavel, does "modprobe --force" work?

-- 
~Randy
--

From: Theodore Tso
Date: Monday, April 12, 2010 - 5:48 am

I have a standard local patch that I've been carrying for I-don't-know-how-long which just nukes the "-dirty" suffix, which I needed because make-kpkg modifies some kernel build files, so the version string would always have 
-dirty.

It's not hard to fix...

-- Ted

--

From: Pavel Machek
Date: Monday, April 12, 2010 - 6:14 am

In previous discussion, I was told that there's no bug to fix, that
everything works as intended.

I believe current behaiour is stupid, and I'd prefer *some* fix.

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--

From: Linus Torvalds
Date: Monday, April 12, 2010 - 10:03 am

The problem is that you guys are looking at CONFIG_MODVERSIONS the wrong 
way around.

It's the _off_ case that is broken. Always was, always will be.

If CONFIG_MODVERSIONS is off, we remove the symbol versioning, and replace 
it with the _insane_ kernel version check. That is never valid. The fact 
that the kernel version is the same doesn't mean that the module will 
work, since we often do lots of changes within the same version.

So the solution is to say CONFIG_MODVERSIONS=y, and everybody is happy. 
Your modules will actually test things that _matter_, and will stop 
loading if the data types or function prototypes have changed. 

		Linus
--

Previous thread: Re: staging: udlfb -- staging version does not work, external does by Pavel Machek on Sunday, April 11, 2010 - 9:42 am. (3 messages)

Next thread: none