From: David Howells <dhowells@xxxxxxxxxx> Make __d_materialise_dentry() set the materialised dentry name correctly by flipping the arguments to switch_names(). switch_names() is lazy: if both names are internal to their dentries, it'll overwrite that of the first dentry with that of the second, and won't update that of the second. In the case of __d_materialise_dentry(), the second is an already extant anonymous dentry that we want to insert into the tree in place of the dentry we just looked up[*]. However, the dentry we just looked up carries the name we actually want to use. [*] This is used by NFS to join a mount of a subtree into a mount of a tree nearer the root when the two meet, where both mounts share a superblock and thus a set of dentries. Signed-off-by: David Howells <dhowells@xxxxxxxxxx> --- fs/dcache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/dcache.c b/fs/dcache.c index 265e0ce..ff779d4 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2698,7 +2698,7 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon) dparent = dentry->d_parent; - switch_names(dentry, anon); + switch_names(anon, dentry); swap(dentry->d_name.hash, anon->d_name.hash); dentry->d_parent = dentry; -- 1.8.5.3 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html