All of lore.kernel.org
 help / color / mirror / Atom feed
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 27/47] nfsd41: stateid handling
Date: Wed, 1 Apr 2009 00:21:17 -0400	[thread overview]
Message-ID: <20090401042117.GD28096@fieldses.org> (raw)
In-Reply-To: <1238229211-11111-1-git-send-email-bhalevy@panasas.com>

On Sat, Mar 28, 2009 at 11:33:31AM +0300, Benny Halevy wrote:
> From: Andy Adamson <andros@netapp.com>
> 
> When sessions are used, stateful operation sequenceid and stateid handling
> are not used. When sessions are used,  on the first open set the seqid to 1,
> mark state confirmed and skip seqid processing.
> 
> When sessionas are used the stateid generation number is ignored when it is zero
> whereas without sessions bad_stateid or stale stateid is returned.
> 
> Add flags to propagate session use to all stateful ops and down to
> check_stateid_generation.
> 
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
> Signed-off-by: Andy Adamson <andros@netapp.com>
> [nfsd4_has_session should return a boolean, not u32]
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
> ---
>  fs/nfsd/nfs4proc.c         |   17 ++++++++--
>  fs/nfsd/nfs4state.c        |   70 ++++++++++++++++++++++++++++++++++---------
>  fs/nfsd/nfs4xdr.c          |    2 +-
>  include/linux/nfsd/state.h |    1 +
>  include/linux/nfsd/xdr4.h  |    8 ++++-
>  5 files changed, 77 insertions(+), 21 deletions(-)
> 
> diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
> index a273023..1d4b2b5 100644
> --- a/fs/nfsd/nfs4proc.c
> +++ b/fs/nfsd/nfs4proc.c
> @@ -179,7 +179,7 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	nfs4_lock_state();
>  
>  	/* check seqid for replay. set nfs4_owner */
> -	status = nfsd4_process_open1(open);
> +	status = nfsd4_process_open1(rqstp, open);

Seems all your using is the cstate--maybe pass that instead?

>  	if (status == nfserr_replay_me) {
>  		struct nfs4_replay *rp = &open->op_stateowner->so_replay;
>  		fh_put(&cstate->current_fh);
> @@ -504,6 +504,7 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	   struct nfsd4_read *read)
>  {
>  	__be32 status;
> +	int flags = RD_STATE;
>  
>  	/* no need to check permission - this will be done in nfsd_read() */
>  
> @@ -511,11 +512,13 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	if (read->rd_offset >= OFFSET_MAX)
>  		return nfserr_inval;
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	nfs4_lock_state();
>  	/* check stateid */
>  	if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh,

You could pass the cstate to preprocess_stateid_op instead of
current_fh, and let it do the nfsd4_has_session check instead of making
all the callers do it.

--b.

>  				&read->rd_stateid,
> -				RD_STATE, &read->rd_filp))) {
> +				flags, &read->rd_filp))) {
>  		dprintk("NFSD: nfsd4_read: couldn't process stateid!\n");
>  		goto out;
>  	}
> @@ -643,11 +646,14 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	      struct nfsd4_setattr *setattr)
>  {
>  	__be32 status = nfs_ok;
> +	int flags = WR_STATE;
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
>  		nfs4_lock_state();
>  		status = nfs4_preprocess_stateid_op(&cstate->current_fh,
> -			&setattr->sa_stateid, WR_STATE, NULL);
> +			&setattr->sa_stateid, flags, NULL);
>  		nfs4_unlock_state();
>  		if (status) {
>  			dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n");
> @@ -679,15 +685,18 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	u32 *p;
>  	__be32 status = nfs_ok;
>  	unsigned long cnt;
> +	int flags = WR_STATE;
>  
>  	/* no need to check permission - this will be done in nfsd_write() */
>  
>  	if (write->wr_offset >= OFFSET_MAX)
>  		return nfserr_inval;
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	nfs4_lock_state();
>  	status = nfs4_preprocess_stateid_op(&cstate->current_fh, stateid,
> -					WR_STATE, &filp);
> +					    flags, &filp);
>  	if (filp)
>  		get_file(filp);
>  	nfs4_unlock_state();
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index 9c93f96..bf5b214 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -2199,12 +2199,13 @@ static struct lock_manager_operations nfsd_lease_mng_ops = {
>  
>  
>  __be32
> -nfsd4_process_open1(struct nfsd4_open *open)
> +nfsd4_process_open1(struct svc_rqst *rqstp, struct nfsd4_open *open)
>  {
>  	clientid_t *clientid = &open->op_clientid;
>  	struct nfs4_client *clp = NULL;
>  	unsigned int strhashval;
>  	struct nfs4_stateowner *sop = NULL;
> +	struct nfsd4_compoundres *resp = rqstp->rq_resp;
>  
>  	if (!check_name(open->op_owner))
>  		return nfserr_inval;
> @@ -2222,6 +2223,9 @@ nfsd4_process_open1(struct nfsd4_open *open)
>  			return nfserr_expired;
>  		goto renew;
>  	}
> +	/* When sessions are used, skip open sequenceid processing */
> +	if (nfsd4_has_session(&resp->cstate))
> +		goto renew;
>  	if (!sop->so_confirmed) {
>  		/* Replace unconfirmed owners without checking for replay. */
>  		clp = sop->so_client;
> @@ -2499,6 +2503,7 @@ out:
>  __be32
>  nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open)
>  {
> +	struct nfsd4_compoundres *resp = rqstp->rq_resp;
>  	struct nfs4_file *fp = NULL;
>  	struct inode *ino = current_fh->fh_dentry->d_inode;
>  	struct nfs4_stateid *stp = NULL;
> @@ -2557,9 +2562,14 @@ nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nf
>  			release_open_stateid(stp);
>  			goto out;
>  		}
> +		if (nfsd4_has_session(&resp->cstate))
> +			update_stateid(&stp->st_stateid);
>  	}
>  	memcpy(&open->op_stateid, &stp->st_stateid, sizeof(stateid_t));
>  
> +	if (nfsd4_has_session(&resp->cstate))
> +		open->op_stateowner->so_confirmed = 1;
> +
>  	/*
>  	* Attempt to hand out a delegation. No error return, because the
>  	* OPEN succeeds even if we fail.
> @@ -2580,7 +2590,8 @@ out:
>  	* To finish the open response, we just need to set the rflags.
>  	*/
>  	open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX;
> -	if (!open->op_stateowner->so_confirmed)
> +	if (!open->op_stateowner->so_confirmed &&
> +	    !nfsd4_has_session(&resp->cstate))
>  		open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM;
>  
>  	return status;
> @@ -2797,8 +2808,15 @@ grace_disallows_io(struct inode *inode)
>  	return locks_in_grace() && mandatory_lock(inode);
>  }
>  
> -static int check_stateid_generation(stateid_t *in, stateid_t *ref)
> +static int check_stateid_generation(stateid_t *in, stateid_t *ref, int flags)
>  {
> +	/*
> +	 * When sessions are used the stateid generation number is ignored
> +	 * when it is zero.
> +	 */
> +	if ((flags & HAS_SESSION) && in->si_generation == 0)
> +		goto out;
> +
>  	/* If the client sends us a stateid from the future, it's buggy: */
>  	if (in->si_generation > ref->si_generation)
>  		return nfserr_bad_stateid;
> @@ -2814,6 +2832,7 @@ static int check_stateid_generation(stateid_t *in, stateid_t *ref)
>  	 */
>  	if (in->si_generation < ref->si_generation)
>  		return nfserr_old_stateid;
> +out:
>  	return nfs_ok;
>  }
>  
> @@ -2851,7 +2870,8 @@ nfs4_preprocess_stateid_op(struct svc_fh *current_fh, stateid_t *stateid, int fl
>  		dp = find_delegation_stateid(ino, stateid);
>  		if (!dp)
>  			goto out;
> -		status = check_stateid_generation(stateid, &dp->dl_stateid);
> +		status = check_stateid_generation(stateid, &dp->dl_stateid,
> +						  flags);
>  		if (status)
>  			goto out;
>  		status = nfs4_check_delegmode(dp, flags);
> @@ -2868,7 +2888,8 @@ nfs4_preprocess_stateid_op(struct svc_fh *current_fh, stateid_t *stateid, int fl
>  			goto out;
>  		if (!stp->st_stateowner->so_confirmed)
>  			goto out;
> -		status = check_stateid_generation(stateid, &stp->st_stateid);
> +		status = check_stateid_generation(stateid, &stp->st_stateid,
> +						  flags);
>  		if (status)
>  			goto out;
>  		status = nfs4_check_openmode(stp, flags);
> @@ -2971,7 +2992,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei
>  	*  For the moment, we ignore the possibility of 
>  	*  generation number wraparound.
>  	*/
> -	if (seqid != sop->so_seqid)
> +	if (!(flags & HAS_SESSION) && seqid != sop->so_seqid)
>  		goto check_replay;
>  
>  	if (sop->so_confirmed && flags & CONFIRM) {
> @@ -2984,7 +3005,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei
>  				" confirmed yet!\n");
>  		return nfserr_bad_stateid;
>  	}
> -	status = check_stateid_generation(stateid, &stp->st_stateid);
> +	status = check_stateid_generation(stateid, &stp->st_stateid, flags);
>  	if (status)
>  		return status;
>  	renew_client(sop->so_client);
> @@ -3080,6 +3101,7 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
>  	__be32 status;
>  	struct nfs4_stateid *stp;
>  	unsigned int share_access;
> +	int flags = OPEN_STATE;
>  
>  	dprintk("NFSD: nfsd4_open_downgrade on file %.*s\n", 
>  			(int)cstate->current_fh.fh_dentry->d_name.len,
> @@ -3089,11 +3111,13 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
>  			|| !deny_valid(od->od_share_deny))
>  		return nfserr_inval;
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	nfs4_lock_state();
>  	if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
>  					od->od_seqid,
>  					&od->od_stateid, 
> -					OPEN_STATE,
> +					flags,
>  					&od->od_stateowner, &stp, NULL)))
>  		goto out; 
>  
> @@ -3136,17 +3160,20 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  {
>  	__be32 status;
>  	struct nfs4_stateid *stp;
> +	int flags = OPEN_STATE | CLOSE_STATE;
>  
>  	dprintk("NFSD: nfsd4_close on file %.*s\n", 
>  			(int)cstate->current_fh.fh_dentry->d_name.len,
>  			cstate->current_fh.fh_dentry->d_name.name);
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	nfs4_lock_state();
>  	/* check close_lru for replay */
>  	if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
>  					close->cl_seqid,
>  					&close->cl_stateid, 
> -					OPEN_STATE | CLOSE_STATE,
> +					flags,
>  					&close->cl_stateowner, &stp, NULL)))
>  		goto out; 
>  	status = nfs_ok;
> @@ -3179,11 +3206,14 @@ nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	stateid_t *stateid = &dr->dr_stateid;
>  	struct inode *inode;
>  	__be32 status;
> +	int flags = 0;
>  
>  	if ((status = fh_verify(rqstp, &cstate->current_fh, S_IFREG, 0)))
>  		return status;
>  	inode = cstate->current_fh.fh_dentry->d_inode;
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	nfs4_lock_state();
>  	status = nfserr_bad_stateid;
>  	if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
> @@ -3197,7 +3227,7 @@ nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	dp = find_delegation_stateid(inode, stateid);
>  	if (!dp)
>  		goto out;
> -	status = check_stateid_generation(stateid, &dp->dl_stateid);
> +	status = check_stateid_generation(stateid, &dp->dl_stateid, flags);
>  	if (status)
>  		goto out;
>  	renew_client(dp->dl_client);
> @@ -3459,7 +3489,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	__be32 status = 0;
>  	unsigned int strhashval;
>  	unsigned int cmd;
> -	int err;
> +	int err, flags = 0;
>  
>  	dprintk("NFSD: nfsd4_lock: start=%Ld length=%Ld\n",
>  		(long long) lock->lk_offset,
> @@ -3489,11 +3519,15 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  		if (STALE_CLIENTID(&lock->lk_new_clientid))
>  			goto out;
>  
> +		flags = OPEN_STATE;
> +		if (nfsd4_has_session(cstate))
> +			flags |= HAS_SESSION;
> +
>  		/* validate and update open stateid and open seqid */
>  		status = nfs4_preprocess_seqid_op(&cstate->current_fh,
>  				        lock->lk_new_open_seqid,
>  		                        &lock->lk_new_open_stateid,
> -					OPEN_STATE,
> +					flags,
>  		                        &lock->lk_replay_owner, &open_stp,
>  					lock);
>  		if (status)
> @@ -3516,11 +3550,15 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  		if (lock_stp == NULL)
>  			goto out;
>  	} else {
> +		flags = LOCK_STATE;
> +		if (nfsd4_has_session(cstate))
> +			flags |= HAS_SESSION;
> +
>  		/* lock (lock owner + lock stateid) already exists */
>  		status = nfs4_preprocess_seqid_op(&cstate->current_fh,
>  				       lock->lk_old_lock_seqid, 
>  				       &lock->lk_old_lock_stateid, 
> -				       LOCK_STATE,
> +				       flags,
>  				       &lock->lk_replay_owner, &lock_stp, lock);
>  		if (status)
>  			goto out;
> @@ -3702,7 +3740,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	struct file *filp = NULL;
>  	struct file_lock file_lock;
>  	__be32 status;
> -	int err;
> +	int err, flags = LOCK_STATE;
>  						        
>  	dprintk("NFSD: nfsd4_locku: start=%Ld length=%Ld\n",
>  		(long long) locku->lu_offset,
> @@ -3711,12 +3749,14 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
>  	if (check_lock_length(locku->lu_offset, locku->lu_length))
>  		 return nfserr_inval;
>  
> +	if (nfsd4_has_session(cstate))
> +		flags |= HAS_SESSION;
>  	nfs4_lock_state();
>  									        
>  	if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
>  					locku->lu_seqid, 
>  					&locku->lu_stateid, 
> -					LOCK_STATE,
> +					flags,
>  					&locku->lu_stateowner, &stp, NULL)))
>  		goto out;
>  
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 5720aab..a2682e8 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -3206,7 +3206,7 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
>  	iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base;
>  	BUG_ON(iov->iov_len > PAGE_SIZE);
>  #ifdef CONFIG_NFSD_V4_1
> -	if (resp->cstate.slot != NULL) {
> +	if (nfsd4_has_session(&resp->cstate)) {
>  		if (resp->cstate.status == nfserr_replay_cache &&
>  				!nfsd4_no_page_in_cache(resp)) {
>  			iov->iov_len = resp->cstate.iovlen;
> diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
> index 47c7836..302557d 100644
> --- a/include/linux/nfsd/state.h
> +++ b/include/linux/nfsd/state.h
> @@ -323,6 +323,7 @@ struct nfs4_stateid {
>  };
>  
>  /* flags for preprocess_seqid_op() */
> +#define HAS_SESSION             0x00000001
>  #define CONFIRM                 0x00000002
>  #define OPEN_STATE              0x00000004
>  #define LOCK_STATE              0x00000008
> diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
> index 37a7c51..aafbfdc 100644
> --- a/include/linux/nfsd/xdr4.h
> +++ b/include/linux/nfsd/xdr4.h
> @@ -55,6 +55,11 @@ struct nfsd4_compound_state {
>  	u32			status;
>  };
>  
> +static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
> +{
> +	return cs->slot != NULL;
> +}
> +
>  struct nfsd4_change_info {
>  	u32		atomic;
>  	u32		before_ctime_sec;
> @@ -540,7 +545,8 @@ extern __be32 nfsd4_destroy_session(struct svc_rqst *,
>  		struct nfsd4_compound_state *,
>  		struct nfsd4_destroy_session *);
>  #endif /* CONFIG_NFSD_V4_1 */
> -extern __be32 nfsd4_process_open1(struct nfsd4_open *open);
> +extern __be32 nfsd4_process_open1(struct svc_rqst *rqstp,
> +		struct nfsd4_open *open);
>  extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
>  		struct svc_fh *current_fh, struct nfsd4_open *open);
>  extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
> -- 
> 1.6.2.1
> 

  reply	other threads:[~2009-04-01  4:21 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
     [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 [this message]
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=20090401042117.GD28096@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.