From: Benny Halevy <bhalevy@panasas.com>
To: pnfs@linux-nfs.org
Cc: trond.myklebust@fys.uio.no, linux-nfs@vger.kernel.org
Subject: Re: [pnfs] [RFC 26/85] nfs41: introduce nfs4_call_sync
Date: Mon, 17 Nov 2008 15:49:19 +0200 [thread overview]
Message-ID: <4921765F.2010209@panasas.com> (raw)
In-Reply-To: <1226348555-8056-1-git-send-email-bhalevy@panasas.com>
On Nov. 10, 2008, 22:22 +0200, Benny Halevy <bhalevy@panasas.com> wrote:
> Use nfs4_call_sync rather than rpc_call_sync to provide
> for a nfs41 sessions-enabled interface for sessions manipulation.
>
> The nfs41 rpc logic uses the rpc_call_validate_args method to
> recover and create the session, as well as selecting a free slot id
> and the rpc_call_done to free the slot and update slot table
> related metadata.
>
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
review 11-14: define two functions one for v4 and one for v41
add a pointer to struct nfs4_client to the correct one.
> ---
> fs/nfs/nfs4proc.c | 127 ++++++++++++++++++++++++++++++++++++++++-------------
> 1 files changed, 96 insertions(+), 31 deletions(-)
>
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index 1cc639e..3b7c7fa 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -349,6 +349,19 @@ nfs4_find_slot(struct nfs4_slot_table *tbl, struct rpc_task *task)
>
> #endif /* CONFIG_NFS_V4_1 */
>
> +static int _nfs4_call_sync(struct nfs_server *server,
> + struct rpc_message *msg,
> + struct nfs41_sequence_args *args,
> + struct nfs41_sequence_res *res,
> + int cache_reply)
> +{
> + return rpc_call_sync(server->client, msg, 0);
> +}
> +
> +#define nfs4_call_sync(server, msg, args, res, cache_reply) \
> + _nfs4_call_sync((server), (msg), &(args)->seq_args, \
> + &(res)->seq_res, (cache_reply))
> +
> static void update_changeattr(struct inode *dir, struct nfs4_change_info *cinfo)
> {
> struct nfs_inode *nfsi = NFS_I(dir);
> @@ -1318,7 +1331,7 @@ static int _nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
> } else
> memcpy(&arg.stateid, &zero_stateid, sizeof(arg.stateid));
>
> - status = rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &arg, &res, 1);
> if (status == 0 && state != NULL)
> renew_lease(server, timestamp);
> return status;
> @@ -1620,15 +1633,19 @@ out_drop:
>
> static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle)
> {
> + struct nfs4_server_caps_arg args = {
> + .fhandle = fhandle,
> + };
> struct nfs4_server_caps_res res = {};
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_SERVER_CAPS),
> - .rpc_argp = fhandle,
> + .rpc_argp = &args,
> .rpc_resp = &res,
> };
> int status;
>
> - status = rpc_call_sync(server->client, &msg, 0);
> + dprintk("--> %s\n", __func__);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> if (status == 0) {
> memcpy(server->attr_bitmask, res.attr_bitmask, sizeof(server->attr_bitmask));
> if (res.attr_bitmask[0] & FATTR4_WORD0_ACL)
> @@ -1639,6 +1656,8 @@ static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *f
> server->caps |= NFS_CAP_SYMLINKS;
> server->acl_bitmask = res.acl_bitmask;
> }
> +
> + dprintk("<-- %s status= %d\n", __func__, status);
> return status;
> }
>
> @@ -1670,8 +1689,13 @@ static int _nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
> .rpc_argp = &args,
> .rpc_resp = &res,
> };
> + int status;
> +
> + dprintk("--> %s\n", __func__);
> nfs_fattr_init(info->fattr);
> - return rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> + dprintk("<-- %s status= %d\n", __func__, status);
> + return status;
> }
>
> static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle,
> @@ -1759,9 +1783,12 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
> .rpc_argp = &args,
> .rpc_resp = &res,
> };
> + int status;
>
> nfs_fattr_init(fattr);
> - return rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> +
> + return status;
> }
>
> static int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fattr *fattr)
> @@ -1843,10 +1870,10 @@ static int _nfs4_proc_lookupfh(struct nfs_server *server, const struct nfs_fh *d
> };
>
> nfs_fattr_init(fattr);
> -
> dprintk("NFS call lookupfh %s\n", name->name);
> - status = rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> dprintk("NFS reply lookupfh: %d\n", status);
> +
> return status;
> }
>
> @@ -1931,7 +1958,7 @@ static int _nfs4_proc_access(struct inode *inode, struct nfs_access_entry *entry
> args.access |= NFS4_ACCESS_EXECUTE;
> }
> nfs_fattr_init(&fattr);
> - status = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> if (!status) {
> entry->mask = 0;
> if (res.access & NFS4_ACCESS_READ)
> @@ -1991,13 +2018,17 @@ static int _nfs4_proc_readlink(struct inode *inode, struct page *page,
> .pglen = pglen,
> .pages = &page,
> };
> + struct nfs4_readlink_res res;
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_READLINK),
> .rpc_argp = &args,
> - .rpc_resp = NULL,
> + .rpc_resp = &res,
> };
> + int status;
> +
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
>
> - return rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
> + return status;
> }
>
> static int nfs4_proc_readlink(struct inode *inode, struct page *page,
> @@ -2090,11 +2121,12 @@ static int _nfs4_proc_remove(struct inode *dir, struct qstr *name)
> int status;
>
> nfs_fattr_init(&res.dir_attr);
> - status = rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 1);
> if (status == 0) {
> update_changeattr(dir, &res.cinfo);
> nfs_post_op_update_inode(dir, &res.dir_attr);
> }
> +
> return status;
> }
>
> @@ -2158,14 +2190,14 @@ static int _nfs4_proc_rename(struct inode *old_dir, struct qstr *old_name,
>
> nfs_fattr_init(res.old_fattr);
> nfs_fattr_init(res.new_fattr);
> - status = rpc_call_sync(server->client, &msg, 0);
> -
> + status = nfs4_call_sync(server, &msg, &arg, &res, 1);
> if (!status) {
> update_changeattr(old_dir, &res.old_cinfo);
> nfs_post_op_update_inode(old_dir, res.old_fattr);
> update_changeattr(new_dir, &res.new_cinfo);
> nfs_post_op_update_inode(new_dir, res.new_fattr);
> }
> +
> return status;
> }
>
> @@ -2207,7 +2239,7 @@ static int _nfs4_proc_link(struct inode *inode, struct inode *dir, struct qstr *
>
> nfs_fattr_init(res.fattr);
> nfs_fattr_init(res.dir_attr);
> - status = rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &arg, &res, 1);
> if (!status) {
> update_changeattr(dir, &res.cinfo);
> nfs_post_op_update_inode(dir, res.dir_attr);
> @@ -2269,7 +2301,9 @@ static struct nfs4_createdata *nfs4_alloc_createdata(struct inode *dir,
>
> static int nfs4_do_create(struct inode *dir, struct dentry *dentry, struct nfs4_createdata *data)
> {
> - int status = rpc_call_sync(NFS_CLIENT(dir), &data->msg, 0);
> + struct nfs_server *server = NFS_SERVER(dir);
> + int status = nfs4_call_sync(server, &data->msg,
> + &data->arg, &data->res, 1);
> if (status == 0) {
> update_changeattr(dir, &data->res.dir_cinfo);
> nfs_post_op_update_inode(dir, data->res.dir_fattr);
> @@ -2378,12 +2412,14 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
> dentry->d_parent->d_name.name,
> dentry->d_name.name,
> (unsigned long long)cookie);
> +
> nfs4_setup_readdir(cookie, NFS_COOKIEVERF(dir), dentry, &args);
> res.pgbase = args.pgbase;
> - status = rpc_call_sync(NFS_CLIENT(dir), &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> if (status == 0)
> memcpy(NFS_COOKIEVERF(dir), res.verifier.data, NFS4_VERIFIER_SIZE);
>
> +
> nfs_invalidate_atime(dir);
>
> dprintk("%s: returns %d\n", __func__, status);
> @@ -2458,14 +2494,20 @@ static int _nfs4_proc_statfs(struct nfs_server *server, struct nfs_fh *fhandle,
> .fh = fhandle,
> .bitmask = server->attr_bitmask,
> };
> + struct nfs4_statfs_res res = {
> + .fsstat = fsstat,
> + };
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_STATFS),
> .rpc_argp = &args,
> - .rpc_resp = fsstat,
> + .rpc_resp = &res,
> };
> + int status;
>
> nfs_fattr_init(fsstat->fattr);
> - return rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> +
> + return status;
> }
>
> static int nfs4_proc_statfs(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fsstat *fsstat)
> @@ -2487,13 +2529,21 @@ static int _nfs4_do_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle,
> .fh = fhandle,
> .bitmask = server->attr_bitmask,
> };
> + struct nfs4_fsinfo_res res = {
> + .fsinfo = fsinfo,
> + };
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_FSINFO),
> .rpc_argp = &args,
> - .rpc_resp = fsinfo,
> + .rpc_resp = &res,
> };
> + int status;
> +
> + dprintk("--> %s\n", __func__);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
>
> - return rpc_call_sync(server->client, &msg, 0);
> + dprintk("<-- %s status= %d\n", __func__, status);
> + return status;
> }
>
> static int nfs4_do_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fsinfo *fsinfo)
> @@ -2522,20 +2572,28 @@ static int _nfs4_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle
> .fh = fhandle,
> .bitmask = server->attr_bitmask,
> };
> + struct nfs4_pathconf_res res = {
> + .pathconf = pathconf,
> + };
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_PATHCONF),
> .rpc_argp = &args,
> - .rpc_resp = pathconf,
> + .rpc_resp = &res,
> };
> + int status = 0;
>
> + dprintk("--> %s\n", __func__);
> /* None of the pathconf attributes are mandatory to implement */
> if ((args.bitmask[0] & nfs4_pathconf_bitmap[0]) == 0) {
> memset(pathconf, 0, sizeof(*pathconf));
> - return 0;
> + goto out;
> }
>
> nfs_fattr_init(pathconf->fattr);
> - return rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> +out:
> + dprintk("<-- %s status= %d\n", __func__, status);
> + return status;
> }
>
> static int nfs4_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,
> @@ -2778,18 +2836,21 @@ out:
> static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t buflen)
> {
> struct page *pages[NFS4ACL_MAXPAGES];
> + size_t resp_len = buflen;
> struct nfs_getaclargs args = {
> .fh = NFS_FH(inode),
> .acl_pages = pages,
> .acl_len = buflen,
> };
> - size_t resp_len = buflen;
> + struct nfs_getaclres res = {
> + .acl_len = &resp_len,
> + };
> void *resp_buf;
> struct nfs_server *server = NFS_SERVER(inode);
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_GETACL),
> .rpc_argp = &args,
> - .rpc_resp = &resp_len,
> + .rpc_resp = &res,
> };
> struct page *localpage = NULL;
> int ret;
> @@ -2808,7 +2869,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu
> resp_buf = buf;
> buf_to_pages(buf, buflen, args.acl_pages, &args.acl_pgbase);
> }
> - ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
> + ret = nfs4_call_sync(server, &msg, &args, &res, 0);
> if (ret)
> goto out_free;
> if (resp_len > args.acl_len)
> @@ -2869,10 +2930,11 @@ static int __nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t bufl
> .acl_pages = pages,
> .acl_len = buflen,
> };
> + struct nfs_setaclres res;
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_SETACL),
> .rpc_argp = &arg,
> - .rpc_resp = NULL,
> + .rpc_resp = &res,
> };
> int ret;
>
> @@ -2880,7 +2942,7 @@ static int __nfs4_proc_set_acl(struct inode *inode, const void *buf, size_t bufl
> return -EOPNOTSUPP;
> nfs_inode_return_delegation(inode);
> buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase);
> - ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
> + ret = nfs4_call_sync(server, &msg, &arg, &res, 1);
> nfs_access_zap_cache(inode);
> nfs_zap_acl_cache(inode);
> return ret;
> @@ -3240,7 +3302,7 @@ static int _nfs4_proc_getlk(struct nfs4_state *state, int cmd, struct file_lock
> goto out;
> lsp = request->fl_u.nfs4_fl.owner;
> arg.lock_owner.id = lsp->ls_id.id;
> - status = rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &arg, &res, 1);
> switch (status) {
> case 0:
> request->fl_type = F_UNLCK;
> @@ -3808,10 +3870,13 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
> .page = page,
> .bitmask = bitmask,
> };
> + struct nfs4_fs_locations_res res = {
> + .fs_locations = fs_locations,
> + };
> struct rpc_message msg = {
> .rpc_proc = nfs4_proc(server->nfs_client, NFSPROC4_CLNT_FS_LOCATIONS),
> .rpc_argp = &args,
> - .rpc_resp = fs_locations,
> + .rpc_resp = &res,
> };
> int status;
>
> @@ -3819,7 +3884,7 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
> nfs_fattr_init(&fs_locations->fattr);
> fs_locations->server = server;
> fs_locations->nlocations = 0;
> - status = rpc_call_sync(server->client, &msg, 0);
> + status = nfs4_call_sync(server, &msg, &args, &res, 0);
> dprintk("%s: returned status = %d\n", __func__, status);
> return status;
> }
next prev parent reply other threads:[~2008-11-17 13:49 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-10 19:57 [RFC 0/85] nfs41 client patches for review Benny Halevy
2008-11-10 20:05 ` [RFC 03/85] nfs: remove incorrect usage of nfs4 compound response hdr.status Benny Halevy
2008-11-17 13:24 ` [pnfs] " Benny Halevy
2008-11-10 20:18 ` [RFC 04/85] FIXME: NFS: Increment operation number in each encode_* routine Benny Halevy
2008-11-17 13:26 ` [pnfs] " Benny Halevy
2008-11-10 20:18 ` [RFC 05/85] nfs41: Add Kconfig symbols for NFSv4.1 Benny Halevy
2008-11-17 13:27 ` [pnfs] " Benny Halevy
2008-11-10 20:18 ` [RFC 06/85] nfs41: common protocol definitions Benny Halevy
2008-11-17 13:28 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 07/85] nfs41: define NFS4_MAX_MINOR_VERSION based on CONFIG_NFS_V4_1 Benny Halevy
2008-11-10 20:19 ` [RFC 08/85] nfs41: client xdr definitions Benny Halevy
2008-11-17 13:31 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 09/85] nfs41: add mount command option minorvers Benny Halevy
2008-11-17 13:34 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 10/85] nfs41: struct nfs_server minorversion Benny Halevy
2008-11-17 13:34 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 11/85] nfs41: nfs_client.cl_minorversion Benny Halevy
2008-11-17 13:37 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 12/85] nfs41: set nfs_client rpc_ops based on minorversion Benny Halevy
2008-11-10 20:20 ` [RFC 13/85] nfs41: use ptr to rpc procedures via struct nfs_client Benny Halevy
2008-11-17 13:40 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 14/85] nfs41: sunrpc: support minorversion for rpc_clnt version table Benny Halevy
2008-11-17 13:41 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 15/85] nfs41: Proper initialization of nfs_client_initdata.rpc_ops Benny Halevy
2008-11-17 13:41 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 16/85] nfs41: pass recovery status from reclaimer kthread up to nfs4_wait_clnt_recover Benny Halevy
2008-11-17 13:42 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 17/85] nfs41: fallback to lower minorversion if nfs4_create_server fails Benny Halevy
2008-11-17 13:43 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 18/85] nfs41: sessions client infrastructure Benny Halevy
2008-11-17 13:44 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 19/85] nfs41: share client sessions across mounts Benny Halevy
2008-11-17 13:45 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 20/85] nfs41: slot table init and destroy Benny Halevy
2008-11-17 13:46 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 21/85] nfs41: find slot Benny Halevy
2008-11-17 13:46 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 22/85] nfs41: free slot Benny Halevy
2008-11-17 13:47 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 23/85] nfs41: minorversion support for xdr Benny Halevy
2008-11-17 13:48 ` [pnfs] " Benny Halevy
2008-11-10 20:22 ` [RFC 24/85] nfs41: stubs for nfs41 procedures Benny Halevy
2008-11-10 20:22 ` [RFC 25/85] nfs41: make nfs4_wait_bit_killable public Benny Halevy
2008-11-10 20:22 ` [RFC 26/85] nfs41: introduce nfs4_call_sync Benny Halevy
2008-11-17 13:49 ` Benny Halevy [this message]
2008-11-10 20:22 ` [RFC 27/85] nfs41: nfs4_setup_sequence Benny Halevy
2008-11-17 13:49 ` [pnfs] " Benny Halevy
2008-11-10 20:22 ` [RFC 28/85] nfs41: setup_sequence method Benny Halevy
2008-11-10 20:23 ` [RFC 02/85] nfs: return compound hdr.status when there are no op replies Benny Halevy
2008-11-10 20:23 ` [RFC 29/85] nfs41: nfs41_sequence_done Benny Halevy
2008-11-17 13:50 ` [pnfs] " Benny Halevy
2008-11-10 20:23 ` [RFC 30/85] nfs41: nfs41_call_sync_done Benny Halevy
2008-11-10 20:23 ` [RFC 31/85] nfs41: separate free slot from sequence done Benny Halevy
2008-11-10 20:23 ` [RFC 32/85] nfs41: sequence setup/done support Benny Halevy
2008-11-10 20:23 ` [RFC 33/85] nfs41: Support sessions with O_DIRECT Benny Halevy
2008-11-10 20:24 ` [RFC 34/85] nfs41: exchange_id operation Benny Halevy
2008-11-10 20:24 ` [RFC 35/85] nfs41: get_lease_time Benny Halevy
2008-11-10 20:24 ` [RFC 36/85] nfs41: create_session operation Benny Halevy
2008-11-10 20:24 ` [RFC 37/85] nfs41: destroy_session operation Benny Halevy
2008-11-10 20:24 ` [RFC 38/85] nfs41: sequence operation Benny Halevy
2008-11-10 20:25 ` [RFC 39/85] nfs41: session recovery infrastructure Benny Halevy
2008-11-10 20:25 ` [RFC 40/85] nfs41: schedule async session reset Benny Halevy
2008-11-10 20:25 ` [RFC 41/85] nfs41: lease renewal Benny Halevy
2008-11-10 20:25 ` [RFC 42/85] nfs41: sunrpc: Export the call prepare state for session reset Benny Halevy
2008-11-10 20:25 ` [RFC 43/85] nfs41: use rpc prepare call " Benny Halevy
2008-11-11 8:01 ` [pnfs] [RFC 43/85] nfs41: use rpc prepare call state for sessionreset Halevy, Benny
2008-11-10 20:25 ` [RFC 44/85] nfs41: kick start nfs41 session recovery when handling errors Benny Halevy
2008-11-10 20:26 ` [RFC 45/85] nfs41: start session recovery from nfs4_setup_sequence Benny Halevy
2008-11-10 20:26 ` [RFC 46/85] nfs41: introduce get_state_renewal_cred Benny Halevy
2008-11-10 20:26 ` [RFC 47/85] nfs41: get cred in exchange_id when cred arg is NULL Benny Halevy
2008-11-10 20:26 ` [RFC 48/85] nfs41: establish sessions-based clientid Benny Halevy
2008-11-10 20:26 ` [RFC 49/85] nfs41: recover lease in _nfs4_lookup_root Benny Halevy
2008-11-17 13:51 ` [pnfs] " Benny Halevy
2008-11-10 20:27 ` [RFC 50/85] nfs41: schedule state recovery on BAD or DEAD session Benny Halevy
2008-11-10 20:27 ` [RFC 51/85] nfs41: state reclaimer renew lease error handling Benny Halevy
2008-11-10 20:27 ` [RFC 52/85] nfs41: increment_{open,lock}_seqid Benny Halevy
2008-11-10 20:27 ` [RFC 53/85] nfs41: Add ability to read RPC call direction on TCP stream Benny Halevy
2008-11-17 13:52 ` [pnfs] " Benny Halevy
2008-11-10 20:27 ` [RFC 54/85] nfs41: Skip past the RPC call direction Benny Halevy
2008-11-10 20:27 ` [RFC 55/85] nfs41: Refactor NFSv4 callback service Benny Halevy
2008-11-10 20:28 ` [RFC 56/85] nfs41: client callback structures Benny Halevy
2008-11-10 20:28 ` [RFC 57/85] nfs41: Initialize new rpc_xprt callback related fields Benny Halevy
2008-11-10 20:28 ` [RFC 58/85] nfs41: New backchannel helper routines Benny Halevy
2008-11-10 20:28 ` [RFC 59/85] nfs41: New include/linux/sunrpc/bc_xprt.h Benny Halevy
2008-11-10 20:28 ` [RFC 60/85] nfs41: New xs_tcp_read_data() Benny Halevy
2008-11-10 20:29 ` [RFC 61/85] nfs41: Add backchannel processing support to RPC state machine Benny Halevy
2008-11-17 13:53 ` [pnfs] " Benny Halevy
2008-11-10 20:29 ` [RFC 62/85] nfs41: Backchannel callback service helper routines Benny Halevy
2008-11-10 20:29 ` [RFC 63/85] FIXME: nfs41: sunrpc: handle clnt==NULL in call_status Benny Halevy
2008-11-10 20:29 ` [RFC 64/85] nfs41: Refactor svc_process() Benny Halevy
2008-11-17 13:54 ` [pnfs] " Benny Halevy
2008-11-10 20:29 ` [RFC 65/85] nfs41: Backchannel bc_svc_process() Benny Halevy
2008-11-17 13:55 ` [pnfs] " Benny Halevy
2008-11-10 20:30 ` [RFC 66/85] nfs41: Implement NFSv4.1 callback service process Benny Halevy
2008-11-10 20:30 ` [RFC 67/85] nfs41: sunrpc: provide functions to create and destroy a svc_xprt for backchannel use Benny Halevy
2008-11-10 20:30 ` [RFC 68/85] nfs41: sunrpc: add a struct svc_xprt pointer to struct svc_serv " Benny Halevy
2008-11-10 20:30 ` [RFC 69/85] nfs41: create a svc_xprt for nfs41 callback thread and use for incoming callbacks Benny Halevy
2008-11-10 20:30 ` [RFC 70/85] nfs41: save svc_serv in nfs_callback_info Benny Halevy
2008-11-10 20:30 ` [RFC 71/85] nfs41: Add a reference to svc_serv during callback service bring up Benny Halevy
2008-11-10 20:31 ` [RFC 72/85] nfs41: Allow NFSv4 and NFSv4.1 callback services to coexist Benny Halevy
2008-11-10 20:31 ` [RFC 73/85] nfs41: Setup the backchannel Benny Halevy
2008-11-10 20:31 ` [RFC 74/85] nfs41: Client indicates presence of NFSv4.1 callback channel Benny Halevy
2008-11-10 20:31 ` [RFC 75/85] nfs41: Get the rpc_xprt * from the rpc_rqst instead of the rpc_clnt Benny Halevy
2008-11-10 20:31 ` [RFC 76/85] nfs41: Release backchannel resources associated with session Benny Halevy
2008-11-10 20:31 ` [RFC 77/85] nfs41: store minorversion in cb_compound_hdr_arg Benny Halevy
2008-11-10 20:32 ` [RFC 78/85] nfs41: decode minorversion 1 cb_compound header Benny Halevy
2008-11-10 20:32 ` [RFC 79/85] nfs41: callback numbers definitions Benny Halevy
2008-11-10 20:32 ` [RFC 80/85] nfs41: consider minorversion in callback_xdr:process_op Benny Halevy
2008-11-10 20:32 ` [RFC 81/85] nfs41: define CB_NOTIFY_DEVICEID as not supported Benny Halevy
2008-11-10 20:32 ` [RFC 82/85] nfs41: cb_sequence protocol level data structures Benny Halevy
2008-11-10 20:33 ` [RFC 83/85] nfs41: cb_sequence proc implementation Benny Halevy
2008-11-10 20:33 ` [RFC 84/85] nfs41: cb_sequence xdr implementation Benny Halevy
2008-11-10 20:33 ` [RFC 85/85] nfs41: verify CB_SEQUENCE position in callback compound Benny Halevy
2008-11-10 20:37 ` [pnfs] [RFC 0/85] nfs41 client patches for review Benny Halevy
2008-11-10 20:42 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4921765F.2010209@panasas.com \
--to=bhalevy@panasas.com \
--cc=linux-nfs@vger.kernel.org \
--cc=pnfs@linux-nfs.org \
--cc=trond.myklebust@fys.uio.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.