NFS: Fix a default mount regression...

With the recent spate of changes, the nfs protocol version will now default
to 2 instead of 3, while the mount protocol version defaults to 3.

The following patch should ensure the defaults are consistent with the
previous defaults of vers=3,proto=tcp,mountvers=3,mountproto=tcp.

This fixes the bug
   http://bugzilla.kernel.org/show_bug.cgi?id=14259

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Trond Myklebust 2009-10-06 15:40:15 -04:00
parent 0eca52a927
commit c5811dbdd2

View File

@ -728,22 +728,24 @@ static void nfs_umount_begin(struct super_block *sb)
unlock_kernel(); unlock_kernel();
} }
static struct nfs_parsed_mount_data *nfs_alloc_parsed_mount_data(int flags) static struct nfs_parsed_mount_data *nfs_alloc_parsed_mount_data(unsigned int version)
{ {
struct nfs_parsed_mount_data *data; struct nfs_parsed_mount_data *data;
data = kzalloc(sizeof(*data), GFP_KERNEL); data = kzalloc(sizeof(*data), GFP_KERNEL);
if (data) { if (data) {
data->flags = flags;
data->rsize = NFS_MAX_FILE_IO_SIZE; data->rsize = NFS_MAX_FILE_IO_SIZE;
data->wsize = NFS_MAX_FILE_IO_SIZE; data->wsize = NFS_MAX_FILE_IO_SIZE;
data->acregmin = NFS_DEF_ACREGMIN; data->acregmin = NFS_DEF_ACREGMIN;
data->acregmax = NFS_DEF_ACREGMAX; data->acregmax = NFS_DEF_ACREGMAX;
data->acdirmin = NFS_DEF_ACDIRMIN; data->acdirmin = NFS_DEF_ACDIRMIN;
data->acdirmax = NFS_DEF_ACDIRMAX; data->acdirmax = NFS_DEF_ACDIRMAX;
data->mount_server.port = NFS_UNSPEC_PORT;
data->nfs_server.port = NFS_UNSPEC_PORT; data->nfs_server.port = NFS_UNSPEC_PORT;
data->nfs_server.protocol = XPRT_TRANSPORT_TCP;
data->auth_flavors[0] = RPC_AUTH_UNIX; data->auth_flavors[0] = RPC_AUTH_UNIX;
data->auth_flavor_len = 1; data->auth_flavor_len = 1;
data->version = version;
data->minorversion = 0; data->minorversion = 0;
} }
return data; return data;
@ -1711,8 +1713,6 @@ static int nfs_validate_mount_data(void *options,
if (!(data->flags & NFS_MOUNT_TCP)) if (!(data->flags & NFS_MOUNT_TCP))
args->nfs_server.protocol = XPRT_TRANSPORT_UDP; args->nfs_server.protocol = XPRT_TRANSPORT_UDP;
else
args->nfs_server.protocol = XPRT_TRANSPORT_TCP;
/* N.B. caller will free nfs_server.hostname in all cases */ /* N.B. caller will free nfs_server.hostname in all cases */
args->nfs_server.hostname = kstrdup(data->hostname, GFP_KERNEL); args->nfs_server.hostname = kstrdup(data->hostname, GFP_KERNEL);
args->namlen = data->namlen; args->namlen = data->namlen;
@ -2106,7 +2106,7 @@ static int nfs_get_sb(struct file_system_type *fs_type,
}; };
int error = -ENOMEM; int error = -ENOMEM;
data = nfs_alloc_parsed_mount_data(NFS_MOUNT_VER3 | NFS_MOUNT_TCP); data = nfs_alloc_parsed_mount_data(3);
mntfh = kzalloc(sizeof(*mntfh), GFP_KERNEL); mntfh = kzalloc(sizeof(*mntfh), GFP_KERNEL);
if (data == NULL || mntfh == NULL) if (data == NULL || mntfh == NULL)
goto out_free_fh; goto out_free_fh;
@ -2376,7 +2376,6 @@ static int nfs4_validate_mount_data(void *options,
if (data == NULL) if (data == NULL)
goto out_no_data; goto out_no_data;
args->version = 4;
switch (data->version) { switch (data->version) {
case 1: case 1:
if (data->host_addrlen > sizeof(args->nfs_server.address)) if (data->host_addrlen > sizeof(args->nfs_server.address))
@ -2660,7 +2659,7 @@ static int nfs4_get_sb(struct file_system_type *fs_type,
struct nfs_parsed_mount_data *data; struct nfs_parsed_mount_data *data;
int error = -ENOMEM; int error = -ENOMEM;
data = nfs_alloc_parsed_mount_data(0); data = nfs_alloc_parsed_mount_data(4);
if (data == NULL) if (data == NULL)
goto out_free_data; goto out_free_data;