Commit 967dba60 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

mount: add helper mntns_get_root_by_mnt_id

Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent e4e22a00
...@@ -676,7 +676,6 @@ int open_path(struct file_desc *d, ...@@ -676,7 +676,6 @@ int open_path(struct file_desc *d,
int(*open_cb)(int mntns_root, struct reg_file_info *, void *), void *arg) int(*open_cb)(int mntns_root, struct reg_file_info *, void *), void *arg)
{ {
struct reg_file_info *rfi; struct reg_file_info *rfi;
struct ns_id *ns;
int tmp, mntns_root; int tmp, mntns_root;
char *orig_path = NULL; char *orig_path = NULL;
...@@ -722,12 +721,7 @@ int open_path(struct file_desc *d, ...@@ -722,12 +721,7 @@ int open_path(struct file_desc *d,
} }
} }
ns = lookup_nsid_by_mnt_id(rfi->rfe->mnt_id); mntns_root = mntns_get_root_by_mnt_id(rfi->rfe->mnt_id);
if (ns == NULL)
return -1;
mntns_root = mntns_get_root_fd(ns);
tmp = open_cb(mntns_root, rfi, arg); tmp = open_cb(mntns_root, rfi, arg);
if (tmp < 0) { if (tmp < 0) {
pr_perror("Can't open file %s", rfi->path); pr_perror("Can't open file %s", rfi->path);
......
...@@ -6,6 +6,7 @@ extern struct mount_info *mntinfo; ...@@ -6,6 +6,7 @@ extern struct mount_info *mntinfo;
struct ns_id; struct ns_id;
extern int __mntns_get_root_fd(pid_t pid); extern int __mntns_get_root_fd(pid_t pid);
extern int mntns_get_root_fd(struct ns_id *ns); extern int mntns_get_root_fd(struct ns_id *ns);
extern int mntns_get_root_by_mnt_id(int mnt_id);
extern struct ns_id *lookup_nsid_by_mnt_id(int mnt_id); extern struct ns_id *lookup_nsid_by_mnt_id(int mnt_id);
struct proc_mountinfo; struct proc_mountinfo;
......
...@@ -2062,6 +2062,16 @@ struct ns_id *lookup_nsid_by_mnt_id(int mnt_id) ...@@ -2062,6 +2062,16 @@ struct ns_id *lookup_nsid_by_mnt_id(int mnt_id)
return mi->nsid; return mi->nsid;
} }
int mntns_get_root_by_mnt_id(int mnt_id)
{
struct ns_id *mntns;
mntns = lookup_nsid_by_mnt_id(mnt_id);
BUG_ON(mntns == NULL);
return mntns_get_root_fd(mntns);
}
static int walk_mnt_ns(int (*cb)(struct ns_id *, struct mount_info *, void *), void *arg) static int walk_mnt_ns(int (*cb)(struct ns_id *, struct mount_info *, void *), void *arg)
{ {
struct mount_info *pms; struct mount_info *pms;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment