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