--- /dev/null
+From stable-bounces@linux.kernel.org Wed Oct 31 08:47:05 2007
+From: Gregory Haskins <ghaskins@novell.com>
+Date: Wed, 31 Oct 2007 11:44:05 -0400
+Subject: lockdep: fix mismatched lockdep_depth/curr_chain_hash
+To: Greg KH <greg@kroah.com>
+Cc: Peter Zijlstra <peterz@infradead.org>, linux-kernel <linux-kernel@vger.kernel.org>, Chuck Ebbert <cebbert@redhat.com>, mingo@elte.hu, Gregory Haskins <ghaskins@novell.com>, stable <stable@kernel.org>
+Message-ID: <20071031154313.15685.72379.stgit@ghaskins-t60p.haskins.net>
+
+From: Gregory Haskins <ghaskins@novell.com>
+
+patch 3aa416b07f0adf01c090baab26fb70c35ec17623 in mainline.
+
+lockdep: fix mismatched lockdep_depth/curr_chain_hash
+
+It is possible for the current->curr_chain_key to become inconsistent with the
+current index if the chain fails to validate. The end result is that future
+lock_acquire() operations may inadvertently fail to find a hit in the cache
+resulting in a new node being added to the graph for every acquire.
+
+[ peterz: this might explain some of the lockdep is so _slow_ complaints. ]
+[ mingo: this does not impact the correctness of validation, but may slow
+ down future operations significantly, if the chain gets very long. ]
+
+Signed-off-by: Gregory Haskins <ghaskins@novell.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/lockdep.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/lockdep.c
++++ b/kernel/lockdep.c
+@@ -2166,7 +2166,6 @@ out_calc_hash:
+ }
+ #endif
+ chain_key = iterate_chain_key(chain_key, id);
+- curr->curr_chain_key = chain_key;
+
+ /*
+ * Trylock needs to maintain the stack of held locks, but it
+@@ -2215,6 +2214,7 @@ out_calc_hash:
+ if (unlikely(!debug_locks))
+ return 0;
+
++ curr->curr_chain_key = chain_key;
+ curr->lockdep_depth++;
+ check_chain_key(curr);
+ #ifdef CONFIG_DEBUG_LOCKDEP