[EMAIL PROTECTED] wrote on Tue, 25 Mar 2008 15:10 -0500:
> In fact our error handling here looks to be a little wrong.  When we return 
> 0 from d_revalidate, the kernel assumes the file has been removed and 
> populates the dcache with a negative dentry (then tries to create the file 
> in the open case).  But if getattr fails after lookup succeeds, we may have 
> more than an invalid dentry.
>
> In most cases where getattr returns an error we probably want to push that 
> error all the way back up the stack, instead of just populating the dcache 
> with a negative dentry.  We could check for ENOENT from getattr and return 
> 0, otherwise return the errno?  Do the same for lookup failure?
>
> Also, if the kernel gives us a null dentry, do we really want to return 
> invalid dentry, or EINVAL with a big hairy gossip_err message to the log?  
> At least in the current kernel, d_revalidate is never called with a null 
> dentry.

I'm so far out of my element here.  What you say makes a lot of
sense; however, we should hesitate to change anything in a big way,
given the 84 different versions of linux we support.  Maybe a
testcase would help to motivate this sort of problem.  Could be it
only occurs when multiple clients race on create/remove.

                -- Pete
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to