diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 9c1a960f5b94d12ae4f6190ed99e116e73b2e6bb..de424d2f3155aacb23110edbf9bd60e05ca1eef5 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -1214,9 +1214,6 @@ static int nfs_parse_mount_options(char *raw,
 		}
 	}
 
-	nfs_set_port((struct sockaddr *)&mnt->nfs_server.address,
-				mnt->nfs_server.port);
-
 	return 1;
 
 out_nomem:
@@ -1568,6 +1565,9 @@ static int nfs_validate_mount_data(void *options,
 						&args->nfs_server.address))
 			goto out_no_address;
 
+		nfs_set_port((struct sockaddr *)&args->nfs_server.address,
+				args->nfs_server.port);
+
 		nfs_set_mount_transport_protocol(args);
 
 		status = nfs_parse_devname(dev_name,
@@ -2197,6 +2197,9 @@ static int nfs4_validate_mount_data(void *options,
 						&args->nfs_server.address))
 			return -EINVAL;
 
+		nfs_set_port((struct sockaddr *)&args->nfs_server.address,
+				args->nfs_server.port);
+
 		nfs_validate_transport_protocol(args);
 
 		switch (args->auth_flavor_len) {