NFS: Save the values of the "mount*=" mount options
authorChuck Lever <chuck.lever@oracle.com>
Fri, 14 Mar 2008 18:10:30 +0000 (14:10 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 19 Mar 2008 22:00:22 +0000 (18:00 -0400)
Save the value of the mountproto= mountport= mountvers= and mountaddr=
options so that these values can be displayed later via
nfs_show_options().

This preserves the intent of the original mount options, should the file
system need to be remounted based on what's displayed in /proc/mounts.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Cc: Miklos Szeredi <miklos@szeredi.hu>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/client.c
include/linux/nfs_fs_sb.h

index 874018113d0e2411d08d98c5e868671a0a8d2ec6..93dfd75aba7ccee4282f32a876a1326dcaab2b05 100644 (file)
@@ -688,6 +688,16 @@ static int nfs_init_server(struct nfs_server *server,
        if (error < 0)
                goto error;
 
+       /* Preserve the values of mount_server-related mount options */
+       if (data->mount_server.addrlen) {
+               memcpy(&server->mountd_address, &data->mount_server.address,
+                       data->mount_server.addrlen);
+               server->mountd_addrlen = data->mount_server.addrlen;
+       }
+       server->mountd_version = data->mount_server.version;
+       server->mountd_port = data->mount_server.port;
+       server->mountd_protocol = data->mount_server.protocol;
+
        server->namelen  = data->namlen;
        /* Create a client RPC handle for the NFSv3 ACL management interface */
        nfs_init_server_aclclient(server);
index 670e5c7222d0eb79ced523f9566a1c857e51d52f..ac7e4fb943eacfbd5027a6e36e3154909d0b9e0f 100644 (file)
@@ -118,6 +118,13 @@ struct nfs_server {
 
        atomic_t active; /* Keep trace of any activity to this server */
        wait_queue_head_t active_wq;  /* Wait for any activity to stop  */
+
+       /* mountd-related mount options */
+       struct sockaddr_storage mountd_address;
+       size_t                  mountd_addrlen;
+       u32                     mountd_version;
+       unsigned short          mountd_port;
+       unsigned short          mountd_protocol;
 };
 
 /* Server capabilities */