On Thu, Jan 24, 2008 at 01:33:50PM -0600, Wei-keng Liao wrote:
> Rob,
> 
> That looks like the same problem based on the dmesg error.
> If you can send me the patch, that will be great.
> Thanks.

OK, try this patch and let us know how it goes.

==rob

-- 
Rob Latham
Mathematics and Computer Science Division    A215 0178 EA2D B059 8CDF
Argonne National Lab, IL USA                 B29D F333 664A 4280 315B
Index: src/kernel/linux-2.6/dcache.c
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/kernel/linux-2.6/dcache.c,v
retrieving revision 1.32
retrieving revision 1.32.2.2
diff -u -w -p -r1.32 -r1.32.2.2
--- src/kernel/linux-2.6/dcache.c       9 Oct 2007 00:05:39 -0000       1.32
+++ src/kernel/linux-2.6/dcache.c       23 Jan 2008 19:58:12 -0000      1.32.2.2
@@ -35,14 +35,8 @@ static int pvfs2_d_revalidate_common(str
         gossip_debug(GOSSIP_DCACHE_DEBUG, "pvfs2_d_revalidate_common: parent 
not found.\n");
     }
     
-    if (inode == NULL) {
-        return 1;
-    }
     if (inode && parent_inode)
     {
-        if (is_bad_inode(inode)) {
-            return 0;
-        }
         /* first perform a lookup to make sure that the object not only
          * exists, but is still in the expected place in the name space 
          */
@@ -79,30 +73,14 @@ static int pvfs2_d_revalidate_common(str
                 new_op, "pvfs2_lookup", 
                 get_interruptible_flag(parent_inode));
 
-            if ((new_op->downcall.status != 0)) {
-                gossip_debug(GOSSIP_DCACHE_DEBUG, "pvfs2_d_revalidate_common: 
lookup failure.\n");
-                op_release(new_op);
-                return 0;
-            }
-            /* no match */
-            if (!match_handle(new_op->downcall.resp.lookup.refn.handle, inode))
+            if((new_op->downcall.status != 0) || 
+                    !match_handle(new_op->downcall.resp.lookup.refn.handle, 
inode))
             {
-                struct inode *res_inode;
-
-                /* Find or allocate a new inode for this new handle */
-                res_inode = pvfs2_iget(parent_inode->i_sb, 
&new_op->downcall.resp.lookup.refn);
-                if (res_inode != NULL) {
-                    /* associate with the given dentry */
-                    pvfs2_d_splice_alias(dentry, res_inode);
-                    gossip_debug(GOSSIP_DCACHE_DEBUG, 
"pvfs2_d_revalidate_common: associated inode %llu)\n",
-                                 llu(get_handle_from_ino(res_inode)));
-                    inode = res_inode;
-                } else {
                     gossip_debug(GOSSIP_DCACHE_DEBUG, 
"pvfs2_d_revalidate_common: lookup failure or no match.\n");
                     op_release(new_op);
                     return(0);
                 }
-            }
+            
             op_release(new_op);
         }
         else
@@ -123,6 +101,12 @@ static int pvfs2_d_revalidate_common(str
     return ret;
 }
 
+static int pvfs2_d_delete (struct dentry * dentry)
+{
+    gossip_debug(GOSSIP_DCACHE_DEBUG, "pvfs2_d_delete: called on dentry 
%p.\n", dentry);
+    return 1;
+}
+
 /* should return 1 if dentry can still be trusted, else 0 */
 #ifdef PVFS2_LINUX_KERNEL_2_4
 static int pvfs2_d_revalidate(
@@ -187,6 +171,7 @@ struct dentry_operations pvfs2_dentry_op
     .d_revalidate = pvfs2_d_revalidate,
     .d_hash = pvfs2_d_hash,
     .d_compare = pvfs2_d_compare,
+    .d_delete = pvfs2_d_delete,
 };
 
 /*
_______________________________________________
Pvfs2-users mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-users

Reply via email to