Oops in d_instantiate (fs/cache.c)

From: Stijn Devriendt
Date: Sat Dec 03 2011 - 07:19:29 EST


Hi all,

I've had 2 occasions where udev crashed during bootup.
The second time carried a kernel log where the following line
"BUG_ON(!list_empty(&entry->d_alias))"
in d_instantiate is triggered when udev is attempting to
create a symlink in /dev (which is tmpfs/shmem).

I've tried reproducing this by doing as udev does:
- create temporary symlink
- move temporary symlink into place
in a tight loop (multiple processes) while multiple
other processes were removing the symlink in a
tight loop.
A third script was flushing the dentry/inode cache
every so often using drop_caches.
All to no avail.

I've been digging around in the kernel sources,
but I'm not sure what the d_alias field means
and what the actual case is the BUG_ON is
meant to catch. I'd like to be able to find a way
to reproduce this, because so far it's happened only
twice in 2 weeks over multiple systems doing
many reboots in a testing setup.
Can someone explain this to me in short?

Thanks,
Stijn
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/