1 Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/namei.c
2 ===================================================================
3 --- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/namei.c
4 +++ linux-3.10.9-200.fc17.x86_64/fs/ext4/namei.c
5 @@ -1438,6 +1438,33 @@ static struct dentry *ext4_lookup(struct
9 + /* ".." shouldn't go into dcache to preserve dcache hierarchy
10 + * otherwise we'll get parent being a child of actual child.
11 + * see bug 10458 for details -bzzz */
12 + if (inode && (dentry->d_name.name[0] == '.' &&
13 + (dentry->d_name.len == 1 || (dentry->d_name.len == 2 &&
14 + dentry->d_name.name[1] == '.')))) {
15 + struct dentry *goal = NULL;
17 + /* first, look for an existing dentry - any one is good */
18 + goal = d_find_any_alias(inode);
20 + spin_lock(&dentry->d_lock);
21 + /* there is no alias, we need to make current dentry:
22 + * a) inaccessible for __d_lookup()
23 + * b) inaccessible for iopen */
24 + J_ASSERT(hlist_unhashed(&dentry->d_u.d_alias));
25 + dentry->d_flags |= DCACHE_NFSFS_RENAMED;
26 + /* this is d_instantiate() ... */
27 + hlist_add_head(&dentry->d_u.d_alias, &inode->i_dentry);
28 + dentry->d_inode = inode;
29 + spin_unlock(&dentry->d_lock);
36 return d_splice_alias(inode, dentry);