[Lustre-discuss] question about dcache revalidate
tao.peng at emc.com
tao.peng at emc.com
Wed Jan 11 06:06:43 PST 2012
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
More information about the lustre-discuss
mailing list