All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benny Halevy <bhalevy@panasas.com>
To: andros@netapp.com
Cc: trond.myklebust@netapp.com, linux-nfs@vger.kernel.org
Subject: Re: [PATCH 03/16] NFS move nfs_client initialization into nfs_get_client
Date: Tue, 15 Feb 2011 21:58:56 -0500	[thread overview]
Message-ID: <4D5B3D70.5010700@panasas.com> (raw)
In-Reply-To: <1297711116-3139-4-git-send-email-andros@netapp.com>

On 2011-02-14 14:18, andros@netapp.com wrote:
> From: Andy Adamson <andros@netapp.com>
> 
> Now nfs_get_client returns an nfs_client ready to be used no matter if it was
> found or created.
> 
> Signed-off-by: Andy Adamson <andros@netapp.com>
> ---
>  fs/nfs/client.c |   67 ++++++++++++++++++++++++++++++++++++++----------------
>  1 files changed, 47 insertions(+), 20 deletions(-)
> 
> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
> index bd3ca32..75b236f 100644
> --- a/fs/nfs/client.c
> +++ b/fs/nfs/client.c
> @@ -81,6 +81,15 @@ retry:
>  }
>  #endif /* CONFIG_NFS_V4 */
>  
> +static int nfs4_init_client(struct nfs_client *clp,
> +		const struct rpc_timeout *timeparms,
> +		const char *ip_addr,
> +		rpc_authflavor_t authflavour,
> +		int noresvport);
> +static int nfs_init_client(struct nfs_client *clp,
> +			   const struct rpc_timeout *timeparms,
> +			   int noresvport);
> +
>  /*
>   * RPC cruft for NFS
>   */
> @@ -481,7 +490,12 @@ static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *dat
>   * Look up a client by IP address and protocol version
>   * - creates a new record if one doesn't yet exist
>   */
> -static struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_init)
> +static struct nfs_client *
> +nfs_get_client(const struct nfs_client_initdata *cl_init,
> +	       const struct rpc_timeout *timeparms,
> +	       const char *ip_addr,
> +	       rpc_authflavor_t authflavour,
> +	       int noresvport)
>  {
>  	struct nfs_client *clp, *new = NULL;
>  	int error;
> @@ -512,6 +526,17 @@ install_client:
>  	clp = new;
>  	list_add(&clp->cl_share_link, &nfs_client_list);
>  	spin_unlock(&nfs_client_lock);
> +
> +	if (cl_init->rpc_ops->version == 4)
> +		error = nfs4_init_client(clp, timeparms, ip_addr, authflavour,
> +					 noresvport);
> +	else
> +		error = nfs_init_client(clp, timeparms, noresvport);

To make that cleaner your could have both get the same parameters
and put nfs_init_client in struct nfs_rpc_ops, then call it via cl_init->rpc_ops

Benny

> +
> +	if (error < 0) {
> +		nfs_put_client(clp);
> +		return ERR_PTR(error);
> +	}
>  	dprintk("--> nfs_get_client() = %p [new]\n", clp);
>  	return clp;
>  
> @@ -769,7 +794,7 @@ static int nfs_init_server_rpcclient(struct nfs_server *server,
>   */
>  static int nfs_init_client(struct nfs_client *clp,
>  			   const struct rpc_timeout *timeparms,
> -			   const struct nfs_parsed_mount_data *data)
> +			   int noresvport)
>  {
>  	int error;
>  
> @@ -784,7 +809,7 @@ static int nfs_init_client(struct nfs_client *clp,
>  	 * - RFC 2623, sec 2.3.2
>  	 */
>  	error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX,
> -				      0, data->flags & NFS_MOUNT_NORESVPORT);
> +				      0, noresvport);
>  	if (error < 0)
>  		goto error;
>  	nfs_mark_client_ready(clp, NFS_CS_READY);
> @@ -820,19 +845,17 @@ static int nfs_init_server(struct nfs_server *server,
>  		cl_init.rpc_ops = &nfs_v3_clientops;
>  #endif
>  
> +	nfs_init_timeout_values(&timeparms, data->nfs_server.protocol,
> +			data->timeo, data->retrans);
> +
>  	/* Allocate or find a client reference we can use */
> -	clp = nfs_get_client(&cl_init);
> +	clp = nfs_get_client(&cl_init, &timeparms, NULL, RPC_AUTH_UNIX,
> +			     data->flags & NFS_MOUNT_NORESVPORT);
>  	if (IS_ERR(clp)) {
>  		dprintk("<-- nfs_init_server() = error %ld\n", PTR_ERR(clp));
>  		return PTR_ERR(clp);
>  	}
>  
> -	nfs_init_timeout_values(&timeparms, data->nfs_server.protocol,
> -			data->timeo, data->retrans);
> -	error = nfs_init_client(clp, &timeparms, data);
> -	if (error < 0)
> -		goto error;
> -
>  	server->nfs_client = clp;
>  
>  	/* Initialise the client representation from the mount data */
> @@ -1311,7 +1334,7 @@ static int nfs4_init_client(struct nfs_client *clp,
>  		const struct rpc_timeout *timeparms,
>  		const char *ip_addr,
>  		rpc_authflavor_t authflavour,
> -		int flags)
> +		int noresvport)
>  {
>  	int error;
>  
> @@ -1325,7 +1348,7 @@ static int nfs4_init_client(struct nfs_client *clp,
>  	clp->rpc_ops = &nfs_v4_clientops;
>  
>  	error = nfs_create_rpc_client(clp, timeparms, authflavour,
> -				      1, flags & NFS_MOUNT_NORESVPORT);
> +				      1, noresvport);
>  	if (error < 0)
>  		goto error;
>  	strlcpy(clp->cl_ipaddr, ip_addr, sizeof(clp->cl_ipaddr));
> @@ -1378,22 +1401,16 @@ static int nfs4_set_client(struct nfs_server *server,
>  	dprintk("--> nfs4_set_client()\n");
>  
>  	/* Allocate or find a client reference we can use */
> -	clp = nfs_get_client(&cl_init);
> +	clp = nfs_get_client(&cl_init, timeparms, ip_addr, authflavour,
> +			     server->flags & NFS_MOUNT_NORESVPORT);
>  	if (IS_ERR(clp)) {
>  		error = PTR_ERR(clp);
>  		goto error;
>  	}
> -	error = nfs4_init_client(clp, timeparms, ip_addr, authflavour,
> -					server->flags);
> -	if (error < 0)
> -		goto error_put;
>  
>  	server->nfs_client = clp;
>  	dprintk("<-- nfs4_set_client() = 0 [new %p]\n", clp);
>  	return 0;
> -
> -error_put:
> -	nfs_put_client(clp);
>  error:
>  	dprintk("<-- nfs4_set_client() = xerror %d\n", error);
>  	return error;
> @@ -1611,6 +1628,16 @@ error:
>  	return ERR_PTR(error);
>  }
>  
> +#else /* CONFIG_NFS_V4 */
> +static int nfs4_init_client(struct nfs_client *clp,
> +			    const struct rpc_timeout *timeparms,
> +			    const char *ip_addr,
> +			    rpc_authflavor_t authflavour,
> +			    int noresvport)
> +{
> +	return -EPROTONOSUPPORT;
> +}
> +
>  #endif /* CONFIG_NFS_V4 */
>  
>  /*

  reply	other threads:[~2011-02-16  2:58 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-14 19:18 [PATCH 0/16] pnfs wave 3 submission andros
2011-02-14 19:18 ` [PATCH 01/16] NFS remove unnecessary CONFIG_NFS_V4 from nfs_read_data andros
2011-02-15  9:16   ` Christoph Hellwig
2011-02-15  9:24     ` Taousif_Ansari-G5Y5guI6XLZWk0Htik3J/w
2011-02-15 14:51     ` Andy Adamson
2011-02-14 19:18 ` [PATCH 02/16] NFS put_layout_hdr can remove nfsi->layout andros
2011-02-14 19:18 ` [PATCH 03/16] NFS move nfs_client initialization into nfs_get_client andros
2011-02-16  2:58   ` Benny Halevy [this message]
2011-02-16 16:00     ` Andy Adamson
2011-02-14 19:18 ` [PATCH 04/16] pnfs: wave 3: send zero stateid seqid on v4.1 i/o andros
2011-02-14 19:18 ` [PATCH 05/16] pnfs: wave 3: new flag for state renewal check andros
2011-02-14 19:18 ` [PATCH 06/16] pnfs: wave 3: new flag for lease time check andros
2011-02-14 19:18 ` [PATCH 07/16] pnfs: wave 3: add MDS mount DS only check andros
2011-02-14 19:18 ` [PATCH 08/16] pnfs: wave 3: lseg refcounting andros
2011-02-15  9:25   ` Christoph Hellwig
2011-02-15 14:48     ` Fred Isaman
2011-02-15 14:58       ` Christoph Hellwig
2011-02-15 14:59         ` Benny Halevy
2011-02-15 15:06           ` Christoph Hellwig
2011-02-15 15:11             ` Fred Isaman
2011-02-15 16:02             ` Christoph Hellwig
2011-02-15 16:37               ` William A. (Andy) Adamson
2011-02-15 19:17                 ` Andy Adamson
2011-02-15 19:29                   ` Benny Halevy
2011-02-15 19:30                     ` Andy Adamson
2011-02-15 15:07         ` Fred Isaman
2011-02-14 19:18 ` [PATCH 09/16] pnfs: wave 3: shift pnfs_update_layout locations andros
2011-02-14 23:14   ` Trond Myklebust
2011-02-15 14:41     ` Fred Isaman
2011-02-15 15:00       ` Trond Myklebust
2011-02-16  3:11       ` Benny Halevy
2011-02-14 19:18 ` [PATCH 10/16] pnfs: wave 3: coelesce across layout stripes andros
2011-02-14 23:42   ` Trond Myklebust
2011-02-15 14:43     ` William A. (Andy) Adamson
2011-02-15 15:03       ` Trond Myklebust
     [not found]         ` <1297782220.10103.13.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2011-02-15 15:10           ` Andy Adamson
2011-02-14 19:18 ` [PATCH 11/16] pnfs: wave 3: generic read andros
2011-02-14 23:36   ` Trond Myklebust
2011-02-15 14:47     ` Andy Adamson
2011-02-16  3:16   ` Benny Halevy
2011-02-16 14:53     ` Andy Adamson
2011-02-16 15:09       ` Trond Myklebust
2011-02-16 15:52         ` Benny Halevy
2011-02-16 15:56           ` Andy Adamson
2011-02-16 15:57           ` Sager, Mike
2011-02-14 19:18 ` [PATCH 12/16] pnfs: wave 3: data server connection andros
2011-02-14 19:18 ` [PATCH 13/16] pnfs: wave 3: filelayout i/o helpers andros
2011-02-15  9:31   ` Christoph Hellwig
2011-02-15 15:12     ` Andy Adamson
2011-02-14 19:18 ` [PATCH 14/16] pnfs: wave 3: filelayout read andros
2011-02-14 19:18 ` [PATCH 15/16] pnfs: wave 3: filelayout async error handler andros
2011-02-14 19:18 ` [PATCH 16/16] pnfs: wave 3: turn off pNFS on ds connection failure andros
2011-02-14 22:39 ` [PATCH 0/16] pnfs wave 3 submission Trond Myklebust
2011-02-15 14:44   ` 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=4D5B3D70.5010700@panasas.com \
    --to=bhalevy@panasas.com \
    --cc=andros@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=trond.myklebust@netapp.com \
    /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.