rpms/kernel/devel linux-2.6-net-fix-gro-bug.patch, NONE, 1.1 linux-2.6-net-xfrm-fix-spin-unlock.patch, NONE, 1.1 kernel.spec, 1.1477, 1.1478

Chuck Ebbert cebbert at fedoraproject.org
Sat Mar 28 00:58:53 UTC 2009


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv1049

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-net-fix-gro-bug.patch 
	linux-2.6-net-xfrm-fix-spin-unlock.patch 
Log Message:
Fix 2.6.29 networking lockups.
Fix locking in net/xfrm/xfrm_state.c (#489764)

linux-2.6-net-fix-gro-bug.patch:

--- NEW FILE linux-2.6-net-fix-gro-bug.patch ---
http://marc.info/?l=linux-kernel&m=123819452727313&w=4


It's a known problem, the following fix will be submitted
to 2.6.29.1 over the weekend.

GRO: Disable GRO on legacy netif_rx path

When I fixed the GRO crash in the legacy receive path I used
napi_complete to replace __napi_complete.  Unfortunately they're
not the same when NETPOLL is enabled, which may result in us
not calling __napi_complete at all.

What's more, we really do need to keep the __napi_complete call
within the IRQ-off section since in theory an IRQ can occur in
between and fill up the backlog to the maximum, causing us to
lock up.

Since we can't seem to find a fix that works properly right now,
this patch reverts all the GRO support from the netif_rx path.

Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
Signed-off-by: David S. Miller <davem at davemloft.net>
---
 net/core/dev.c |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 052dd47..63ec4bf 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2627,18 +2627,15 @@ static int process_backlog(struct napi_struct *napi, int quota)
 		local_irq_disable();
 		skb = __skb_dequeue(&queue->input_pkt_queue);
 		if (!skb) {
+			__napi_complete(napi);
 			local_irq_enable();
-			napi_complete(napi);
-			goto out;
+			break;
 		}
 		local_irq_enable();
 
-		napi_gro_receive(napi, skb);
+		netif_receive_skb(skb);
 	} while (++work < quota && jiffies == start_time);
 
-	napi_gro_flush(napi);
-
-out:
 	return work;
 }
 

linux-2.6-net-xfrm-fix-spin-unlock.patch:

--- NEW FILE linux-2.6-net-xfrm-fix-spin-unlock.patch ---
xfrm: spin_lock() should be spin_unlock()

spin_lock() should be spin_unlock() in xfrm_state_walk_done().

caused by:
commit 12a169e7d8f4b1c95252d8b04ed0f1033ed7cfe2
"ipsec: Put dumpers on the dump list"

Reported-by: Marc Milgram <mmilgram at redhat.com>
Signed-off-by: Chuck Ebbert <cebbert at redhat.com>
---

rh bug 489764

--- linux-2.6.29.noarch.orig/net/xfrm/xfrm_state.c
+++ linux-2.6.29.noarch/net/xfrm/xfrm_state.c
@@ -1615,7 +1615,7 @@ void xfrm_state_walk_done(struct xfrm_st
 
 	spin_lock_bh(&xfrm_state_lock);
 	list_del(&walk->all);
-	spin_lock_bh(&xfrm_state_lock);
+	spin_unlock_bh(&xfrm_state_lock);
 }
 EXPORT_SYMBOL(xfrm_state_walk_done);
 


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1477
retrieving revision 1.1478
diff -u -r1.1477 -r1.1478
--- kernel.spec	27 Mar 2009 07:13:58 -0000	1.1477
+++ kernel.spec	28 Mar 2009 00:58:23 -0000	1.1478
@@ -691,6 +691,12 @@
 #Adding dropwatch into rawhide until we get to 2.6.30
 Patch9003: linux-2.6-dropwatch-protocol.patch
 
+# fix for net lockups, will be in 2.6.29.1
+Patch9100: linux-2.6-net-fix-gro-bug.patch
+
+# fix locking in ipsec (#489764)
+Patch9101: linux-2.6-net-xfrm-fix-spin-unlock.patch
+
 %endif
 
 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@@ -1240,6 +1246,9 @@
 
 ApplyPatch linux-2.6-dropwatch-protocol.patch
 
+ApplyPatch linux-2.6-net-fix-gro-bug.patch
+ApplyPatch linux-2.6-net-xfrm-fix-spin-unlock.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -1823,6 +1832,10 @@
 # and build.
 
 %changelog
+* Fri Mar 27 2009 Chuck Ebbert <cebbert at redhat.com> 2.6.29-16
+- Fix 2.6.29 networking lockups.
+- Fix locking in net/xfrm/xfrm_state.c (#489764)
+
 * Fri Mar 27 2009 Ben Skeggs <bskeggs at redhat.com>
 - drm-nouveau.patch: do nothing for dac_{prepare,commit}, it's useless
   and breaks some things in strange ways.




More information about the fedora-extras-commits mailing list