rpms/kernel/F-9 linux-2.6-lib-idr-fix-bug-introduced-by-rcu-fix.patch, NONE, 1.1 kernel.spec, 1.877, 1.878

Chuck Ebbert cebbert at fedoraproject.org
Fri Dec 12 00:12:04 UTC 2008


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-9
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv1008

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-lib-idr-fix-bug-introduced-by-rcu-fix.patch 
Log Message:
Fix IDR allocator bug introduced in 2.6.27.8

linux-2.6-lib-idr-fix-bug-introduced-by-rcu-fix.patch:

--- NEW FILE linux-2.6-lib-idr-fix-bug-introduced-by-rcu-fix.patch ---
From: Manfred Spraul <manfred at colorfullife.com>
Date: Wed, 10 Dec 2008 17:17:06 +0000 (+0100)
Subject: lib/idr.c: Fix bug introduced by RCU fix
X-Git-Tag: v2.6.28-rc8~4
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=711a49a07f84f914aac26a52143f6e7526571143

lib/idr.c: Fix bug introduced by RCU fix

The last patch to lib/idr.c caused a bug if idr_get_new_above() was
called on an empty idr.

Usually, nodes stay on the same layer.  New layers are added to the top
of the tree.

The exception is idr_get_new_above() on an empty tree: In this case, the
new root node is first added on layer 0, then moved upwards.  p->layer
was not updated.

As usual: You shall never rely on the source code comments, they will
only mislead you.

Signed-off-by: Manfred Spraul <manfred at colorfullife.com>
Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---

diff --git a/lib/idr.c b/lib/idr.c
index 7a785a0..1c4f928 100644
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -220,8 +220,14 @@ build_up:
 	 */
 	while ((layers < (MAX_LEVEL - 1)) && (id >= (1 << (layers*IDR_BITS)))) {
 		layers++;
-		if (!p->count)
+		if (!p->count) {
+			/* special case: if the tree is currently empty,
+			 * then we grow the tree by moving the top node
+			 * upwards.
+			 */
+			p->layer++;
 			continue;
+		}
 		if (!(new = get_from_free_list(idp))) {
 			/*
 			 * The allocation failed.  If we built part of


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-9/kernel.spec,v
retrieving revision 1.877
retrieving revision 1.878
diff -u -r1.877 -r1.878
--- kernel.spec	12 Dec 2008 00:06:43 -0000	1.877
+++ kernel.spec	12 Dec 2008 00:11:34 -0000	1.878
@@ -587,7 +587,7 @@
 Patch07: linux-2.6-compile-fixes.patch
 
 # build tweak for build ID magic, even for -vanilla
-Patch05: linux-2.6-makefile-after_link.patch
+Patch08: linux-2.6-makefile-after_link.patch
 
 %if !%{nopatches}
 
@@ -598,6 +598,9 @@
 #Patch11: linux-2.6.27.5-stable-queue.patch
 #Patch12: linux-2.6.27.5-stable-queue-reverts.patch
 
+# fix idr bug in 27.8
+Patch15: linux-2.6-lib-idr-fix-bug-introduced-by-rcu-fix.patch
+
 Patch21: linux-2.6-utrace.patch
 Patch22: linux-2.6-x86-tracehook.patch
 Patch23: linux-2.6.27-x86-tracehook-syscall-arg-order.patch
@@ -1084,6 +1087,8 @@
 ApplyPatch linux-2.6-upstream-reverts.patch -R
 fi
 
+ApplyPatch linux-2.6-lib-idr-fix-bug-introduced-by-rcu-fix.patch
+
 # Roland's utrace ptrace replacement.
 ApplyPatch linux-2.6-utrace.patch
 ApplyPatch linux-2.6-x86-tracehook.patch
@@ -1906,6 +1911,9 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL}.xen -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf %{with_xen} xen
 
 %changelog
+* Fri Dec 12 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.27.8-65
+- Fix IDR allocator bug introduced in 2.6.27.8
+
 * Thu Dec 11 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.27.8-64
 - Fix vc0321 based webcams (F10#474990)
 




More information about the fedora-extras-commits mailing list