[pnfs] [PATCH 2/2] nfs41: fix hardcoding of minorversion
Benny Halevy
bhalevy at panasas.com
Wed Apr 30 13:07:16 EDT 2008
Applied to the nfs41 branch.
Thanks!
Benny
On Apr. 30, 2008, 5:43 +0300, sager at netapp.com wrote:
> From: Mike Sager <sager at netapp.com>
>
> During client initialization, if CONFIG_NFS_V4_1 is defined, 4.1 is
> assumed. Fix this to use the specified (or default) minorversion.
>
> Signed-off-by: Mike Sager <sager at netapp.com>
> ---
> fs/nfs/client.c | 22 +++++++++++++---------
> fs/nfs/nfs4proc.c | 5 ++---
> include/linux/nfs_fs_sb.h | 1 +
> 3 files changed, 16 insertions(+), 12 deletions(-)
>
> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
> index c3451cf..9c50be3 100644
> --- a/fs/nfs/client.c
> +++ b/fs/nfs/client.c
> @@ -984,11 +984,10 @@ static int nfs4_init_client(struct nfs_client *clp,
> return 0;
> }
>
> -#if defined(CONFIG_NFS_V4_1)
> - clp->cl_boot_time = CURRENT_TIME;
> - clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED;
> - clp->cl_minorversion = NFS4_MAX_MINOR_VERSION;
> -#endif /* CONFIG_NFS_V4_1 */
> + if (clp->cl_minorversion == 1) {
> + clp->cl_boot_time = CURRENT_TIME;
> + clp->cl_state = 1 << NFS4CLNT_LEASE_EXPIRED;
> + }
>
> /* Check NFS protocol revision and initialize RPC op vector */
> clp->rpc_ops = nfsv4_minorversion_clientops[clp->cl_minorversion];
> @@ -1060,6 +1059,7 @@ int nfs4_set_client(struct nfs_server *server,
> error = PTR_ERR(clp);
> goto error;
> }
> + clp->cl_minorversion = server->minorversion;
> error = nfs4_init_client(clp, timeparms, ip_addr, authflavour);
> if (error < 0)
> goto error_put;
> @@ -1180,6 +1180,8 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
> if (!server)
> return ERR_PTR(-ENOMEM);
>
> + server->minorversion = data->minorvers;
> +
> /* set up the general RPC client */
> error = nfs4_init_server(server, data);
> if (error < 0)
> @@ -1190,10 +1192,12 @@ struct nfs_server *nfs4_create_server(const struct nfs_parsed_mount_data *data,
> BUG_ON(!server->nfs_client->rpc_ops->file_inode_ops);
>
> #if defined(CONFIG_NFS_V4_1)
> - error = nfs4_init_session(server->nfs_client, &server->session,
> - server->client);
> - if (error)
> - goto error;
> + if (server->minorversion == 1) {
> + error = nfs4_init_session(server->nfs_client, &server->session,
> + server->client);
> + if (error)
> + goto error;
> + }
> #endif /* CONFIG_NFS_V4_1 */
>
> /* Probe the root fh to retrieve its FSID */
> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> index cd1eee8..741778a 100644
> --- a/fs/nfs/nfs4proc.c
> +++ b/fs/nfs/nfs4proc.c
> @@ -1762,9 +1762,8 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
> if (calldata->arg.seqid == NULL)
> goto out_free_calldata;
> calldata->arg.stateid = &state->open_stateid;
> -#ifdef CONFIG_NFS_V4_1
> - memset(&calldata->arg.stateid->data, 0, 4);
> -#endif /* CONFIG_NFS_V4_1 */
> + if (server->minorversion == 1)
> + memset(&calldata->arg.stateid->data, 0, 4);
> calldata->arg.bitmask = server->attr_bitmask;
> calldata->res.fattr = &calldata->fattr;
> calldata->res.server = server;
> diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
> index 6746eb9..7dd91de 100644
> --- a/include/linux/nfs_fs_sb.h
> +++ b/include/linux/nfs_fs_sb.h
> @@ -130,6 +130,7 @@ struct nfs_server {
> u32 acl_bitmask; /* V4 bitmask representing the ACEs
> that are supported on this
> filesystem */
> + u32 minorversion;
> #endif
>
> #ifdef CONFIG_NFS_V4_1
More information about the pNFS
mailing list