aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dcache.c
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2010-08-10 05:41:38 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2010-08-11 00:28:21 -0400
commit98dc568bc2ebefe4c0cb315a7fb7eff8bbb43176 (patch)
tree54cc4353683020df6669bc8b1aa5b55ebe3ab1f3 /fs/dcache.c
parent7ae6bdbd9b9d42da53ea809875c0a6cda3de694c (diff)
vfs: __d_path: dont prepend the name of the root dentry
In the old times pseudo-filesystems set the name of theroot dentry to some prefix like "pipe:" and the name of the child dentry to "[123]" and relied on a hack in __d_path() to replace the preceding slash with the root's name to get "pipe:[123]". Then the d_dname() dentry operation was introduced which solved the same problem without having to pre-fill the name in each dentry. Currently the following pseudo filesystems exist in the kernel: perfmon mtd anon_inode bdev pipe socket Of these only perfmon, anon_inode, pipe and socket create sub-dentries, all of which have now been switched to using d_dname(). bdev and mtd only create inodes. This means that now the hack to overwrite the slash can be removed, so for unreachable paths (e.g. within a detached mount) the path string won't be polluted with garbage. For these cases a subsequent patch will add a prefix, indicating that the path is unreachable. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/dcache.c')
-rw-r--r--fs/dcache.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/dcache.c b/fs/dcache.c
index 995d08069d26..f1809e6b9fda 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -1970,9 +1970,15 @@ out:
1970 return retval; 1970 return retval;
1971 1971
1972global_root: 1972global_root:
1973 retval += 1; /* hit the slash */ 1973 /*
1974 if (prepend_name(&retval, &buflen, &dentry->d_name) != 0) 1974 * Filesystems needing to implement special "root names"
1975 goto Elong; 1975 * should do so with ->d_dname()
1976 */
1977 if (IS_ROOT(dentry) &&
1978 (dentry->d_name.len != 1 || dentry->d_name.name[0] != '/')) {
1979 WARN(1, "Root dentry has weird name <%.*s>\n",
1980 (int) dentry->d_name.len, dentry->d_name.name);
1981 }
1976 root->mnt = vfsmnt; 1982 root->mnt = vfsmnt;
1977 root->dentry = dentry; 1983 root->dentry = dentry;
1978 goto out; 1984 goto out;