diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-11-24 22:00:28 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-03 22:57:04 -0500 |
commit | 643822b41e5e0f133438883b0be574cdaf168a2a (patch) | |
tree | 1b9bbeace5c1078ae6e893e2f826b724411d3a07 /fs/namespace.c | |
parent | 676da58df740f325034b8641311413c2393588e1 (diff) |
vfs: spread struct mount - is_path_reachable
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index ced3aa53fb38..b117d94fcdc1 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -2559,21 +2559,21 @@ out_type: | |||
2559 | * | 2559 | * |
2560 | * namespace_sem or vfsmount_lock is held | 2560 | * namespace_sem or vfsmount_lock is held |
2561 | */ | 2561 | */ |
2562 | bool is_path_reachable(struct vfsmount *mnt, struct dentry *dentry, | 2562 | bool is_path_reachable(struct mount *mnt, struct dentry *dentry, |
2563 | const struct path *root) | 2563 | const struct path *root) |
2564 | { | 2564 | { |
2565 | while (mnt != root->mnt && mnt_has_parent(real_mount(mnt))) { | 2565 | while (&mnt->mnt != root->mnt && mnt_has_parent(mnt)) { |
2566 | dentry = mnt->mnt_mountpoint; | 2566 | dentry = mnt->mnt.mnt_mountpoint; |
2567 | mnt = mnt->mnt_parent; | 2567 | mnt = real_mount(mnt->mnt.mnt_parent); |
2568 | } | 2568 | } |
2569 | return mnt == root->mnt && is_subdir(dentry, root->dentry); | 2569 | return &mnt->mnt == root->mnt && is_subdir(dentry, root->dentry); |
2570 | } | 2570 | } |
2571 | 2571 | ||
2572 | int path_is_under(struct path *path1, struct path *path2) | 2572 | int path_is_under(struct path *path1, struct path *path2) |
2573 | { | 2573 | { |
2574 | int res; | 2574 | int res; |
2575 | br_read_lock(vfsmount_lock); | 2575 | br_read_lock(vfsmount_lock); |
2576 | res = is_path_reachable(path1->mnt, path1->dentry, path2); | 2576 | res = is_path_reachable(real_mount(path1->mnt), path1->dentry, path2); |
2577 | br_read_unlock(vfsmount_lock); | 2577 | br_read_unlock(vfsmount_lock); |
2578 | return res; | 2578 | return res; |
2579 | } | 2579 | } |
@@ -2659,7 +2659,7 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, | |||
2659 | if (!mnt_has_parent(new_mnt)) | 2659 | if (!mnt_has_parent(new_mnt)) |
2660 | goto out4; /* not attached */ | 2660 | goto out4; /* not attached */ |
2661 | /* make sure we can reach put_old from new_root */ | 2661 | /* make sure we can reach put_old from new_root */ |
2662 | if (!is_path_reachable(old.mnt, old.dentry, &new)) | 2662 | if (!is_path_reachable(real_mount(old.mnt), old.dentry, &new)) |
2663 | goto out4; | 2663 | goto out4; |
2664 | br_write_lock(vfsmount_lock); | 2664 | br_write_lock(vfsmount_lock); |
2665 | detach_mnt(new_mnt, &parent_path); | 2665 | detach_mnt(new_mnt, &parent_path); |