diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-11-23 19:26:23 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-03 22:52:36 -0500 |
commit | b2dba1af3c4157040303a76d25216b1713d333d0 (patch) | |
tree | c846b1c8074d29b9fc02ef3eeda98631dfd6ee94 /fs/dcache.c | |
parent | aa9c0e07bb90589186f3b5a0ca97660c2cb50806 (diff) | |
download | linux-3.10-b2dba1af3c4157040303a76d25216b1713d333d0.tar.gz linux-3.10-b2dba1af3c4157040303a76d25216b1713d333d0.tar.bz2 linux-3.10-b2dba1af3c4157040303a76d25216b1713d333d0.zip |
vfs: new internal helper: mnt_has_parent(mnt)
vfsmounts have ->mnt_parent pointing either to a different vfsmount
or to itself; it's never NULL and termination condition in loops
traversing the tree towards root is mnt == mnt->mnt_parent. At least
one place (see the next patch) is confused about what's going on;
let's add an explicit helper checking it right way and use it in
all places where we need it. Not that there had been too many,
but...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/dcache.c')
-rw-r--r-- | fs/dcache.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index 89509b5a090..8a75e3b0f49 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -38,6 +38,7 @@ #include <linux/prefetch.h> #include <linux/ratelimit.h> #include "internal.h" +#include "mount.h" /* * Usage: @@ -2460,9 +2461,8 @@ static int prepend_path(const struct path *path, if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) { /* Global root? */ - if (vfsmnt->mnt_parent == vfsmnt) { + if (!mnt_has_parent(vfsmnt)) goto global_root; - } dentry = vfsmnt->mnt_mountpoint; vfsmnt = vfsmnt->mnt_parent; continue; @@ -2862,7 +2862,7 @@ int path_is_under(struct path *path1, struct path *path2) br_read_lock(vfsmount_lock); if (mnt != path2->mnt) { for (;;) { - if (mnt->mnt_parent == mnt) { + if (!mnt_has_parent(mnt)) { br_read_unlock(vfsmount_lock); return 0; } |