[Pvfs2-cvs] commit by pcarns in pvfs2-1/src/kernel/linux-2.6: dir.c

CVS commit program cvs at parl.clemson.edu
Thu Sep 11 10:28:49 EDT 2008


Update of /projects/cvsroot/pvfs2-1/src/kernel/linux-2.6
In directory parlweb1:/tmp/cvs-serv6442/src/kernel/linux-2.6

Modified Files:
	dir.c 
Log Message:
Bug fix to readdir token logic.  If we hit the end of directory from PVFS,
make sure that we were able to report all of the entries to filldir
before propigating end of dir flag to caller.


Index: dir.c
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/kernel/linux-2.6/dir.c,v
diff -p -u -r1.55 -r1.56
--- dir.c	14 May 2008 17:22:20 -0000	1.55
+++ dir.c	11 Sep 2008 14:28:49 -0000	1.56
@@ -123,6 +123,7 @@ static int pvfs2_readdir(
     struct dentry *dentry = file->f_dentry;
     pvfs2_kernel_op_t *new_op = NULL;
     pvfs2_inode_t *pvfs2_inode = PVFS2_I(dentry->d_inode);
+    int buffer_full = 0;
 
     pos = (PVFS_ds_position)file->f_pos;
     /* are we done? */
@@ -291,11 +292,12 @@ static int pvfs2_readdir(
                     /* this means a filldir call failed */
                     file->f_pos = i - 1;
                     gossip_debug(GOSSIP_DIR_DEBUG, "at least one filldir call failed.  Setting f_pos to: %ld\n", (unsigned long) file->f_pos);
+                    buffer_full = 1;
                 }
             }
 
             /* did we hit the end of the directory? */
-            if(rhandle.readdir_response.token == PVFS_READDIR_END)
+            if(rhandle.readdir_response.token == PVFS_READDIR_END && !buffer_full)
             {
                 gossip_debug(GOSSIP_DIR_DEBUG,
                     "End of dir detected; setting f_pos to PVFS_READDIR_END.\n");



More information about the Pvfs2-cvs mailing list