Get rpc_pipefs mount point by path. Signed-off-by: Kirill A. Shutemov <kas@xxxxxxxxxx> --- include/linux/sunrpc/rpc_pipe_fs.h | 2 + net/sunrpc/rpc_pipe.c | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 0 deletions(-) diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index b09bfa5..922057c 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h @@ -46,6 +46,8 @@ RPC_I(struct inode *inode) extern struct vfsmount *init_rpc_pipefs; +struct vfsmount *get_rpc_pipefs(const char *path); + extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); struct rpc_clnt; diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index b1e299b..fec6b2d 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -16,6 +16,7 @@ #include <linux/namei.h> #include <linux/fsnotify.h> #include <linux/kernel.h> +#include <linux/nsproxy.h> #include <asm/ioctls.h> #include <linux/fs.h> @@ -931,6 +932,43 @@ static const struct super_operations s_ops = { #define RPCAUTH_GSSMAGIC 0x67596969 +struct vfsmount *get_rpc_pipefs(const char *p) +{ + int error; + struct vfsmount *rpcmount; + struct path path; + + if (!p) { + /* Try to get with default rpcmount mount point */ + rpcmount = get_rpc_pipefs("/var/lib/nfs/rpc_pipefs"); + + /* + * If nothing was found at default mount point and init's + * mount namespace is in use, use init_rpc_pipefs + */ + if (IS_ERR(rpcmount) && (current->nsproxy->mnt_ns == + init_task.nsproxy->mnt_ns)) + return mntget(init_rpc_pipefs); + + return rpcmount; + } + + error = kern_path(p, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path); + if (error) + return ERR_PTR(error); + + if (path.mnt->mnt_sb->s_magic != RPCAUTH_GSSMAGIC) { + path_put(&path); + return ERR_PTR(-EINVAL); + } + + rpcmount = mntget(path.mnt); + path_put(&path); + + return rpcmount; +} +EXPORT_SYMBOL_GPL(get_rpc_pipefs); + /* * We have a single directory with 1 node in it. */ -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html