From: Matthew Wilcox <matthew@wil.cx>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: fault in __d_lookup [Was: 2.6.25-mm1]
Date: Mon, 21 Apr 2008 11:23:06 -0600 [thread overview]
Message-ID: <20080421172305.GC20637@parisc-linux.org> (raw)
In-Reply-To: <480C6597.1000701@gmail.com>
On Mon, Apr 21, 2008 at 11:59:51AM +0200, Jiri Slaby wrote:
> On 04/21/2008 11:45 AM, Al Viro wrote:
> >Well, if list has such turd in it, you'll certainly hit it every time
> >you walk that list, so 100% reproducible is not surprising.
> >
> >How well is it reproducible from fresh boot?
>
> Few days with suspend/resume cycles. This one was booted 12 hours ago, one
> suspend/resume. Will keep an eye on it and keep you informed.
Shall we see if we can catch it earlier? I have no idea if this will
help ... I haven't even booted it on a testmachine yet ;-) If I got
something wrong, it'll BUG() pretty early.
diff --git a/include/linux/list.h b/include/linux/list.h
index 75ce2cb..238ca1e 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -724,10 +724,17 @@ static inline int hlist_empty(const struct hlist_head *h)
return !h->first;
}
+#ifdef CONFIG_DEBUG_LIST
+extern void hlist_check(struct hlist_node *n);
+#else
+#define hlist_check(n) do { } while (0)
+#endif
+
static inline void __hlist_del(struct hlist_node *n)
{
struct hlist_node *next = n->next;
struct hlist_node **pprev = n->pprev;
+ hlist_check(n);
*pprev = next;
if (next)
next->pprev = pprev;
@@ -785,6 +792,7 @@ static inline void hlist_replace_rcu(struct hlist_node *old,
{
struct hlist_node *next = old->next;
+ hlist_check(old);
new->next = next;
new->pprev = old->pprev;
smp_wmb();
@@ -840,6 +848,7 @@ static inline void hlist_add_head_rcu(struct hlist_node *n,
static inline void hlist_add_before(struct hlist_node *n,
struct hlist_node *next)
{
+ hlist_check(next);
n->pprev = next->pprev;
n->next = next;
next->pprev = &n->next;
@@ -849,6 +858,7 @@ static inline void hlist_add_before(struct hlist_node *n,
static inline void hlist_add_after(struct hlist_node *n,
struct hlist_node *next)
{
+ hlist_check(next);
next->next = n->next;
n->next = next;
next->pprev = &n->next;
@@ -878,6 +888,7 @@ static inline void hlist_add_after(struct hlist_node *n,
static inline void hlist_add_before_rcu(struct hlist_node *n,
struct hlist_node *next)
{
+ hlist_check(next);
n->pprev = next->pprev;
n->next = next;
smp_wmb();
@@ -906,6 +917,7 @@ static inline void hlist_add_before_rcu(struct hlist_node *n,
static inline void hlist_add_after_rcu(struct hlist_node *prev,
struct hlist_node *n)
{
+ hlist_check(prev);
n->next = prev->next;
n->pprev = &prev->next;
smp_wmb();
diff --git a/lib/list_debug.c b/lib/list_debug.c
index 4350ba9..00b56bf 100644
--- a/lib/list_debug.c
+++ b/lib/list_debug.c
@@ -1,5 +1,8 @@
/*
* Copyright 2006, Red Hat, Inc., Dave Jones
+ * Copyright 2008 Intel Corporation
+ * Author: Matthew Wilcox <willy@linux.intel.com>
+ *
* Released under the General Public License (GPL).
*
* This file contains the linked list implementations for
@@ -76,3 +79,18 @@ void list_del(struct list_head *entry)
entry->prev = LIST_POISON2;
}
EXPORT_SYMBOL(list_del);
+
+void hlist_check(struct hlist_node *n)
+{
+ if (unlikely(*n->pprev != n)) {
+ printk(KERN_ERR "hlist corruption. *pprev should be %p, "
+ "but was %p\n", n, *n->pprev);
+ BUG();
+ }
+ if (unlikely(n->next != NULL && n->next->pprev != &n->next)) {
+ printk(KERN_ERR "hlist corruption. n->next->pprev should be"
+ "%p, but was %p\n", &n->next, n->next->pprev);
+ BUG();
+ }
+}
+EXPORT_SYMBOL(hlist_check);
--
Intel are signing my paycheques ... these opinions are still mine
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."
prev parent reply other threads:[~2008-04-21 17:23 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-18 8:47 2.6.25-mm1 Andrew Morton
2008-04-18 11:26 ` [PATCH] 2.6.25-mm1 - Build Failure with PWRficient onchip memory controller driver Kamalesh Babulal
2008-04-18 13:02 ` StackProtector Oopses - Re: 2.6.25-mm1 Reuben Farrelly
2008-04-18 13:36 ` Ingo Molnar
2008-04-18 13:51 ` Arjan van de Ven
2008-04-18 14:41 ` Reuben Farrelly
2008-04-18 14:49 ` Reuben Farrelly
2008-04-21 15:06 ` Ingo Molnar
2008-04-22 1:48 ` Arjan van de Ven
2008-04-22 2:04 ` Valdis.Kletnieks
2008-04-22 8:34 ` Ingo Molnar
2008-04-22 14:29 ` Arjan van de Ven
2008-04-18 16:40 ` 2.6.25-mm1 (build error: driver core) Randy Dunlap
2008-04-18 16:56 ` Greg KH
2008-04-18 18:38 ` Dan Williams
2008-04-18 16:45 ` 2.6.25-mm1 (build error: trace selftest) Randy Dunlap
2008-04-18 20:14 ` 2.6.25-mm1 Valdis.Kletnieks
2008-04-18 23:09 ` 2.6.25-mm1: orphaned files after build Alexey Dobriyan
2008-04-19 2:13 ` 2.6.25-mm1 Joseph Fannin
2008-04-19 3:02 ` 2.6.25-mm1 Andrew Morton
2008-04-19 4:14 ` 2.6.25-mm1 Dmitry Torokhov
2008-04-19 4:29 ` 2.6.25-mm1 Andrew Morton
2008-04-19 6:33 ` 2.6.25-mm1 Joseph Fannin
2008-04-21 11:07 ` 2.6.25-mm1 Takashi Iwai
2008-04-21 17:44 ` 2.6.25-mm1 (snd-pcsp causes driver conflict) Stas Sergeev
2008-04-22 10:09 ` Takashi Iwai
2008-04-22 17:54 ` Stas Sergeev
2008-04-23 8:55 ` Takashi Iwai
2008-04-23 14:14 ` Takashi Iwai
2008-04-21 19:45 ` 2.6.25-mm1 Stas Sergeev
2008-04-21 14:06 ` 2.6.25-mm1 Takashi Iwai
2008-04-21 17:55 ` 2.6.25-mm1 (snd-pcsp doesn't like DEBUG_PAGEALLOC) Stas Sergeev
2008-04-22 10:13 ` Takashi Iwai
2008-04-22 14:01 ` Dmitry Torokhov
2008-04-22 16:42 ` Stas Sergeev
2008-04-22 18:31 ` Stas Sergeev
2008-04-23 8:49 ` Takashi Iwai
2008-04-23 14:18 ` Takashi Iwai
2008-04-23 20:02 ` Stas Sergeev
2008-04-24 9:40 ` Takashi Iwai
2008-04-25 3:51 ` Stas Sergeev
2008-04-25 6:28 ` Takashi Iwai
2008-04-25 16:45 ` Stas Sergeev
2008-04-25 16:51 ` Takashi Iwai
2008-04-25 17:25 ` Stas Sergeev
2008-05-02 16:44 ` Takashi Iwai
2008-05-02 16:57 ` Stas Sergeev
2008-05-06 10:20 ` Takashi Iwai
2008-05-06 16:51 ` Stas Sergeev
2008-04-25 18:09 ` Dmitry Torokhov
2008-04-25 18:31 ` Stas Sergeev
2008-04-25 18:37 ` Dmitry Torokhov
2008-04-19 2:25 ` 2.6.25-mm1 Joseph Fannin
2008-04-19 3:08 ` 2.6.25-mm1 Andrew Morton
2008-04-19 3:10 ` 2.6.25-mm1 Joseph Fannin
2008-04-19 3:29 ` 2.6.25-mm1 Andrew Morton
2008-04-19 13:25 ` 2.6.25-mm1 Andres Salomon
2008-04-19 17:38 ` 2.6.25-mm1 Andrew Morton
2008-04-19 17:50 ` 2.6.25-mm1 Andres Salomon
2008-04-21 14:56 ` 2.6.25-mm1 Jordan Crouse
2008-04-21 15:05 ` 2.6.25-mm1 Andres Salomon
2008-04-21 15:12 ` 2.6.25-mm1 Jordan Crouse
2008-04-19 17:39 ` [PATCH 1/2] OLPC: Add support for calling into Open Firmware Andres Salomon
2008-04-20 10:34 ` Yinghai Lu
2008-04-20 12:07 ` H. Peter Anvin
2008-04-20 17:59 ` Andres Salomon
2008-04-20 18:42 ` Mitch Bradley
2008-04-20 19:12 ` H. Peter Anvin
2008-04-21 3:39 ` Mitch Bradley
2008-04-21 4:54 ` Yinghai Lu
2008-04-21 8:22 ` Mitch Bradley
2008-04-21 11:36 ` H. Peter Anvin
2008-04-21 13:09 ` H. Peter Anvin
2008-04-21 13:13 ` H. Peter Anvin
2008-04-21 13:19 ` H. Peter Anvin
2008-04-21 15:05 ` Jordan Crouse
2008-04-21 14:58 ` H. Peter Anvin
2008-04-20 19:13 ` [PATCH 1/2] " H. Peter Anvin
2008-04-21 3:09 ` Mitch Bradley
2008-04-21 3:15 ` Yinghai Lu
2008-04-21 4:05 ` Mitch Bradley
2008-04-21 4:26 ` David Miller
2008-04-21 4:50 ` Yinghai Lu
2008-04-21 8:03 ` Mitch Bradley
2008-04-21 14:24 ` Andres Salomon
2008-04-21 15:54 ` David Woodhouse
2008-04-21 16:57 ` H. Peter Anvin
2008-04-21 18:54 ` David Woodhouse
2008-04-21 17:03 ` Andres Salomon
2008-04-21 19:18 ` David Woodhouse
2008-04-21 19:46 ` Andres Salomon
2008-04-21 20:25 ` David Woodhouse
2008-04-21 21:02 ` [PATCH] OLPC: only check for OFW signature on VSA-less Geodes Andres Salomon
2008-04-21 21:17 ` Jordan Crouse
2008-04-21 21:17 ` [PATCH] " David Woodhouse
2008-04-29 3:06 ` Andrew Morton
2008-04-29 5:32 ` [PATCH] x86: GEODE: cache results from geode_has_vsa2() and uninline Andres Salomon
2008-04-29 20:35 ` Andrew Morton
2008-04-29 20:57 ` Andres Salomon
2008-04-19 17:39 ` [PATCH 2/2] OLPC: drop pre-OpenFirmware workarounds Andres Salomon
2008-04-19 18:21 ` 2.6.25-mm1 Arjan van de Ven
2008-04-20 11:29 ` internal compiler error: SIGSEGV [Was: 2.6.25-mm1] Jiri Slaby
2008-04-21 8:31 ` Jiri Slaby
2008-04-21 9:06 ` Al Viro
2008-04-21 9:37 ` fault in __d_lookup " Jiri Slaby
2008-04-21 9:45 ` Al Viro
2008-04-21 9:59 ` Jiri Slaby
2008-04-21 13:42 ` Rafael J. Wysocki
2008-04-21 17:23 ` Matthew Wilcox [this message]
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=20080421172305.GC20637@parisc-linux.org \
--to=matthew@wil.cx \
--cc=akpm@linux-foundation.org \
--cc=jirislaby@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@ZenIV.linux.org.uk \
/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