From: "J. Bruce Fields" <bfields@fieldses.org>
To: Benny Halevy <bhalevy@panasas.com>
Cc: linux-nfs@vger.kernel.org, pnfs@linux-nfs.org
Subject: Re: [PATCH v2 15/47] nfsd41: exchange_id operation
Date: Mon, 30 Mar 2009 22:47:14 -0400 [thread overview]
Message-ID: <20090331024714.GA7653@fieldses.org> (raw)
In-Reply-To: <1238229132-10730-1-git-send-email-bhalevy@panasas.com>
On Sat, Mar 28, 2009 at 11:32:12AM +0300, Benny Halevy wrote:
> From: Andy Adamson <andros@netapp.com>
>
> Implement the exchange_id operation confoming to
> http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-28
>
> Based on the client provided name, hash a client id.
> If a confirmed one is found, compare the op's creds and
> verifier. If the creds match and the verifier is different
> then expire the old client (client re-incarnated), otherwise,
> if both match, assume it's a replay and ignore it.
>
> If an unconfirmed client is found, then copy the new creds
> and verifer if need update, otherwise assume replay.
>
> The client is moved to a confirmed state on create_session.
>
> In the nfs41 branch set the exchange_id flags to
> EXCHGID4_FLAG_USE_NON_PNFS | EXCHGID4_FLAG_SUPP_MOVED_REFER
> (pNFS is not supported, Referrals are supported,
> Migration is not.).
>
> Address various scenarios from section 18.35 of the spec:
>
> 1. Check for EXCHGID4_FLAG_UPD_CONFIRMED_REC_A and set
> EXCHGID4_FLAG_CONFIRMED_R as appropriate.
>
> 2. Return error codes per 18.35.4 scenarios.
>
> 3. Update client records or generate new client ids depending on
> scenario.
>
> Note: 18.35.4 case 3 probably still needs revisiting. The handling
> seems not quite right.
>
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
> Signed-off-by: Andy Adamosn <andros@netapp.com>
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
> [nfsd41: use utsname for major_id (and copy to server_scope)]
> [nfsd41: fix handling of various exchange id scenarios]
> Signed-off-by: Mike Sager <sager@netapp.com>
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
> ---
> fs/nfsd/nfs4state.c | 138 +++++++++++++++++++++++++++++++++++++++++-
> fs/nfsd/nfs4xdr.c | 146 +++++++++++++++++++++++++++++++++++++++++++-
> include/linux/nfsd/state.h | 2 +
> include/linux/nfsd/xdr4.h | 8 ++-
> 4 files changed, 289 insertions(+), 5 deletions(-)
>
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index bbb7455..09c63ff 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -841,12 +841,148 @@ out_err:
> }
>
> #if defined(CONFIG_NFSD_V4_1)
> +/*
> + * Set the exchange_id flags returned by the server.
> + */
> +static void
> +nfsd4_set_ex_flags(struct nfs4_client *new, struct nfsd4_exchange_id *clid)
> +{
> + /* pNFS is not supported */
> + new->cl_exchange_flags |= EXCHGID4_FLAG_USE_NON_PNFS;
> +
> + /* Referrals are supported, Migration is not. */
> + new->cl_exchange_flags |= EXCHGID4_FLAG_SUPP_MOVED_REFER;
> +
> + /* set the wire flags to return to client. */
> + clid->flags = new->cl_exchange_flags;
> +}
> +
> __be32
> nfsd4_exchange_id(struct svc_rqst *rqstp,
> struct nfsd4_compound_state *cstate,
> struct nfsd4_exchange_id *exid)
> {
> - return -1; /* stub */
> + struct nfs4_client *unconf, *conf, *new;
> + int status;
> + unsigned int strhashval;
> + char dname[HEXDIR_LEN];
> + nfs4_verifier verf = exid->verifier;
> + u32 ip_addr = svc_addr_in(rqstp)->sin_addr.s_addr;
> + struct xdr_netobj clname = {
> + .len = exid->id_len,
> + .data = exid->id,
> + };
> +
> + dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p "
> + " ip_addr=%u flags %x, spa_how %d\n",
> + __func__, rqstp, exid, clname.len, clname.data,
> + ip_addr, exid->flags, exid->spa_how);
> +
> + if (!check_name(clname) || (exid->flags & EXCHGID4_INVAL_FLAG_MASK_A))
> + return nfserr_inval;
> +
> + /* Currently only support SP4_NONE */
> + if (exid->spa_how != SP4_NONE)
> + return nfserr_encr_alg_unsupp;
> +
> + status = nfs4_make_rec_clidname(dname, &clname);
> +
> + if (status)
> + goto error;
> +
> + strhashval = clientstr_hashval(dname);
> +
> + nfs4_lock_state();
> + status = nfs_ok;
> +
> + conf = find_confirmed_client_by_str(dname, strhashval);
> + if (conf) {
> + if (!same_verf(&verf, &conf->cl_verifier)) {
> + /* 18.35.4 case 8 */
> + if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) {
> + status = nfserr_not_same;
> + goto out;
> + }
> + /* Client reboot: destroy old state */
> + expire_client(conf);
Surely you must need to check the creds before destroying the old state?
> + goto out_new;
> + }
> + if (!same_creds(&conf->cl_cred, &rqstp->rq_cred)) {
> + /* 18.35.4 case 9 */
> + if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) {
> + status = nfserr_perm;
> + goto out;
> + }
> + expire_client(conf);
This expire_client() doesn't look right to me either.
> + goto out_new;
> + }
> + if (ip_addr != conf->cl_addr &&
> + !(exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A)) {
> + /* Client collision. 18.35.4 case 3 */
> + status = nfserr_clid_inuse;
> + goto out;
> + }
> + /*
> + * Set bit when the owner id and verifier map to an already
> + * confirmed client id (18.35.3).
> + */
> + exid->flags |= EXCHGID4_FLAG_CONFIRMED_R;
> +
> + /*
> + * Falling into 18.35.4 case 2, possible router replay.
Checking the spec: case 2 says: "If the server has the following
confirmed record, and the request does not have
EXCHGID4_FLAG_UPD_CONFIRMED_REC_A set,..."
But that flag *is* set when we get to this code.
Isn't this case 6?
Could someone check these cases again very carefully?
> + * Leave confirmed record intact and return same result.
> + */
> + copy_verf(conf, &verf);
> + new = conf;
> + goto out_copy;
> + } else {
Note the "else" is redundant since all previous cases exit.
--b.
> + /* 18.35.4 case 7 */
> + if (exid->flags & EXCHGID4_FLAG_UPD_CONFIRMED_REC_A) {
> + status = nfserr_noent;
> + goto out;
> + }
> + }
> +
> + unconf = find_unconfirmed_client_by_str(dname, strhashval);
> + if (unconf) {
> + /*
> + * Possible retry or client restart. Per 18.35.4 case 4,
> + * a new unconfirmed record should be generated regardless
> + * of whether any properties have changed.
> + */
> + expire_client(unconf);
> + }
> +
> +out_new:
> + /* Normal case */
> + new = create_client(clname, dname);
> + if (new == NULL) {
> + status = nfserr_resource;
> + goto out;
> + }
> +
> + copy_verf(new, &verf);
> + copy_cred(&new->cl_cred, &rqstp->rq_cred);
> + new->cl_addr = ip_addr;
> + gen_clid(new);
> + gen_confirm(new);
> + add_to_unconfirmed(new, strhashval);
> +out_copy:
> + exid->clientid.cl_boot = new->cl_clientid.cl_boot;
> + exid->clientid.cl_id = new->cl_clientid.cl_id;
> +
> + new->cl_seqid = exid->seqid = 1;
> + nfsd4_set_ex_flags(new, exid);
> +
> + dprintk("nfsd4_exchange_id seqid %d flags %x\n",
> + new->cl_seqid, new->cl_exchange_flags);
> + status = nfs_ok;
> +
> +out:
> + nfs4_unlock_state();
> +error:
> + dprintk("nfsd4_exchange_id returns %d\n", ntohl(status));
> + return status;
> }
>
> __be32
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index b082d07..840cf6a 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -45,6 +45,7 @@
> #include <linux/fs.h>
> #include <linux/namei.h>
> #include <linux/vfs.h>
> +#include <linux/utsname.h>
> #include <linux/sunrpc/xdr.h>
> #include <linux/sunrpc/svc.h>
> #include <linux/sunrpc/clnt.h>
> @@ -999,9 +1000,100 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel
> #if defined(CONFIG_NFSD_V4_1)
> static __be32
> nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp,
> - struct nfsd4_exchange_id *clid)
> + struct nfsd4_exchange_id *exid)
> {
> - return nfserr_opnotsupp; /* stub */
> + int dummy;
> + DECODE_HEAD;
> +
> + READ_BUF(NFS4_VERIFIER_SIZE);
> + COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE);
> +
> + READ_BUF(4);
> + READ32(exid->id_len);
> +
> + READ_BUF(exid->id_len);
> + SAVEMEM(exid->id, exid->id_len);
> +
> + READ_BUF(4);
> + READ32(exid->flags);
> +
> + /* Ignore state_protect4_a */
> + READ_BUF(4);
> + READ32(exid->spa_how);
> + switch (exid->spa_how) {
> + case SP4_NONE:
> + break;
> + case SP4_MACH_CRED:
> + /* spo_must_enforce */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy * 4);
> + p += dummy;
> +
> + /* spo_must_allow */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy * 4);
> + p += dummy;
> + break;
> + case SP4_SSV:
> + /* ssp_ops */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy * 4);
> + p += dummy;
> +
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy * 4);
> + p += dummy;
> +
> + /* ssp_hash_algs<> */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy);
> + p += XDR_QUADLEN(dummy);
> +
> + /* ssp_encr_algs<> */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy);
> + p += XDR_QUADLEN(dummy);
> +
> + /* ssp_window and ssp_num_gss_handles */
> + READ_BUF(8);
> + READ32(dummy);
> + READ32(dummy);
> + break;
> + default:
> + goto xdr_error;
> + }
> +
> + /* Ignore Implementation ID */
> + READ_BUF(4); /* nfs_impl_id4 array length */
> + READ32(dummy);
> +
> + if (dummy > 1)
> + goto xdr_error;
> +
> + if (dummy == 1) {
> + /* nii_domain */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy);
> + p += XDR_QUADLEN(dummy);
> +
> + /* nii_name */
> + READ_BUF(4);
> + READ32(dummy);
> + READ_BUF(dummy);
> + p += XDR_QUADLEN(dummy);
> +
> + /* nii_date */
> + READ_BUF(12);
> + p += 3;
> + }
> + DECODE_TAIL;
> }
>
> static __be32
> @@ -2672,7 +2764,55 @@ static __be32
> nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr,
> struct nfsd4_exchange_id *exid)
> {
> - /* stub */
> + ENCODE_HEAD;
> + char *major_id;
> + char *server_scope;
> + int major_id_sz;
> + int server_scope_sz;
> + uint64_t minor_id = 0;
> +
> + if (nfserr)
> + goto out;
> +
> + major_id = utsname()->nodename;
> + major_id_sz = strlen(major_id);
> + server_scope = utsname()->nodename;
> + server_scope_sz = strlen(server_scope);
> +
> + RESERVE_SPACE(
> + 8 /* eir_clientid */ +
> + 4 /* eir_sequenceid */ +
> + 4 /* eir_flags */ +
> + 4 /* spr_how (SP4_NONE) */ +
> + 8 /* so_minor_id */ +
> + 4 /* so_major_id.len */ +
> + (XDR_QUADLEN(major_id_sz) * 4) +
> + 4 /* eir_server_scope.len */ +
> + (XDR_QUADLEN(server_scope_sz) * 4) +
> + 4 /* eir_server_impl_id.count (0) */);
> +
> + WRITEMEM(&exid->clientid, 8);
> + WRITE32(exid->seqid);
> + WRITE32(exid->flags);
> +
> + /* state_protect4_r. Currently only support SP4_NONE */
> + BUG_ON(exid->spa_how != SP4_NONE);
> + WRITE32(exid->spa_how);
> +
> + /* The server_owner struct */
> + WRITE64(minor_id); /* Minor id */
> + /* major id */
> + WRITE32(major_id_sz);
> + WRITEMEM(major_id, major_id_sz);
> +
> + /* Server scope */
> + WRITE32(server_scope_sz);
> + WRITEMEM(server_scope, server_scope_sz);
> +
> + /* Implementation id */
> + WRITE32(0); /* zero length nfs_impl_id4 array */
> + ADJUST_ARGS();
> +out:
> return nfserr;
> }
>
> diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
> index 7592d7b..5de36a7 100644
> --- a/include/linux/nfsd/state.h
> +++ b/include/linux/nfsd/state.h
> @@ -173,6 +173,8 @@ struct nfs4_client {
> u32 cl_firststate; /* recovery dir creation */
> #ifdef CONFIG_NFSD_V4_1
> struct list_head cl_sessions;
> + u32 cl_seqid; /* seqid for create_session */
> + u32 cl_exchange_flags;
> #endif /* CONFIG_NFSD_V4_1 */
> };
>
> diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
> index 0148d54..ea5a427 100644
> --- a/include/linux/nfsd/xdr4.h
> +++ b/include/linux/nfsd/xdr4.h
> @@ -348,7 +348,13 @@ struct nfsd4_write {
>
> #if defined(CONFIG_NFSD_V4_1)
> struct nfsd4_exchange_id {
> - int foo; /* stub */
> + nfs4_verifier verifier;
> + u32 id_len;
> + char *id;
> + u32 flags;
> + clientid_t clientid;
> + u32 seqid;
> + int spa_how;
> };
>
> struct nfsd4_create_session {
> --
> 1.6.2.1
>
next prev parent reply other threads:[~2009-03-31 2:47 UTC|newest]
Thread overview: 204+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-27 2:58 [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30 Benny Halevy
2009-03-27 3:01 ` [PATCH 01/47] nfsd: don't use the deferral service, return NFS4ERR_DELAY Benny Halevy
2009-03-28 0:04 ` J. Bruce Fields
2009-03-28 7:54 ` Benny Halevy
2009-03-27 3:01 ` [PATCH 02/47] sunrpc: add cl_private field to struct rpc_clnt Benny Halevy
2009-03-28 0:05 ` J. Bruce Fields
2009-03-28 0:39 ` Myklebust, Trond
2009-03-28 8:20 ` Benny Halevy
2009-03-28 17:23 ` Trond Myklebust
[not found] ` <1238261035.6679.4.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-03-28 17:29 ` Benny Halevy
2009-03-28 17:35 ` Trond Myklebust
[not found] ` <1238261753.6679.13.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-03-28 19:26 ` Benny Halevy
2009-03-28 20:37 ` Trond Myklebust
2009-03-27 3:02 ` [PATCH 03/47] nfsd: embed nfsd4_current_state in nfsd4_compoundres Benny Halevy
2009-03-27 3:05 ` [PATCH 04/47] nfsd: add a struct nfsd4_slot pointer to struct nfsd4_compound_state Benny Halevy
2009-03-27 3:06 ` [PATCH 05/47] nfs41: common protocol definitions Benny Halevy
2009-03-27 3:06 ` [PATCH 06/47] nfsd41: change NFSERR_REPLAY_ME Benny Halevy
2009-03-27 3:06 ` [PATCH 07/47] nfsd41: Add Kconfig symbols for NFSv4.1 Benny Halevy
2009-03-27 3:07 ` [PATCH 08/47] nfsd41: define nfs41 error codes Benny Halevy
2009-03-27 3:07 ` [PATCH 09/47] nfsd41: sessions basic data types Benny Halevy
2009-03-27 3:07 ` [PATCH 10/47] nfsd41: introduce nfs4_client cl_sessions list Benny Halevy
2009-03-27 3:08 ` [PATCH 11/47] nfsd41: release_session when client is expired Benny Halevy
2009-03-27 3:08 ` [PATCH 12/47] nfsd41: sessionid hashing Benny Halevy
2009-03-27 3:08 ` [PATCH 13/47] nfsd41: xdr infrastructure Benny Halevy
2009-03-27 3:09 ` [PATCH 14/47] nfsd: remove nfsd4_ops array size Benny Halevy
2009-03-27 3:11 ` [PATCH 15/47] nfsd41: proc stubs Benny Halevy
2009-03-27 3:15 ` [PATCH 16/47] nfsd41: exchange_id operation Benny Halevy
2009-03-27 3:15 ` [PATCH 17/47] nfsd41: match clientid establishment method Benny Halevy
2009-03-27 3:15 ` [PATCH 18/47] nfsd41: sequence operation Benny Halevy
2009-03-27 3:15 ` [PATCH 19/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules Benny Halevy
2009-03-27 3:16 ` [PATCH 20/47] nfsd41: DRC save, restore, and clear functions Benny Halevy
2009-03-27 3:16 ` [PATCH 21/47] nfsd41: hard page limit for DRC Benny Halevy
2009-03-27 3:16 ` [PATCH 22/47] nfsd41: nfsd DRC logic Benny Halevy
2009-03-27 3:16 ` [PATCH 23/47] nfsd41: clear DRC cache on free_session Benny Halevy
2009-03-27 3:16 ` [PATCH 24/47] nfsd41: create_session operation Benny Halevy
2009-03-27 3:16 ` [PATCH 25/47] nfsd41: Add a create session replay cache Benny Halevy
2009-03-27 3:16 ` [PATCH 26/47] nfsd41: non-page DRC for solo sequence responses Benny Halevy
2009-03-27 3:16 ` [PATCH 27/47] nfsd41: destroy_session operation Benny Halevy
2009-03-27 3:17 ` [PATCH 28/47] nfsd41: stateid handling Benny Halevy
2009-03-27 3:17 ` [PATCH 29/47] nfsd41: check encode size for sessions maxresponse cached Benny Halevy
2009-03-27 3:17 ` [PATCH 30/47] nfsd41: clientid handling Benny Halevy
2009-03-27 3:17 ` [PATCH 31/47] nfsd41: access_valid Benny Halevy
2009-03-27 3:18 ` [PATCH 32/47] nfsd41: add OPEN4_SHARE_ACCESS_WANT nfs4_stateid bmap Benny Halevy
2009-03-27 3:18 ` [PATCH 33/47] nfsd41: provide support for minor version 1 at rpc level Benny Halevy
2009-03-27 3:18 ` [PATCH 34/47] nfsd: cleanup nfs4.0 callback encode routines Benny Halevy
2009-03-27 3:18 ` [PATCH 35/47] nfsd: minorversion support for the back channel Benny Halevy
2009-03-27 3:18 ` [PATCH 36/47] nfsd41: sunrpc: Added rpc server-side backchannel handling Benny Halevy
2009-03-27 3:19 ` [PATCH 37/47] nfsd41: callback infrastructure Benny Halevy
2009-03-27 3:19 ` [PATCH 38/47] nfsd41: Remember the auth flavor to use for callbacks Benny Halevy
2009-03-27 3:19 ` [PATCH 39/47] nfsd41: introduce cl_cb_mutex Benny Halevy
2009-03-27 3:19 ` [PATCH 40/47] nfsd41: cb_sequence callback Benny Halevy
2009-03-27 3:20 ` [PATCH 41/47] nfsd41: introduce nfs4_cb_call_sync for nfs4 and nfs41 Benny Halevy
2009-03-27 3:20 ` [PATCH 42/47] nfsd41: cb_recall callback Benny Halevy
2009-03-27 3:20 ` [PATCH 43/47] nfsd41: pass writable attrs mask to nfsd4_decode_fattr Benny Halevy
2009-03-27 3:20 ` [PATCH 44/47] nfsd41: support for 3-word long attribute bitmask Benny Halevy
2009-03-27 3:20 ` [PATCH 45/47] nfsd41: SUPPATTR_EXCLCREAT attribute Benny Halevy
2009-03-27 3:22 ` [PATCH 46/47] nfsd41: CREATE_EXCLUSIVE4_1 Benny Halevy
2009-03-27 3:23 ` [PATCH 47/47] nfsd41: Documentation/filesystems/nfs41-server.txt Benny Halevy
2009-03-28 0:01 ` [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30 J. Bruce Fields
2009-03-28 8:28 ` Benny Halevy
2009-03-28 8:30 ` [PATCH v2 01/47] nfsd: don't use the deferral service, return NFS4ERR_DELAY Benny Halevy
2009-03-28 8:30 ` [PATCH v2 02/47] nfsd: embed nfsd4_current_state in nfsd4_compoundres Benny Halevy
2009-03-29 20:46 ` J. Bruce Fields
2009-03-28 8:30 ` [PATCH v2 03/47] nfsd: add a struct nfsd4_slot pointer to struct nfsd4_compound_state Benny Halevy
2009-03-29 20:46 ` J. Bruce Fields
2009-03-30 19:59 ` Benny Halevy
2009-03-28 8:31 ` [PATCH v2 04/47] nfs41: common protocol definitions Benny Halevy
2009-03-30 21:54 ` J. Bruce Fields
2009-03-31 7:06 ` Benny Halevy
2009-03-28 8:31 ` [PATCH v2 05/47] nfsd41: change NFSERR_REPLAY_ME Benny Halevy
2009-03-28 8:31 ` [PATCH v2 06/47] nfsd41: Add Kconfig symbols for NFSv4.1 Benny Halevy
2009-04-01 4:33 ` J. Bruce Fields
2009-04-01 8:31 ` Benny Halevy
2009-04-01 13:10 ` J. Bruce Fields
2009-04-01 14:07 ` Benny Halevy
2009-04-01 15:32 ` [pnfs] " Benny Halevy
2009-04-02 9:18 ` Benny Halevy
2009-04-02 13:27 ` J. Bruce Fields
2009-04-02 13:46 ` Benny Halevy
2009-04-02 14:16 ` Trond Myklebust
[not found] ` <1238681800.6191.5.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-04-02 14:22 ` J. Bruce Fields
2009-04-02 14:25 ` Trond Myklebust
[not found] ` <1238682355.6191.6.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-04-02 14:31 ` J. Bruce Fields
2009-04-02 16:34 ` Benny Halevy
2009-04-02 16:54 ` J. Bruce Fields
2009-04-02 17:45 ` Benny Halevy
2009-04-02 17:52 ` Benny Halevy
2009-04-02 17:55 ` J. Bruce Fields
2009-04-02 17:58 ` J. Bruce Fields
2009-04-02 18:41 ` Benny Halevy
2009-04-02 18:46 ` J. Bruce Fields
2009-04-02 19:05 ` Benny Halevy
2009-04-02 22:49 ` J. Bruce Fields
2009-04-03 0:11 ` Benny Halevy
2009-04-03 2:29 ` J. Bruce Fields
2009-03-28 8:31 ` [PATCH v2 07/47] nfsd41: define nfs41 error codes Benny Halevy
2009-03-30 18:16 ` J. Bruce Fields
2009-03-30 19:59 ` Benny Halevy
2009-03-30 20:08 ` J. Bruce Fields
2009-03-28 8:31 ` [PATCH v2 08/47] nfsd41: sessions basic data types Benny Halevy
2009-03-28 8:31 ` [PATCH v2 09/47] nfsd41: introduce nfs4_client cl_sessions list Benny Halevy
2009-03-28 8:31 ` [PATCH v2 10/47] nfsd41: release_session when client is expired Benny Halevy
2009-03-28 8:31 ` [PATCH v2 11/47] nfsd41: sessionid hashing Benny Halevy
2009-03-30 20:08 ` J. Bruce Fields
2009-03-30 20:34 ` Benny Halevy
2009-03-30 20:59 ` J. Bruce Fields
2009-03-31 7:02 ` Benny Halevy
2009-03-28 8:31 ` [PATCH v2 12/47] nfsd41: xdr infrastructure Benny Halevy
2009-03-28 8:32 ` [PATCH v2 13/47] nfsd: remove nfsd4_ops array size Benny Halevy
2009-03-28 8:32 ` [PATCH v2 14/47] nfsd41: proc stubs Benny Halevy
2009-03-28 8:32 ` [PATCH v2 15/47] nfsd41: exchange_id operation Benny Halevy
2009-03-30 22:06 ` J. Bruce Fields
2009-03-31 7:44 ` Benny Halevy
2009-03-31 2:47 ` J. Bruce Fields [this message]
[not found] ` <7A6A58246D5F0B4EA127BEA555B3A9AD72ED6C@RTPMVEXC1-PRD.hq.netapp.com>
[not found] ` <7A6A58246D5F0B4EA127BEA555B3A9AD72ED6C-rtwIt2gI0FxT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-04-01 15:01 ` [pnfs] " J. Bruce Fields
2009-04-01 15:53 ` Sager, Mike
2009-03-28 8:32 ` [PATCH v2 16/47] nfsd41: match clientid establishment method Benny Halevy
2009-03-30 22:07 ` J. Bruce Fields
2009-03-31 6:59 ` Benny Halevy
2009-03-31 17:59 ` J. Bruce Fields
2009-03-31 18:21 ` Benny Halevy
2009-03-31 3:04 ` J. Bruce Fields
2009-03-31 8:49 ` Benny Halevy
2009-03-31 14:10 ` Andy Adamson
2009-04-02 0:01 ` J. Bruce Fields
2009-04-02 0:14 ` J. Bruce Fields
2009-04-02 7:22 ` Benny Halevy
2009-03-28 8:32 ` [PATCH v2 17/47] nfsd41: sequence operation Benny Halevy
2009-03-31 19:23 ` J. Bruce Fields
2009-03-28 8:32 ` [PATCH v2 18/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules Benny Halevy
2009-03-31 3:20 ` J. Bruce Fields
2009-03-31 9:04 ` Benny Halevy
2009-03-28 8:32 ` [PATCH v2 19/47] nfsd41: DRC save, restore, and clear functions Benny Halevy
2009-03-31 23:03 ` J. Bruce Fields
2009-04-01 18:23 ` Andy Adamson
2009-04-02 21:16 ` J. Bruce Fields
2009-04-02 21:29 ` [pnfs] " William A. (Andy) Adamson
[not found] ` <89c397150904021429i6731a9c0ibe064a0828941d16-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-02 22:31 ` J. Bruce Fields
2009-03-28 8:32 ` [PATCH v2 20/47] nfsd41: hard page limit for DRC Benny Halevy
2009-03-28 8:32 ` [PATCH v2 21/47] nfsd41: nfsd DRC logic Benny Halevy
2009-03-31 19:30 ` J. Bruce Fields
2009-04-01 19:01 ` [pnfs] " William A. (Andy) Adamson
[not found] ` <89c397150904011201j3cc19794x4a017d4e97bcd8f5-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-01 19:10 ` J. Bruce Fields
2009-04-01 20:20 ` William A. (Andy) Adamson
2009-03-28 8:32 ` [PATCH v2 22/47] nfsd41: clear DRC cache on free_session Benny Halevy
2009-03-28 8:32 ` [PATCH v2 23/47] nfsd41: create_session operation Benny Halevy
2009-03-31 23:38 ` J. Bruce Fields
2009-04-01 1:06 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 24/47] nfsd41: Add a create session replay cache Benny Halevy
2009-04-01 1:27 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 25/47] nfsd41: non-page DRC for solo sequence responses Benny Halevy
2009-04-01 4:12 ` J. Bruce Fields
2009-04-01 13:15 ` [pnfs] " William A. (Andy) Adamson
2009-03-28 8:33 ` [PATCH v2 26/47] nfsd41: destroy_session operation Benny Halevy
2009-03-28 8:33 ` [PATCH v2 27/47] nfsd41: stateid handling Benny Halevy
2009-04-01 4:21 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 28/47] nfsd41: check encode size for sessions maxresponse cached Benny Halevy
2009-04-01 21:54 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 29/47] nfsd41: clientid handling Benny Halevy
2009-03-28 8:33 ` [PATCH v2 30/47] nfsd41: access_valid Benny Halevy
2009-03-28 8:33 ` [PATCH v2 31/47] nfsd41: add OPEN4_SHARE_ACCESS_WANT nfs4_stateid bmap Benny Halevy
2009-03-28 8:33 ` [PATCH v2 32/47] nfsd41: provide support for minor version 1 at rpc level Benny Halevy
2009-03-28 8:34 ` [PATCH v2 33/47] nfsd: cleanup nfs4.0 callback encode routines Benny Halevy
2009-03-28 8:34 ` [PATCH v2 34/47] sunrpc: add cl_private field to struct rpc_clnt Benny Halevy
2009-03-28 8:34 ` [PATCH v2 35/47] nfsd: minorversion support for the back channel Benny Halevy
2009-03-28 8:34 ` [PATCH v2 36/47] nfsd41: sunrpc: Added rpc server-side backchannel handling Benny Halevy
2009-04-01 4:35 ` J. Bruce Fields
2009-03-28 8:34 ` [PATCH v2 37/47] nfsd41: callback infrastructure Benny Halevy
2009-03-28 8:34 ` [PATCH v2 38/47] nfsd41: Remember the auth flavor to use for callbacks Benny Halevy
2009-03-28 8:34 ` [PATCH v2 39/47] nfsd41: introduce cl_cb_mutex Benny Halevy
2009-03-28 8:34 ` [PATCH v2 40/47] nfsd41: cb_sequence callback Benny Halevy
2009-04-01 4:39 ` J. Bruce Fields
2009-04-01 8:43 ` Benny Halevy
2009-04-01 22:49 ` J. Bruce Fields
2009-04-02 8:47 ` Benny Halevy
2009-04-02 18:51 ` J. Bruce Fields
2009-04-02 19:20 ` Benny Halevy
2009-04-02 19:27 ` J. Bruce Fields
2009-04-02 19:34 ` Benny Halevy
2009-04-02 20:54 ` J. Bruce Fields
2009-04-03 1:06 ` Labiaga, Ricardo
[not found] ` <273FE88A07F5D445824060902F70034405026F00-hX7t0kiaRRpT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-04-03 2:34 ` J. Bruce Fields
2009-04-03 21:15 ` Labiaga, Ricardo
2009-04-02 20:32 ` Labiaga, Ricardo
2009-03-28 8:34 ` [PATCH v2 41/47] nfsd41: introduce nfs4_cb_call_sync for nfs4 and nfs41 Benny Halevy
2009-03-28 8:34 ` [PATCH v2 42/47] nfsd41: cb_recall callback Benny Halevy
2009-03-28 8:35 ` [PATCH v2 43/47] nfsd41: pass writable attrs mask to nfsd4_decode_fattr Benny Halevy
2009-03-28 8:35 ` [PATCH v2 44/47] nfsd41: support for 3-word long attribute bitmask Benny Halevy
2009-03-28 8:35 ` [PATCH v2 45/47] nfsd41: SUPPATTR_EXCLCREAT attribute Benny Halevy
2009-03-28 8:35 ` [PATCH v2 46/47] nfsd41: CREATE_EXCLUSIVE4_1 Benny Halevy
2009-03-28 8:35 ` [PATCH v2 47/47] nfsd41: Documentation/filesystems/nfs41-server.txt Benny Halevy
2009-03-28 16:37 ` [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30 J. Bruce Fields
2009-03-30 18:33 ` J. Bruce Fields
2009-03-30 18:59 ` J. Bruce Fields
2009-03-30 19:03 ` Benny Halevy
2009-03-30 19:07 ` J. Bruce Fields
2009-03-30 19:38 ` Benny Halevy
2009-03-30 21:15 ` J. Bruce Fields
2009-03-31 7:04 ` Benny Halevy
2009-03-31 1:27 ` Labiaga, Ricardo
2009-03-28 1:17 ` J. Bruce Fields
2009-03-28 18:32 ` Benny Halevy
2009-03-28 18:33 ` [PATCH 1/2] SQUASHME: nfsd41: do not verify nfserr_sequence_pos for minorversion 0 Benny Halevy
2009-03-28 18:33 ` [PATCH 2/2] nfsd: dynamically skip encoded fattr bitmap in _nfsd4_verify Benny Halevy
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=20090331024714.GA7653@fieldses.org \
--to=bfields@fieldses.org \
--cc=bhalevy@panasas.com \
--cc=linux-nfs@vger.kernel.org \
--cc=pnfs@linux-nfs.org \
/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.