[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