Re: Oops with tmpfs on both 2.4.22 & 2.6.0-test11

From: James W McMechan
Date: Wed Dec 03 2003 - 06:17:13 EST

> Hi,
> I hope nobody minds me jumping in this thread. I have been looking
> at this code for some time and hope I have got the facts correct.
Thank you, so far it is no longer crashing :)

> The two list_xxx macros as mentioned (fs/libfs.c:line 137) adjusts
> the cursor dentry to the beginning of the d_subdirs list needed for
> (file->f_pos == 2) as there can be additions in the d_subdirs list
> after the open call and before ->lseek or ->readdir call.
> The cursor adjustment in dcache_dir_lseek() (fs/libfs.c: line 90)
> always puts the cursor just before the last looked dentry in the
> while loop.
> But it is problematic when we have an empty directory and
> (file->f_pos == 2)
> In this case we have the loop counter p pointing to the cursor and
> doing list_del and list_add_tail of the same list node results in oops.
This is where I get mildly lost, from what you are saying here I
would have expected a test on list_empty rather than on
fpos==2 also this occurs in every file, will starting in a different
pos in the list cause problems?

With further testing it also Oops even when the dir is not empty
I did a "touch /dev/shm/1 /dev/shm/2 /dev/shm/3" to put some
entries in the dir first and the original still oops at offset 2

I should do more testing, to see if I can find out what happens
on non empty dirs, because I was thinking it was due to the
dir being empty, which now appears not to be true.

> The following patch takes (file->f_post == 2) as a special case and
> adjusts the cursor dentry by putting it right at the beginning of the
> d_subdirs list.
Also is the new variable dentry needed or just a optimization?
It looks functionally equivalent, but perhaps it is needed for
something I am not seeing at the moment.
> Thanks
> Maneesh

The best thing to hit the internet in years - Juno SpeedBand!
Surf the web up to FIVE TIMES FASTER!
Only $14.95/ month - visit to sign up today!
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at