Messages in this thread | | | Date | Wed, 3 Dec 2003 17:32:44 +0530 | From | Maneesh Soni <> | Subject | Re: Oops with tmpfs on both 2.4.22 & 2.6.0-test11 |
| |
On Wed, Dec 03, 2003 at 03:06:14AM -0800, James W McMechan wrote: [..]
> > > > 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?
The cursor dentry is added in d_subdirs list in the ->open call for the directory. So even if directory is empty from a user point of view, the d_subdirs list will ateast have the cursor dentry. In other words when we come to ->lseek or ->readdir call, we will not have empty d_subdirs list.
> > 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.
humm.. yeah.. the original case will always oops for offset 2 irrespective of whether directory is empty or not. Because in case of non-empty dir also we will have p pointing to cursor dentry for offset 2. Thanks for letting me know one more fact.
> > > 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. That's just to make code readable, without this it will have line beyond 80 columns and also it has to de-reference multiple levels of pointers.
Thanks Maneesh
-- Maneesh Soni Linux Technology Center, IBM Software Lab, Bangalore, India email: maneesh@in.ibm.com Phone: 91-80-5044999 Fax: 91-80-5268553 T/L : 9243696 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |