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

James W McMechan
2003-12-03T11:15:20Z

> 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 www.juno.com to sign up today!