[pnfs] [RFC 17/85] nfs41: fallback to lower minorversion if nfs4_create_server fails

Benny Halevy bhalevy at panasas.com
Mon Nov 17 08:43:22 EST 2008


On Nov. 10, 2008, 22:20 +0200, Benny Halevy <bhalevy at panasas.com> wrote:
> retry nfs4_create_server with lower minorversion on minorvers_mismatch error
> 
> Signed-off-by: Benny Halevy <bhalevy at panasas.com>

review 11-14: move logic to reclaimer();

> ---
>  fs/nfs/client.c |   12 +++++++++++-
>  1 files changed, 11 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
> index 11c845d..0a8a082 100644
> --- a/fs/nfs/client.c
> +++ b/fs/nfs/client.c
> @@ -1118,15 +1118,17 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
>  {
>  	struct nfs_fattr fattr;
>  	struct nfs_server *server;
> +	int minorvers = data->minorversion;
>  	int error;
>  
>  	dprintk("--> nfs4_create_server()\n");
>  
> +retry:
>  	server = nfs_alloc_server();
>  	if (!server)
>  		return ERR_PTR(-ENOMEM);
>  
> -	server->minorversion = data->minorversion;
> +	server->minorversion = minorvers;
>  
>  	/* set up the general RPC client */
>  	error = nfs4_init_server(server, data);
> @@ -1168,7 +1170,15 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
>  	return server;
>  
>  error:
> +	if (server->nfs_client && server->nfs_client->cl_recovery_status)
> +		error = server->nfs_client->cl_recovery_status;
>  	nfs_free_server(server);
> +	if (minorvers > 0 && error == -NFS4ERR_MINOR_VERS_MISMATCH) {
> +		minorvers--;
> +		dprintk("%s: error %d retrying with minorvers=%d\n",
> +			__func__, error, minorvers);
> +		goto retry;
> +	}
>  	dprintk("<-- nfs4_create_server() = error %d\n", error);
>  	return ERR_PTR(error);
>  }


More information about the pNFS mailing list