Re: autofs freezes in _dlookup? [Re: 2.1.51 Still Freezing]

Ingo Molnar (mingo@pc7537.hil.siemens.at)
Tue, 19 Aug 1997 16:52:35 +0200 (MET DST)


On Tue, 19 Aug 1997, Janos Farkas wrote:

> On 1997-08-19 at 00:51:49, Jeff DeFouw wrote:
> > The problem I had in 2.1.49 is still there. It appears a few other
> > people are experiencing it too. This time it happened in X so I was
> > unable to view any info. What I've found out:
>
> I've seen similar things since 2.1.49, 50, 51-pre1, and about to check
> 51. For me, it always happened when autofs tried to expire an ext2fs
> volume. EIP debugging output showed that the kernel is stuck inside
> __dlookup(), in the while(tmp != head) loop. I don't know why,
> it's probably impossible. Bill? :)

it happened here too, 2.1.51-orig, but no autofs ...

doesnt magic Sysreq have some 'oops me now' action for current task? That
way we'd have a full function trace immediately ...

[2 mins later] ... whatever, could you install this patch, i'm running it
on that box now, but the bug is quite rare (here that is).

-- mingo

--- .dcache.c.original Tue Aug 19 18:43:05 1997
+++ dcache.c Tue Aug 19 18:45:51 1997
@@ -227,9 +227,17 @@
const unsigned char *str = name->name;

while (tmp != head) {
+ int __counter = 0;
struct dentry * dentry = list_entry(tmp, struct dentry, d_hash);

tmp = tmp->next;
+
+ if (++__counter>9900)
+ printk("inode: %ld.\n", dentry->d_inode ?
+ dentry->d_inode->i_ino : 0);
+ if (__counter>10000)
+ goto *0;
+
if (dentry->d_name.hash != hash)
continue;
if (dentry->d_parent != parent)