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