public inbox for linux-nfs@vger.kernel.org
 help / color / mirror / Atom feed
From: "J. Bruce Fields" <bfields@fieldses.org>
To: andros@netapp.com
Cc: linux-nfs@vger.kernel.org, pnfs@linux-nfs.org
Subject: Re: [PATCH 05/29] nfsd41: create_session cache hold client reference
Date: Thu, 23 Apr 2009 19:28:25 -0400	[thread overview]
Message-ID: <20090423232825.GK1906@fieldses.org> (raw)
In-Reply-To: <1240504988-9572-6-git-send-email-andros@netapp.com>

On Thu, Apr 23, 2009 at 12:42:44PM -0400, andros@netapp.com wrote:
> From: Andy Adamson <andros@netapp.com>
> 
> expire_client can be called on a confirmed or unconfirmed client while
> processing the create session operation and accessing the clientid slot.

I don't understand--isn't all that under the state lock for now?

--b.

> 
> Signed-off-by: Andy Adamson <andros@netapp.com>
> ---
>  fs/nfsd/nfs4state.c |   14 ++++++++++----
>  1 files changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index a585a58..accad58 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -1355,6 +1355,7 @@ nfsd4_create_session(struct svc_rqst *rqstp,
>  	conf = find_confirmed_client(&cr_ses->clientid);
>  
>  	if (conf) {
> +		atomic_inc(&conf->cl_count);
>  		slot = &conf->cl_slot;
>  		status = check_slot_seqid(cr_ses->seqid, slot);
>  		if (status == nfserr_replay_cache) {
> @@ -1363,27 +1364,30 @@ nfsd4_create_session(struct svc_rqst *rqstp,
>  			cstate->status = nfserr_replay_clientid_cache;
>  			/* Return the cached reply status */
>  			status = nfsd4_replay_create_session(resp, slot);
> -			goto out;
> +			goto out_put;
>  		} else if (cr_ses->seqid != conf->cl_slot.sl_seqid + 1) {
>  			status = nfserr_seq_misordered;
>  			dprintk("Sequence misordered!\n");
>  			dprintk("Expected seqid= %d but got seqid= %d\n",
>  				slot->sl_seqid, cr_ses->seqid);
> -			goto out;
> +			goto out_put;
>  		}
>  		conf->cl_slot.sl_seqid++;
>  	} else if (unconf) {
> +		atomic_inc(&unconf->cl_count);
>  		slot = &unconf->cl_slot;
>  		status = check_slot_seqid(cr_ses->seqid, slot);
>  		if (status) {
>  			/* an unconfirmed replay returns misordered */
>  			status = nfserr_seq_misordered;
> -			goto out;
> +			conf = unconf; /* for put_nfs4_client */
> +			goto out_put;
>  		}
>  
>  		if (!same_creds(&unconf->cl_cred, &rqstp->rq_cred) ||
>  		    (ip_addr != unconf->cl_addr)) {
>  			status = nfserr_clid_inuse;
> +			conf = unconf; /* for put_nfs4_client */
>  			goto out_cache;
>  		}
>  
> @@ -1413,7 +1417,7 @@ nfsd4_create_session(struct svc_rqst *rqstp,
>  
>  	status = alloc_init_session(rqstp, conf, cr_ses);
>  	if (status)
> -		goto out;
> +		goto out_put;
>  
>  	memcpy(cr_ses->sessionid.data, conf->cl_sessionid.data,
>  	       NFS4_MAX_SESSIONID_LEN);
> @@ -1423,6 +1427,8 @@ out_cache:
>  	/* cache solo and embedded create sessions under the state lock */
>  	nfsd4_cache_create_session(cr_ses, slot, status);
>  
> +out_put:
> +	put_nfs4_client(conf);
>  out:
>  	nfs4_unlock_state();
>  	dprintk("%s returns %d\n", __func__, ntohl(status));
> -- 
> 1.5.4.3
> 

  parent reply	other threads:[~2009-04-23 23:28 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-23 16:42 [PATCH 0/29] NFSv4.1 Server DRC rewrite andros
2009-04-23 16:42 ` [PATCH 01/29] nfsd41: add create session slot buffer to struc nfs4_client andros
2009-04-23 16:42   ` [PATCH 02/29] nfsd41: encode create_session result into cache andros
2009-04-23 16:42     ` [PATCH 03/29] nfsd41: create_session check replay first andros
2009-04-23 16:42       ` [PATCH 04/29] nfsd41: replay solo and embedded create session andros
2009-04-23 16:42         ` [PATCH 05/29] nfsd41: create_session cache hold client reference andros
2009-04-23 16:42           ` [PATCH 06/29] nfsd41: no nfsd4_release_respages for the clientid cache andros
2009-04-23 16:42             ` [PATCH 07/29] nfsd41: slots are freed with session andros
2009-04-23 16:42               ` [PATCH 08/29] nfsd41: protect sv_drc_pages_used with spinlock andros
2009-04-23 16:42                 ` [PATCH 09/29] nfsd41: sanity check client drc maxreqs andros
2009-04-23 16:42                   ` [PATCH 10/29] nfsd41: change from page to memory based drc limits andros
2009-04-23 16:42                     ` [PATCH 11/29] nfsd41: set the session maximum response size cached andros
2009-04-23 16:42                       ` [PATCH 12/29] nfsd41: allocate and use drc cache buffers andros
2009-04-23 16:42                         ` [PATCH 13/29] nfsd41: free " andros
2009-04-23 16:42                           ` [PATCH 14/29] nfsd41: obliterate nfsd4_copy_pages andros
2009-04-23 16:42                             ` [PATCH 15/29] nfsd41: obliterate nfsd41_copy_replay_data andros
2009-04-23 16:42                               ` [PATCH 16/29] nfsd41: obliterate nfsd4_release_respages andros
2009-04-23 16:42                                 ` [PATCH 17/29] nfsd41: remove unused nfsd4_cache_entry fields andros
2009-04-23 16:42                                   ` [PATCH 18/29] nfsd41: obliterate nfsd4_set_statp andros
2009-04-23 16:42                                     ` [PATCH 19/29] nfsd41: rename nfsd4_enc_uncached_replay andros
2009-04-23 16:42                                       ` [PATCH 20/29] nfsd41: encode replay sequence from the slot values andros
2009-04-23 16:43                                         ` [PATCH 21/29] nfsd41: remove iovlen field from nfsd4_compound_state andros
2009-04-23 16:43                                           ` [PATCH 22/29] nfsd41: obliterate nfsd41_copy_replay_data andros
2009-04-23 16:43                                             ` [PATCH 23/29] nfsd41: fix nfsd4_store_cache_entry comments andros
2009-04-23 16:43                                               ` [PATCH 24/29] nfsd41: support 16 slots per session andros
2009-04-23 16:43                                                 ` [PATCH 25/29] nfsd41: use the maximum operations per compound in nfsd4_compoundargs andros
2009-04-23 16:43                                                   ` [PATCH 26/29] nfsd41: fix nfsd4_store_cache_entry dprintk andros
2009-04-23 16:43                                                     ` [PATCH 27/29] nfsd41: add test for failed sequence operation andros
2009-04-23 16:43                                                       ` [PATCH 28/29] nfsd41: remove redundant failed sequence check andros
2009-04-23 16:43                                                         ` [PATCH 29/29] nfsd41: remove check for session andros
2009-04-23 23:39                           ` [PATCH 13/29] nfsd41: free drc cache buffers J. Bruce Fields
2009-04-24 14:11                             ` [pnfs] " William A. (Andy) Adamson
2009-04-23 23:36                 ` [PATCH 08/29] nfsd41: protect sv_drc_pages_used with spinlock J. Bruce Fields
2009-04-24 14:11                   ` [pnfs] " William A. (Andy) Adamson
2009-04-23 23:28           ` J. Bruce Fields [this message]
2009-04-24 13:52             ` [PATCH 05/29] nfsd41: create_session cache hold client reference Andy Adamson
2009-04-24 14:02               ` J. Bruce Fields
2009-04-24 14:06                 ` [pnfs] " William A. (Andy) Adamson
2009-04-23 23:25         ` [PATCH 04/29] nfsd41: replay solo and embedded create session J. Bruce Fields
2009-04-23 23:21     ` [PATCH 02/29] nfsd41: encode create_session result into cache J. Bruce Fields
2009-04-23 23:32       ` J. Bruce Fields
2009-04-24 13:56         ` Andy Adamson
2009-04-24 13:52       ` Andy Adamson
2009-04-23 22:55   ` [PATCH 01/29] nfsd41: add create session slot buffer to struc nfs4_client J. Bruce Fields
2009-04-23 23:41 ` [PATCH 0/29] NFSv4.1 Server DRC rewrite J. Bruce Fields
2009-04-24 14:12   ` [pnfs] " William A. (Andy) Adamson

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=20090423232825.GK1906@fieldses.org \
    --to=bfields@fieldses.org \
    --cc=andros@netapp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox