|
@@ -3061,8 +3061,13 @@ char *d_path(const struct path *path, char *buf, int buflen)
|
|
* thus don't need to be hashed. They also don't need a name until a
|
|
* thus don't need to be hashed. They also don't need a name until a
|
|
* user wants to identify the object in /proc/pid/fd/. The little hack
|
|
* user wants to identify the object in /proc/pid/fd/. The little hack
|
|
* below allows us to generate a name for these objects on demand:
|
|
* below allows us to generate a name for these objects on demand:
|
|
|
|
+ *
|
|
|
|
+ * Some pseudo inodes are mountable. When they are mounted
|
|
|
|
+ * path->dentry == path->mnt->mnt_root. In that case don't call d_dname
|
|
|
|
+ * and instead have d_path return the mounted path.
|
|
*/
|
|
*/
|
|
- if (path->dentry->d_op && path->dentry->d_op->d_dname)
|
|
|
|
|
|
+ if (path->dentry->d_op && path->dentry->d_op->d_dname &&
|
|
|
|
+ (!IS_ROOT(path->dentry) || path->dentry != path->mnt->mnt_root))
|
|
return path->dentry->d_op->d_dname(path->dentry, buf, buflen);
|
|
return path->dentry->d_op->d_dname(path->dentry, buf, buflen);
|
|
|
|
|
|
rcu_read_lock();
|
|
rcu_read_lock();
|