Hi,

I was reading dcache.c and following comments in ll_revalidate_it() seem 
confusing. Does it mean llite can hash a positive dentry to dcache without 
taking inode LOOKUP lock?

589         /*
590          * This part is here to combat evil-evil race in real_lookup on 2.6
591          * kernels.  The race details are: We enter do_lookup() looking for 
some
592          * name, there is nothing in dcache for this name yet and d_lookup()
593          * returns NULL.  We proceed to real_lookup(), and while we do this,
594          * another process does open on the same file we looking up (most 
simple
595          * reproducer), open succeeds and the dentry is added. Now back to
596          * us. In real_lookup() we do d_lookup() again and suddenly find the
597          * dentry, so we call d_revalidate on it, but there is no lock, so
598          * without this code we would return 0, but unpatched real_lookup 
just
599          * returns -ENOENT in such a case instead of retrying the lookup. 
Once
600          * this is dealt with in real_lookup(), all of this ugly mess can 
go and
601          * we can just check locks in ->d_revalidate without doing any RPCs
602          * ever.
603          */

Best Regards,
Tao


_______________________________________________
Lustre-discuss mailing list
Lustre-discuss@lists.lustre.org
http://lists.lustre.org/mailman/listinfo/lustre-discuss

Reply via email to