+static int mnt_is_reachable(struct vfsmount *mnt)
+{
+ struct vfsmount *root_mnt;
+ struct dentry *root, *point;
+ int ret;
+
+ if (!mnt)
+ return 1;
+ if (mnt == mnt->mnt_namespace->root)
+ return 1;
+
+ spin_lock(&dcache_lock);
+ root_mnt = current->fs->rootmnt;
+ root = current->fs->root;
+ point = root;
+
+ while ((mnt != mnt->mnt_parent) && (mnt != root_mnt)) {
+ point = mnt->mnt_mountpoint;
+ mnt = mnt->mnt_parent;
+ }
+
+ ret = (mnt == root_mnt) && is_subdir(point, root);
+
+ spin_unlock(&dcache_lock);
+
+ return ret;
+}
+