OpenVZ Forum - RDF feed
type: channel
items: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
items: [PATCH v3 01/16] sunrpc: mount rpc_pipefs on initialization
items: [PATCH v3 02/16] sunrpc: introduce init_rpc_pipefs
items: [PATCH v3 03/16] sunrpc: push init_rpc_pipefs up to rpc_create() callers
items: [PATCH v3 04/16] sunrpc: tag svc_serv with rpc_pipefs mount point
items: [PATCH v3 05/16] sunrpc: get rpc_pipefs mount point for svc_serv from callers
items: [PATCH v3 06/16] lockd: get rpc_pipefs mount point from callers
items: [PATCH v3 07/16] sunrpc: get rpc_pipefs mount point for rpcb_create[_local] from callers
items: [PATCH v3 08/16] sunrpc: tag pipefs field of cache_detail with rpc_pipefs mount point
items: [PATCH v3 09/16] sunrpc: introduce rpc_pipefs_add_destroy_cb()
items: [PATCH v3 10/16] nfs: per-rpc_pipefs dns cache
items: [PATCH v3 13/16] nfs: introduce mount option 'rpcmount'
items: [PATCH v3 15/16] sunrpc: remove global init_rpc_pipefs
items: [PATCH v3 16/16] Rework get_rpc_pipefs and introduce put_rpc_pipefs()
items: Re: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
items: Re: [PATCH v3 09/16] sunrpc: introduce rpc_pipefs_add_destroy_cb()

[PATCH v3 00/16] make rpc_pipefs be mountable multiple time
type: item
description: Prepare nfs/sunrpc stack to use multiple instances of rpc_pipefs. Only for client for now. It's step forwart to get nfs work from container. Changelog: v3: - rebase to the current Linus' tree (52cfd503ad) - rework get_rpc_pipefs() once again; - solve problem with rmmod sunrpc moudle; - free dns cache on killing rpc_pipefs superblock. v2: - one of rpc_create() calls was missed initially, fixed; - change logic for get_rpc_pipefs(NULL); - export get_rpc_pipefs() to be able to use from modules (tnx J. Bruce Field); - change "From:" and "Signed-off-by:" addresses. v1: - initial revision of the patchset. Kirill A. Shutemov (16): sunrpc: mount rpc_pipefs on initialization sunrpc: introduce init_rpc_pipefs sunrpc: push init_rpc_pipefs up to rpc_create() callers sunrpc: tag svc_serv with rpc_pipefs mount point sunrpc: get rpc_pipefs mount point for svc_serv from callers lockd: get rpc_pipefs mount point from callers sunrpc: get rpc_pipefs mount point for rpcb_create[_local] from callers sunrpc: tag pipefs field of cache_detail with rpc_pipefs mount point sunrpc: introduce rpc_pipefs_add_destroy_cb() nfs: per-rpc_pipefs dns cache Export iterate_mounts symbol to be able to use from sunrpc module. sunrpc: introduce get_rpc_pipefs() nfs: introduce mount option 'rpcmount' sunrpc: make rpc_pipefs be mountable multiple times sunrpc: remove global init_rpc_pipefs Rework get_rpc_pipefs and introduce put_rpc_pipefs() fs/lockd/clntlock.c | 8 +- fs/lockd/host.c | 15 ++- fs/lockd/mon.c | 13 ++- fs/lockd/svc.c | 4 +- fs/namespace.c | 1 + fs/nfs/cache_lib.c | 18 +-- fs/nfs/cache_lib.h | 3 +- fs/nfs/callback.c | 7 +- fs/nfs/callback.h | 3 +- fs/nfs/client.c | 45 ++++++- fs/nfs/dns_resolve.c | 137 ++++++++++++++++----- fs/nfs/dns_resolve.h | 15 +-- fs/nfs/inode.c | 9 +-- fs/nfs/internal.h | 10 ++- fs/nfs/mount_clnt.c | 1 + fs/nfs/namespace.c | 3 +- fs/nfs/nfs4namespace.c | 20 ++-- fs/nfs/super.c | 20 +++ fs/nfsd/nfs4callback.c | 5 + fs/nfsd/nfssvc.c | 20 +++- include/linux/lockd/bind.h | 3 +…
creator: Kirill A. Shutemov
date: 2011-01-14T13:48:58-00:00

[PATCH v3 01/16] sunrpc: mount rpc_pipefs on initialization
type: item
description: Mount rpc_pipefs on register_rpc_pipefs() and replace rpc_get_mount()/rpc_put_mount() implementation with mntget()/mntput(). This commit introduces temprorary regression: there is no way to remove the module. It will be fixed at the end of the patchset. Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- net/sunrpc/rpc_pipe.c | 26 +++++++++++++++----------- 1 files changed, 15 insertions(+), 11 deletions(-) diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index 72bc536..9ab9355 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -29,7 +29,6 @@ #include <linux/sunrpc/cache.h> static struct vfsmount *rpc_mnt __read_mostly; -static int rpc_mount_count; static struct file_system_type rpc_pipe_fs_type; @@ -423,18 +422,13 @@ struct rpc_filelist { struct vfsmount *rpc_get_mount(void) { - int err; - - err = simple_pin_fs(&rpc_pipe_fs_type, &rpc_mnt, &rpc_mount_count); - if (err != 0) - return ERR_PTR(err); - return rpc_mnt; + return mntget(rpc_mnt); } EXPORT_SYMBOL_GPL(rpc_get_mount); void rpc_put_mount(void) { - simple_release_fs(&rpc_mnt, &rpc_mount_count); + mntput(rpc_mnt); } EXPORT_SYMBOL_GPL(rpc_put_mount); @@ -1071,12 +1065,22 @@ int register_rpc_pipefs(void) if (!rpc_inode_cachep) return -ENOMEM; err = register_filesystem(&rpc_pipe_fs_type); - if (err) { - kmem_cache_destroy(rpc_inode_cachep); - return err; + if (err) + goto destroy_cache; + + rpc_mnt = kern_mount(&rpc_pipe_fs_type); + if (IS_ERR(rpc_mnt)) { + err = PTR_ERR(rpc_mnt); + goto unregister_fs; } return 0; + +unregister_fs: + unregister_filesystem(&rpc_pipe_fs_type); +destroy_cache: + kmem_cache_destroy(rpc_inode_cachep); + return err; } void unregister_rpc_pipefs(void) -- 1.7.3.4 _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containe rs
creator: Kirill A. Shutemov
date: 2011-01-14T13:48:59-00:00

[PATCH v3 02/16] sunrpc: introduce init_rpc_pipefs
type: item
description: Introduce global variable init_rpc_pipefs and use it instead of rpc_get_mount()/rpc_put_mount(). Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/nfs/cache_lib.c | 6 +++--- include/linux/sunrpc/rpc_pipe_fs.h | 4 ++-- net/sunrpc/clnt.c | 10 ++++------ net/sunrpc/rpc_pipe.c | 21 +++++---------------- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c index 8469031..dd7ca5f 100644 --- a/fs/nfs/cache_lib.c +++ b/fs/nfs/cache_lib.c @@ -117,7 +117,7 @@ int nfs_cache_register(struct cache_detail *cd) struct vfsmount *mnt; int ret; - mnt = rpc_get_mount(); + mnt = mntget(init_rpc_pipefs); if (IS_ERR(mnt)) return PTR_ERR(mnt); ret = vfs_path_lookup(mnt->mnt_root, mnt, "/cache", 0, &nd); @@ -129,13 +129,13 @@ int nfs_cache_register(struct cache_detail *cd) if (!ret) return ret; err: - rpc_put_mount(); + mntput(mnt); return ret; } void nfs_cache_unregister(struct cache_detail *cd) { sunrpc_cache_unregister_pipefs(cd); - rpc_put_mount(); + mntput(init_rpc_pipefs); } diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index cf14db9..b09bfa5 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h @@ -44,6 +44,8 @@ RPC_I(struct inode *inode) return container_of(inode, struct rpc_inode, vfs_inode); } +extern struct vfsmount *init_rpc_pipefs; + extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); struct rpc_clnt; @@ -60,8 +62,6 @@ extern void rpc_remove_cache_dir(struct dentry *); extern struct dentry *rpc_mkpipe(struct dentry *, const char *, void *, const struct rpc_pipe_ops *, int flags); extern int rpc_unlink(struct dentry *); -extern struct vfsmount *rpc_get_mount(void); -extern void rpc_put_mount(void); extern int register_rpc_pipefs(void); extern void unregister_rpc_pipefs(void); diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 57d344c..f3812d0 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -112,9 +112,7 @@ rpc_setup…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:00-00:00

[PATCH v3 03/16] sunrpc: push init_rpc_pipefs up to rpc_create() callers
type: item
description: Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/lockd/host.c | 2 ++ fs/lockd/mon.c | 2 ++ fs/nfs/client.c | 2 ++ fs/nfs/mount_clnt.c | 2 ++ fs/nfsd/nfs4callback.c | 2 ++ include/linux/sunrpc/clnt.h | 1 + net/sunrpc/clnt.c | 11 +++++++---- net/sunrpc/rpcb_clnt.c | 3 +++ 8 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fs/lockd/host.c b/fs/lockd/host.c index 5f1bcb2..7ed06d2 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c @@ -14,6 +14,7 @@ #include <linux/in6.h> #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/svc.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/lockd/lockd.h> #include <linux/mutex.h> @@ -463,6 +464,7 @@ nlm_bind_host(struct nlm_host *host) .authflavor = RPC_AUTH_UNIX, .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_AUTOBIND), + .rpcmount = init_rpc_pipefs, }; /* diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index 23d7451..6219026 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c @@ -15,6 +15,7 @@ #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/xprtsock.h> #include <linux/sunrpc/svc.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/lockd/lockd.h> #include <asm/unaligned.h> @@ -78,6 +79,7 @@ static struct rpc_clnt *nsm_create(void) .version = NSM_VERSION, .authflavor = RPC_AUTH_NULL, .flags = RPC_CLNT_CREATE_NOPING, + .rpcmount = init_rpc_pipefs, }; return rpc_create(&args); diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 192f2f8..36847f8 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -25,6 +25,7 @@ #include <linux/sunrpc/metrics.h> #include <linux/sunrpc/xprtsock.h> #include <linux/sunrpc/xprtrdma.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/nfs_fs.h> #include <linux/nfs_mount.h> #include <linux/nfs4_mount.h> @@ -628,6 +629,7 @@ static int nfs_create_rpc_client(struct nfs_client *clp, .program = &nfs_program, .version = clp->rpc_ops->version, .authflavor = flavor, + .rpcmount = init_rpc_pipefs, }; if (discrtry) diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index …
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:01-00:00

[PATCH v3 04/16] sunrpc: tag svc_serv with rpc_pipefs mount point
type: item
description: Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- include/linux/sunrpc/svc.h | 1 + net/sunrpc/svc.c | 4 ++++ 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index c81d4d8..534ea8e 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -64,6 +64,7 @@ struct svc_pool { */ struct svc_serv { struct svc_program * sv_program; /* RPC program */ + struct vfsmount * sv_rpcmount; /* rpc_pipefs mount point*/ struct svc_stat * sv_stats; /* RPC statistics */ spinlock_t sv_lock; unsigned int sv_nrthreads; /* # of server threads */ diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 0e659c6..8cc6e79 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -20,6 +20,7 @@ #include <linux/module.h> #include <linux/kthread.h> #include <linux/slab.h> +#include <linux/mount.h> #include <linux/sunrpc/types.h> #include <linux/sunrpc/xdr.h> @@ -27,6 +28,7 @@ #include <linux/sunrpc/svcsock.h> #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/bc_xprt.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #define RPCDBG_FACILITY RPCDBG_SVCDSP @@ -371,6 +373,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools, return NULL; serv->sv_name = prog->pg_name; serv->sv_program = prog; + serv->sv_rpcmount = mntget(init_rpc_pipefs); serv->sv_nrthreads = 1; serv->sv_stats = prog->pg_stats; if (bufsize > RPCSVC_MAXPAYLOAD) @@ -488,6 +491,7 @@ svc_destroy(struct svc_serv *serv) if (svc_serv_is_pooled(serv)) svc_pool_map_put(); + mntput(serv->sv_rpcmount); svc_unregister(serv); kfree(serv->sv_pools); kfree(serv); -- 1.7.3.4 _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containe rs
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:02-00:00

[PATCH v3 05/16] sunrpc: get rpc_pipefs mount point for svc_serv from callers
type: item
description: Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/lockd/svc.c | 4 +++- fs/nfs/callback.c | 4 +++- fs/nfsd/nfssvc.c | 6 ++++-- include/linux/sunrpc/svc.h | 8 ++++---- net/sunrpc/svc.c | 18 +++++++++--------- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index abfff9d..32310b1 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c @@ -31,6 +31,7 @@ #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/svc.h> #include <linux/sunrpc/svcsock.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #include <net/ip.h> #include <linux/lockd/lockd.h> #include <linux/nfs.h> @@ -269,7 +270,8 @@ int lockd_up(void) "lockd_up: no pid, %d users??\n", nlmsvc_users); error = -ENOMEM; - serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, NULL); + serv = svc_create(&nlmsvc_program, init_rpc_pipefs, LOCKD_BUFSIZE, + NULL); if (!serv) { printk(KERN_WARNING "lockd_up: create service failed\n"); goto out; diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 1990165..7a535c8 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c @@ -16,6 +16,7 @@ #include <linux/freezer.h> #include <linux/kthread.h> #include <linux/sunrpc/svcauth_gss.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/sunrpc/bc_xprt.h> #include <net/inet_sock.h> @@ -290,7 +291,8 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt) nfs_callback_bc_serv(minorversion, xprt, cb_info); goto out; } - serv = svc_create(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE, NULL); + serv = svc_create(&nfs4_callback_program, init_rpc_pipefs, + NFS4_CALLBACK_BUFSIZE, NULL); if (!serv) { ret = -ENOMEM; goto out_err; diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 2bae1d8..d96c32b 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c @@ -13,6 +13,7 @@ #include <linux/sunrpc/stats.h> #include <linux/sunrpc/svcsock.h> +#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/lockd/bind.h> #include <linux/nfsacl.h> #include <linux/seq_file.h> @@ -331,8 +332,9 @@ int nfsd_create_serv(voi…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:03-00:00

[PATCH v3 06/16] lockd: get rpc_pipefs mount point from callers
type: item
description: Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/lockd/clntlock.c | 8 +++++--- fs/lockd/host.c | 17 ++++++++++++++--- fs/lockd/mon.c | 15 ++++++++------- fs/lockd/svc.c | 6 ++---- fs/nfs/client.c | 1 + fs/nfsd/nfssvc.c | 2 +- include/linux/lockd/bind.h | 3 ++- include/linux/lockd/lockd.h | 4 +++- 8 files changed, 36 insertions(+), 20 deletions(-) diff --git a/fs/lockd/clntlock.c b/fs/lockd/clntlock.c index 8d4ea83..4664c56 100644 --- a/fs/lockd/clntlock.c +++ b/fs/lockd/clntlock.c @@ -56,13 +56,14 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init) u32 nlm_version = (nlm_init->nfs_version == 2) ? 1 : 4; int status; - status = lockd_up(); + status = lockd_up(nlm_init->rpcmount); if (status < 0) return ERR_PTR(status); host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen, nlm_init->protocol, nlm_version, - nlm_init->hostname, nlm_init->noresvport); + nlm_init->hostname, nlm_init->noresvport, + nlm_init->rpcmount); if (host == NULL) { lockd_down(); return ERR_PTR(-ENOLCK); @@ -223,7 +224,8 @@ reclaimer(void *ptr) allow_signal(SIGKILL); down_write(&host->h_rwsem); - lockd_up(); /* note: this cannot fail as lockd is already running */ + /* note: this cannot fail as lockd is already running */ + lockd_up(host->h_rpcmount); dprintk("lockd: reclaiming locks for host %s\n", host->h_name); diff --git a/fs/lockd/host.c b/fs/lockd/host.c index 7ed06d2..d5ca8f9 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c @@ -14,9 +14,10 @@ #include <linux/in6.h> #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/svc.h> -#include <linux/sunrpc/rpc_pipe_fs.h> #include <linux/lockd/lockd.h> #include <linux/mutex.h> +#include <linux/mount.h> + #include <net/ipv6.h> @@ -55,6 +56,7 @@ struct nlm_lookup_host_info { const char *hostname; /* remote's hostname */ const size_t hostname_len; /* it's length */ const int noresvport; /* use non-priv port */ + struct vfsmount *rpcmount; /* rpc_pipefs mount point */ }; /* @@ -134,6 +136,7 @@ static struct nlm_h…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:04-00:00

[PATCH v3 07/16] sunrpc: get rpc_pipefs mount point for rpcb_create[_local] from callers
type: item
description: Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- include/linux/sunrpc/clnt.h | 4 ++-- net/sunrpc/rpcb_clnt.c | 22 ++++++++++++---------- net/sunrpc/svc.c | 34 +++++++++++++++++++++------------- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index dffaaaa..52f6142 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -135,10 +135,10 @@ void rpc_shutdown_client(struct rpc_clnt *); void rpc_release_client(struct rpc_clnt *); void rpc_task_release_client(struct rpc_task *); -int rpcb_register(u32, u32, int, unsigned short); +int rpcb_register(u32, u32, int, unsigned short, struct vfsmount *); int rpcb_v4_register(const u32 program, const u32 version, const struct sockaddr *address, - const char *netid); + const char *netid, struct vfsmount *rpcmount); void rpcb_getport_async(struct rpc_task *); void rpc_call_start(struct rpc_task *); diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index b059cbe..7fddafa 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c @@ -27,7 +27,6 @@ #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/sched.h> #include <linux/sunrpc/xprtsock.h> -#include <linux/sunrpc/rpc_pipe_fs.h> #ifdef RPC_DEBUG # define RPCDBG_FACILITY RPCDBG_BIND @@ -171,7 +170,7 @@ static DEFINE_MUTEX(rpcb_create_local_mutex); * Returns zero on success, otherwise a negative errno value * is returned. */ -static int rpcb_create_local(void) +static int rpcb_create_local(struct vfsmount *rpcmount) { struct rpc_create_args args = { .net = &init_net, @@ -183,7 +182,7 @@ static int rpcb_create_local(void) .version = RPCBVERS_2, .authflavor = RPC_AUTH_UNIX, .flags = RPC_CLNT_CREATE_NOPING, - .rpcmount = init_rpc_pipefs, + .rpcmount = rpcmount, }; struct rpc_clnt *clnt, *clnt4; int result = 0; @@ -225,7 +224,8 @@ out: } static struct rpc_clnt *rpcb_create(char *hostname, struct sockaddr *srvaddr, - size_t salen, int proto, u32 version) + size_t salen, …
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:05-00:00

[PATCH v3 08/16] sunrpc: tag pipefs field of cache_detail with rpc_pipefs mount point
type: item
description: Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/nfs/cache_lib.c | 3 +-- include/linux/sunrpc/cache.h | 9 +++------ net/sunrpc/cache.c | 16 ++++++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c index dd7ca5f..0944d4e 100644 --- a/fs/nfs/cache_lib.c +++ b/fs/nfs/cache_lib.c @@ -123,7 +123,7 @@ int nfs_cache_register(struct cache_detail *cd) ret = vfs_path_lookup(mnt->mnt_root, mnt, "/cache", 0, &nd); if (ret) goto err; - ret = sunrpc_cache_register_pipefs(nd.path.dentry, + ret = sunrpc_cache_register_pipefs(mnt, nd.path.dentry, cd->name, 0600, cd); path_put(&nd.path); if (!ret) @@ -136,6 +136,5 @@ err: void nfs_cache_unregister(struct cache_detail *cd) { sunrpc_cache_unregister_pipefs(cd); - mntput(init_rpc_pipefs); } diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index 78aa104..339bca3 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h @@ -65,10 +65,6 @@ struct cache_detail_procfs { struct proc_dir_entry *flush_ent, *channel_ent, *content_ent; }; -struct cache_detail_pipefs { - struct dentry *dir; -}; - struct cache_detail { struct module * owner; int hash_size; @@ -115,7 +111,7 @@ struct cache_detail { union { struct cache_detail_procfs procfs; - struct cache_detail_pipefs pipefs; + struct path pipefs; } u; }; @@ -202,7 +198,8 @@ extern int cache_register_net(struct cache_detail *cd, struct net *net); extern void cache_unregister(struct cache_detail *cd); extern void cache_unregister_net(struct cache_detail *cd, struct net *net); -extern int sunrpc_cache_register_pipefs(struct dentry *parent, const char *, +extern int sunrpc_cache_register_pipefs(struct vfsmount *rpcmount, + struct dentry *parent, const char *, mode_t, struct cache_detail *); extern void sunrpc_cache_unregister_pipefs(struct cache_detail *); diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c index e433e75..ed50d49 100644 --- a/net/sunrpc/cache.c +++ b/net/sunrpc/cache.c …
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:06-00:00

[PATCH v3 09/16] sunrpc: introduce rpc_pipefs_add_destroy_cb()
type: item
description: Add facility to do some action on destroying of rpc_pipefs superblock. Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- include/linux/sunrpc/rpc_pipe_fs.h | 3 ++ net/sunrpc/rpc_pipe.c | 51 ++++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index b09bfa5..f5216f1 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h @@ -46,6 +46,9 @@ RPC_I(struct inode *inode) extern struct vfsmount *init_rpc_pipefs; +extern int rpc_pipefs_add_destroy_cb(struct super_block *sb, + void (*destroy_cb)(void *data), void *data); + 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 484c9a3..39511e3 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -939,6 +939,31 @@ static const struct super_operations s_ops = { #define RPCAUTH_GSSMAGIC 0x67596969 +struct destroy_cb { + struct list_head list; + void (*callback)(void *data); + void *data; +}; + +int rpc_pipefs_add_destroy_cb(struct super_block *sb, + void (*destroy_cb)(void *data), void *data) +{ + struct destroy_cb *dcb; + struct list_head *destroy_cb_list = sb->s_fs_info; + + dcb = kmalloc(sizeof(*dcb), GFP_KERNEL); + if (!dcb) + return -ENOMEM; + + dcb->callback = destroy_cb; + dcb->data = data; + INIT_LIST_HEAD(&dcb->list); + list_add(&dcb->list, destroy_cb_list); + + return 0; +} +EXPORT_SYMBOL_GPL(rpc_pipefs_add_destroy_cb); + /* * We have a single directory with 1 node in it. */ @@ -1004,8 +1029,16 @@ rpc_fill_super(struct super_block *sb, void *data, int silent) iput(inode); return -ENOMEM; } - if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL)) + /* List of destroy callbacks */ + sb->s_fs_info = kmalloc(sizeof(struct list_head), GFP_KERNEL); + if (!sb->s_fs_info) + return -ENOMEM; + INIT_LIST_HEAD((struct list_head*) &sb->s_fs_info); + if (rpc_p…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:07-00:00

[PATCH v3 10/16] nfs: per-rpc_pipefs dns cache
type: item
description: Lazy initialization of dns cache: on first call nfs_dns_resolve_name(). Every rpc_pipefs has separate dns cache now. Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/nfs/cache_lib.c | 17 ++----- fs/nfs/cache_lib.h | 3 +- fs/nfs/dns_resolve.c | 137 +++++++++++++++++++++++++++++++++++++----------- fs/nfs/dns_resolve.h | 15 +----- fs/nfs/inode.c | 9 +--- fs/nfs/nfs4namespace.c | 4 +- 6 files changed, 117 insertions(+), 68 deletions(-) diff --git a/fs/nfs/cache_lib.c b/fs/nfs/cache_lib.c index 0944d4e..9b99d9e 100644 --- a/fs/nfs/cache_lib.c +++ b/fs/nfs/cache_lib.c @@ -12,7 +12,6 @@ #include <linux/namei.h> #include <linux/slab.h> #include <linux/sunrpc/cache.h> -#include <linux/sunrpc/rpc_pipe_fs.h> #include "cache_lib.h" @@ -111,25 +110,17 @@ int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq) return 0; } -int nfs_cache_register(struct cache_detail *cd) +int nfs_cache_register(struct cache_detail *cd, struct vfsmount *rpcmount) { struct nameidata nd; - struct vfsmount *mnt; int ret; - mnt = mntget(init_rpc_pipefs); - if (IS_ERR(mnt)) - return PTR_ERR(mnt); - ret = vfs_path_lookup(mnt->mnt_root, mnt, "/cache", 0, &nd); + ret = vfs_path_lookup(rpcmount->mnt_root, rpcmount, "/cache", 0, &nd); if (ret) - goto err; - ret = sunrpc_cache_register_pipefs(mnt, nd.path.dentry, + return ret; + ret = sunrpc_cache_register_pipefs(rpcmount, nd.path.dentry, cd->name, 0600, cd); path_put(&nd.path); - if (!ret) - return ret; -err: - mntput(mnt); return ret; } diff --git a/fs/nfs/cache_lib.h b/fs/nfs/cache_lib.h index 76f856e..1d4a0a5 100644 --- a/fs/nfs/cache_lib.h +++ b/fs/nfs/cache_lib.h @@ -23,5 +23,6 @@ extern struct nfs_cache_defer_req *nfs_cache_defer_req_alloc(void); extern void nfs_cache_defer_req_put(struct nfs_cache_defer_req *dreq); extern int nfs_cache_wait_for_upcall(struct nfs_cache_defer_req *dreq); -extern int nfs_cache_register(struct cache_detail *cd); +extern int nfs_cache_register(struct cache_detail *cd, + struct vfsmount *rpcmount); extern v…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:08-00:00

[PATCH v3 13/16] nfs: introduce mount option 'rpcmount'
type: item
description: It specifies rpc_pipefs to use. /var/lib/nfs/rpc_pipefs, by default. Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/nfs/callback.c | 5 ++- fs/nfs/callback.h | 3 +- fs/nfs/client.c | 46 ++++++++++++++++++++++++++++++++++++-------- fs/nfs/internal.h | 10 +++++++- fs/nfs/mount_clnt.c | 3 +- fs/nfs/namespace.c | 3 +- fs/nfs/nfs4namespace.c | 22 +++++++++++--------- fs/nfs/super.c | 20 +++++++++++++++++++ include/linux/nfs_fs_sb.h | 1 + 9 files changed, 86 insertions(+), 27 deletions(-) diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 7a535c8..c9814fb 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c @@ -276,7 +276,8 @@ int nfs4_set_callback_sessionid(struct nfs_client *clp) /* * Bring up the callback thread if it is not already up. */ -int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt) +int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt, + struct vfsmount *rpcmount) { struct svc_serv *serv = NULL; struct svc_rqst *rqstp; @@ -291,7 +292,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt) nfs_callback_bc_serv(minorversion, xprt, cb_info); goto out; } - serv = svc_create(&nfs4_callback_program, init_rpc_pipefs, + serv = svc_create(&nfs4_callback_program, rpcmount, NFS4_CALLBACK_BUFSIZE, NULL); if (!serv) { ret = -ENOMEM; diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h index d3b44f9..9496e0f 100644 --- a/fs/nfs/callback.h +++ b/fs/nfs/callback.h @@ -175,7 +175,8 @@ extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy, struct cb_process_state *cps); #ifdef CONFIG_NFS_V4 -extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); +extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt, + struct vfsmount *rpcmount); extern void nfs_callback_down(int minorversion); extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation, const nfs4_stateid *stateid); diff --git a/fs/nfs/client.c b/fs/nfs/cl…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:11-00:00

[PATCH v3 15/16] sunrpc: remove global init_rpc_pipefs
type: item
description: Replace remaining init_rpc_pipefs references with get_rpc_pipefs(NULL) and make init_rpc_pipefs static. Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/nfsd/nfs4callback.c | 5 ++++- fs/nfsd/nfssvc.c | 16 ++++++++++++++-- include/linux/sunrpc/rpc_pipe_fs.h | 2 -- net/sunrpc/rpc_pipe.c | 1 - 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 9bec643..61210b6 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -647,7 +647,6 @@ int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *conn) .version = 0, .authflavor = clp->cl_flavor, .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), - .rpcmount = init_rpc_pipefs, }; struct rpc_clnt *client; @@ -663,8 +662,12 @@ int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *conn) args.prognumber = clp->cl_cb_session->se_cb_prog; args.protocol = XPRT_TRANSPORT_BC_TCP; } + args.rpcmount = get_rpc_pipefs(NULL); + if (IS_ERR(args.rpcmount)) + return PTR_ERR(args.rpcmount); /* Create RPC client */ client = rpc_create(&args); + mntput(args.rpcmount); if (IS_ERR(client)) { dprintk("NFSD: couldn't create callback client: %ld\n", PTR_ERR(client)); diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 17d78d3..7353420 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c @@ -206,6 +206,7 @@ static bool nfsd_up = false; static int nfsd_startup(unsigned short port, int nrservs) { int ret; + struct vfsmount *rpcmount; if (nfsd_up) return 0; @@ -220,7 +221,13 @@ static int nfsd_startup(unsigned short port, int nrservs) ret = nfsd_init_socks(port); if (ret) goto out_racache; - ret = lockd_up(init_rpc_pipefs); + rpcmount = get_rpc_pipefs(NULL); + if (IS_ERR(rpcmount)) { + ret = PTR_ERR(rpcmount); + goto out_racache; + } + ret = lockd_up(rpcmount); + mntput(rpcmount); if (ret) goto out_racache; ret = nfs4_state_start(); @@ -308,6 +315,7 @@ static void set_max_drc(void) int nfsd_create_serv(void) { int err = 0; + str…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:13-00:00

[PATCH v3 16/16] Rework get_rpc_pipefs and introduce put_rpc_pipefs()
type: item
description: Now sunrpc module can be removed normally. Signed-off-by: Kirill A. Shutemov <kas@openvz.org> --- fs/nfs/client.c | 4 +- fs/nfs/super.c | 2 +- fs/nfsd/nfs4callback.c | 2 +- fs/nfsd/nfssvc.c | 4 +- include/linux/sunrpc/rpc_pipe_fs.h | 1 + net/sunrpc/rpc_pipe.c | 51 +++++++++++++++++++++++------------ 6 files changed, 40 insertions(+), 24 deletions(-) diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 8dd0e99..0b8ac12 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -838,7 +838,7 @@ static int nfs_init_server(struct nfs_server *server, /* Allocate or find a client reference we can use */ clp = nfs_get_client(&cl_init); - mntput(cl_init.rpcmount); + put_rpc_pipefs(cl_init.rpcmount); if (IS_ERR(clp)) { dprintk("<-- nfs_init_server() = error %ld\n", PTR_ERR(clp)); return PTR_ERR(clp); @@ -1533,7 +1533,7 @@ static int nfs4_init_server(struct nfs_server *server, &timeparms, data->minorversion, rpcmount); - mntput(rpcmount); + put_rpc_pipefs(rpcmount); if (error < 0) goto error; diff --git a/fs/nfs/super.c b/fs/nfs/super.c index be4852b..148843e 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -1668,7 +1668,7 @@ static int nfs_try_mount(struct nfs_parsed_mount_data *args, * to a file handle. */ status = nfs_mount(&request); - mntput(request.rpcmount); + put_rpc_pipefs(request.rpcmount); if (status != 0) { dfprintk(MOUNT, "NFS: unable to mount server %s, error %d\n", request.hostname, status); diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 61210b6..4d8383b 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -667,7 +667,7 @@ int setup_callback_client(struct nfs4_client *clp, struct nfs4_cb_conn *conn) return PTR_ERR(args.rpcmount); /* Create RPC client */ client = rpc_create(&args); - mntput(args.rpcmount); + put_rpc_pipefs(args.rpcmount); if (IS_ERR(client)) { dprintk("NFSD: couldn't create callback client: %ld\n", PTR_ERR(client)); diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 7353420..cff49fc 100644 --- a/fs/nfsd/nfssv…
creator: Kirill A. Shutemov
date: 2011-01-14T13:49:14-00:00

Re: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
type: item
description: On 01/14/2011 07:48 AM, Kirill A. Shutemov wrote: > Prepare nfs/sunrpc stack to use multiple instances of rpc_pipefs. > Only for client for now. Ok, Google is being really unhelpful here. What is rpc_pipefs for? What uses it, and to do what exactly? Is it used by nfs server code, or by the client code, or both? Is it a way for userspace to talk to the kernel, or for the kernel to talk to itself? Is it used at mount time, or during filesystem operation? I'm interested in giving this patch series a much more thorough review, but I can't figure out what the subsystem it's modifying actually _is_. (Maybe this is something to do with filesystems/nfs/rpc-cache.txt?) Rob _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containe rs
creator: Rob Landley
date: 2011-01-17T12:30:16-00:00

Re: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
type: item
description: On Mon, Jan 17, 2011 at 06:30:16AM -0600, Rob Landley wrote: > On 01/14/2011 07:48 AM, Kirill A. Shutemov wrote: > > Prepare nfs/sunrpc stack to use multiple instances of rpc_pipefs. > > Only for client for now. > > Ok, Google is being really unhelpful here. It's better if you read the code. :) > > What is rpc_pipefs for? What uses it, and to do what exactly? Is it > used by nfs server code, or by the client code, or both? Is it a way > for userspace to talk to the kernel, or for the kernel to talk to > itself? Is it used at mount time, or during filesystem operation? Ok, It try to answer. Please correct me, if I'm wrong. rpc_pipefs is a userland/kernel interface (I don't see kernel-kernel usecases, but it's possible, I guess). There is client dir (nfs/clntX) in rpc_pipefs for every sunrpc client. Both client and server (see fs/nfsd/nfs4callback.c) can create sunrpc client. So we rpc_pipefs on both side. rpc_pipefs uses not only on mount time. See old idmapper, for example. > I'm interested in giving this patch series a much more thorough review, > but I can't figure out what the subsystem it's modifying actually _is_. > > (Maybe this is something to do with filesystems/nfs/rpc-cache.txt?) > > Rob -- Kirill A. Shutemov _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containe rs
creator: Kirill A. Shutemov
date: 2011-01-20T11:35:52-00:00

Re: [PATCH v3 09/16] sunrpc: introduce rpc_pipefs_add_destroy_cb()
type: item
description: On Fri, Jan 14, 2011 at 03:49:07PM +0200, Kirill A. Shutemov wrote: > Add facility to do some action on destroying of rpc_pipefs superblock. > > Signed-off-by: Kirill A. Shutemov <kas@openvz.org> > --- > include/linux/sunrpc/rpc_pipe_fs.h | 3 ++ > net/sunrpc/rpc_pipe.c | 51 ++++++++++++++++++++++++++++++++++- > 2 files changed, 52 insertions(+), 2 deletions(-) > > diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h > index b09bfa5..f5216f1 100644 > --- a/include/linux/sunrpc/rpc_pipe_fs.h > +++ b/include/linux/sunrpc/rpc_pipe_fs.h > @@ -46,6 +46,9 @@ RPC_I(struct inode *inode) > > extern struct vfsmount *init_rpc_pipefs; > > +extern int rpc_pipefs_add_destroy_cb(struct super_block *sb, > + void (*destroy_cb)(void *data), void *data); > + > 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 484c9a3..39511e3 100644 > --- a/net/sunrpc/rpc_pipe.c > +++ b/net/sunrpc/rpc_pipe.c > @@ -939,6 +939,31 @@ static const struct super_operations s_ops = { > > #define RPCAUTH_GSSMAGIC 0x67596969 > > +struct destroy_cb { > + struct list_head list; > + void (*callback)(void *data); > + void *data; > +}; > + > +int rpc_pipefs_add_destroy_cb(struct super_block *sb, > + void (*destroy_cb)(void *data), void *data) > +{ > + struct destroy_cb *dcb; > + struct list_head *destroy_cb_list = sb->s_fs_info; > + > + dcb = kmalloc(sizeof(*dcb), GFP_KERNEL); > + if (!dcb) > + return -ENOMEM; > + > + dcb->callback = destroy_cb; > + dcb->data = data; > + INIT_LIST_HEAD(&dcb->list); > + list_add(&dcb->list, destroy_cb_list); > + > + return 0; > +} > +EXPORT_SYMBOL_GPL(rpc_pipefs_add_destroy_cb); > + > /* > * We have a single directory with 1 node in it. > */ > @@ -1004,8 +1029,16 @@ rpc_fill_super(struct super_block *sb, void *data, int silent) > iput(inode); > return -ENOMEM; > } > - if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL)) > + /* Lis…
creator: Kirill A. Shutemov
date: 2011-01-20T11:37:22-00:00

Re: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
type: item
description: On 01/20/2011 05:35 AM, Kirill A. Shutemov wrote: > On Mon, Jan 17, 2011 at 06:30:16AM -0600, Rob Landley wrote: >> On 01/14/2011 07:48 AM, Kirill A. Shutemov wrote: >>> Prepare nfs/sunrpc stack to use multiple instances of rpc_pipefs. >>> Only for client for now. >> >> Ok, Google is being really unhelpful here. > > It's better if you read the code. :) I did. That doesn't necessarily help if I don't know what it's _trying_ to do and this implementation is just one small piece of a much larger mechanism. >> What is rpc_pipefs for? What uses it, and to do what exactly? Is it >> used by nfs server code, or by the client code, or both? Is it a way >> for userspace to talk to the kernel, or for the kernel to talk to >> itself? Is it used at mount time, or during filesystem operation? > > Ok, It try to answer. Please correct me, if I'm wrong. > > rpc_pipefs is a userland/kernel interface (I don't see kernel-kernel > usecases, but it's possible, I guess). Then why is the host context treated specially with an init_rcp_pipefs instance that isn't necessarily mounted anywhere? (How does userspace access it if it isn't mounted anywhere? Why doesn't the host context just use the same does-not-exist code as container context? Presumably there's a reason for this?) I've also mounted NFS shares in test environments I never mounted rpc_pipefs in. (It's possible that the nfs.mount command was doing so for me, and apparently unmounting it again afterwards.) My test environment is exporting with the userspace NFS daemon so it's not using the kernel cacheing infrastructure. > There is client dir (nfs/clntX) in rpc_pipefs for every sunrpc client. > Both client and server (see fs/nfsd/nfs4callback.c) can create sunrpc > client. So we rpc_pipefs on both side. Ok, both client and server can create instances. And use them to do what? I understand that the kernel needs to handle RPC calls to service NFS requests, what I'm not figuring out is how userspace is involved after the initial mount …
creator: Rob Landley
date: 2011-01-20T13:57:52-00:00

Re: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
type: item
description: On Fri, Jan 14, 2011 at 03:48:58PM +0200, Kirill A. Shutemov wrote: > Prepare nfs/sunrpc stack to use multiple instances of rpc_pipefs. > Only for client for now. > > It's step forwart to get nfs work from container. Any feedback? > Changelog: > > v3: > - rebase to the current Linus' tree (52cfd503ad) > - rework get_rpc_pipefs() once again; > - solve problem with rmmod sunrpc moudle; > - free dns cache on killing rpc_pipefs superblock. > > v2: > - one of rpc_create() calls was missed initially, fixed; > - change logic for get_rpc_pipefs(NULL); > - export get_rpc_pipefs() to be able to use from modules (tnx J. Bruce Field); > - change "From:" and "Signed-off-by:" addresses. > > v1: > - initial revision of the patchset. > > Kirill A. Shutemov (16): > sunrpc: mount rpc_pipefs on initialization > sunrpc: introduce init_rpc_pipefs > sunrpc: push init_rpc_pipefs up to rpc_create() callers > sunrpc: tag svc_serv with rpc_pipefs mount point > sunrpc: get rpc_pipefs mount point for svc_serv from callers > lockd: get rpc_pipefs mount point from callers > sunrpc: get rpc_pipefs mount point for rpcb_create[_local] from > callers > sunrpc: tag pipefs field of cache_detail with rpc_pipefs mount point > sunrpc: introduce rpc_pipefs_add_destroy_cb() > nfs: per-rpc_pipefs dns cache > Export iterate_mounts symbol to be able to use from sunrpc module. > sunrpc: introduce get_rpc_pipefs() > nfs: introduce mount option 'rpcmount' > sunrpc: make rpc_pipefs be mountable multiple times > sunrpc: remove global init_rpc_pipefs > Rework get_rpc_pipefs and introduce put_rpc_pipefs() > > fs/lockd/clntlock.c | 8 +- > fs/lockd/host.c | 15 ++- > fs/lockd/mon.c | 13 ++- > fs/lockd/svc.c | 4 +- > fs/namespace.c | 1 + > fs/nfs/cache_lib.c | 18 +-- > fs/nfs/cache_lib.h | 3 +- > fs/nfs/callback.c | 7 +- > fs/nfs/callback.h | 3 +- > fs/nfs/client.c | 45 ++++++- > fs/nfs/dns_resolve.c | 137 ++++++++++++++++----- > fs/nfs/dns_resolve.h | 15 +-- > fs/nfs/inode.c | 9 +-- > fs/nfs/internal.h | 10 ++- > fs/nf…
creator: Kirill A. Shutemov
date: 2011-01-24T23:55:45-00:00

Re: [PATCH v3 00/16] make rpc_pipefs be mountable multiple time
type: item
description: On 01/24/2011 05:55 PM, Kirill A. Shutemov wrote: > On Fri, Jan 14, 2011 at 03:48:58PM +0200, Kirill A. Shutemov wrote: >> Prepare nfs/sunrpc stack to use multiple instances of rpc_pipefs. >> Only for client for now. >> >> It's step forwart to get nfs work from container. > > Any feedback? I didn't see anything to object to, and I'll give a: Reviewed-by: Rob Landley <rlandley@parallels.com> To the one that you rewrote for me (um, 12/16). I still don't understand at the design level why init_rpc_pipefs exists if containers don't need it, but it seems to be implementing what it sets out to do. But it doesn't apply to my test environment (nfsv3 unauthenticated), and I'm still trying to finish up that before switching gears to look at v4. Rob _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containe rs
creator: Rob Landley
date: 2011-01-25T01:53:04-00:00