On Nov 8, 2006, at 11:45 AM, Murali Vilayannur wrote:
Hi Phil,
I dont have the code to check up on that right now. but if I recall
correctly, we don't want to fill . and .. multiple times and we use
the directory_version check as a crude way to know when to fill it and
when not.
i.e. if that was 0, we are starting out to read the directory and so
we fill . and ..
After the entire readdir is over we set the version back to 0.
It is possible there is a bug. I can check it up later today and get
back to you.
From what I can tell the directory_version gets set to the mtime
after the first upcall. If future upcalls changed the mtime, we used
to start over, and we didn't want to call filldir again on . and ..
But we recently changed this code to not start over if the directory
version changed from one readdir call to the next (it was causing
duplicate entries, see: http://www.beowulf-underground.org/pipermail/
pvfs2-developers/2006-October/002739.html), instead we just update
the directory version stored in the inode. There's also the diff of
the Murali's changes:
http://www.pvfs.org/cgi-bin/pvfs2/viewcvs/viewcvs.cgi/pvfs2/src/
kernel/linux-2.6/dir.c.diff?r1=1.45&r2=1.46
The directory_version gets set back to 0 once we hit the end of a
directory, so I could imagine that killing an ls while its listing a
directory with many entries would cause the directory version to be
set to the mtime of the last readdir call before the abort. This
would give the behavior of the . and .. not showing up in the next
listing, but as long as that listing was allowed to complete, the
directory_version would be set back to 0 again.
Given that we removed the code that restarts if the version changes
on us midway through a listing, can we assume that the position will
be set to 0 _only_ on the first readdir call? This would allow us to
remove the directory_version == 0 check. In fact we should be able
to remove the PVFS_READDIR_END check that sets the directory_version
back to 0 as well...
-sam
thanks,
Murali
On 11/8/06, Phil Carns <[EMAIL PROTECTED]> wrote:
It's been a while since I've seen this bug first hand, but I am
just now
getting around to looking at it.
Every once in a while we have seen cases where "ls -al" in a pvfs2
directory fails to show the "." and ".." entries. I _think_ this has
mainly occurred after restarting pvfs2-client and/or pvfs2-server,
but I
am not certain. I can't seem to reproduce it.
At any rate, looking at the code in dir.c, it seems like filling
in the
"." and ".." entries should be pretty much automatic. However,
there is
an if statement wrapped around the filldir() calls that looks like
this:
if (pvfs2_inode->directory_version == 0)
{
Anyone know what the purpose if this check is? It seems to me
like "."
and ".." should be entries for position 0 and 1 regardless of the
directory version, but I may be missing something.
-Phil
_______________________________________________
Pvfs2-developers mailing list
Pvfs2-developers@beowulf-underground.org
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
_______________________________________________
Pvfs2-developers mailing list
Pvfs2-developers@beowulf-underground.org
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
_______________________________________________
Pvfs2-developers mailing list
Pvfs2-developers@beowulf-underground.org
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers