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>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user