* Create a client RPC handle for doing FSSTAT with UNIX auth only
         * - RFC 2623, sec 2.3.2
         */
-       error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX, 0, 0);
+       error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX,
+                                     0, data->flags & NFS_MOUNT_NORESVPORT);
        if (error < 0)
                goto error;
        nfs_mark_client_ready(clp, NFS_CS_READY);
 static int nfs4_init_client(struct nfs_client *clp,
                const struct rpc_timeout *timeparms,
                const char *ip_addr,
-               rpc_authflavor_t authflavour)
+               rpc_authflavor_t authflavour,
+               int flags)
 {
        int error;
 
        clp->rpc_ops = &nfs_v4_clientops;
 
        error = nfs_create_rpc_client(clp, timeparms, authflavour,
-                                     1, 0);
+                                     1, flags & NFS_MOUNT_NORESVPORT);
        if (error < 0)
                goto error;
        memcpy(clp->cl_ipaddr, ip_addr, sizeof(clp->cl_ipaddr));
                error = PTR_ERR(clp);
                goto error;
        }
-       error = nfs4_init_client(clp, timeparms, ip_addr, authflavour);
+       error = nfs4_init_client(clp, timeparms, ip_addr, authflavour,
+                                       server->flags);
        if (error < 0)
                goto error_put;
 
 
        Opt_acl, Opt_noacl,
        Opt_rdirplus, Opt_nordirplus,
        Opt_sharecache, Opt_nosharecache,
+       Opt_resvport, Opt_noresvport,
 
        /* Mount options that take integer arguments */
        Opt_port,
        { Opt_nordirplus, "nordirplus" },
        { Opt_sharecache, "sharecache" },
        { Opt_nosharecache, "nosharecache" },
+       { Opt_resvport, "resvport" },
+       { Opt_noresvport, "noresvport" },
 
        { Opt_port, "port=%u" },
        { Opt_rsize, "rsize=%u" },
                { NFS_MOUNT_NONLM, ",nolock", "" },
                { NFS_MOUNT_NOACL, ",noacl", "" },
                { NFS_MOUNT_NORDIRPLUS, ",nordirplus", "" },
-               { NFS_MOUNT_UNSHARED, ",nosharecache", ""},
+               { NFS_MOUNT_UNSHARED, ",nosharecache", "" },
+               { NFS_MOUNT_NORESVPORT, ",noresvport", "" },
                { 0, NULL, NULL }
        };
        const struct proc_nfs_info *nfs_infop;
                case Opt_nosharecache:
                        mnt->flags |= NFS_MOUNT_UNSHARED;
                        break;
+               case Opt_resvport:
+                       mnt->flags &= ~NFS_MOUNT_NORESVPORT;
+                       break;
+               case Opt_noresvport:
+                       mnt->flags |= NFS_MOUNT_NORESVPORT;
+                       break;
 
                /*
                 * options that take numeric values
 
        char            context[NFS_MAX_CONTEXT_LEN + 1];       /* 6 */
 };
 
-/* bits in the flags field */
+/* bits in the flags field visible to user space */
 
 #define NFS_MOUNT_SOFT         0x0001  /* 1 */
 #define NFS_MOUNT_INTR         0x0002  /* 1 */ /* now unused, but ABI */
 /* The following are for internal use only */
 #define NFS_MOUNT_LOOKUP_CACHE_NONEG   0x10000
 #define NFS_MOUNT_LOOKUP_CACHE_NONE    0x20000
+#define NFS_MOUNT_NORESVPORT           0x40000
 
 #endif