Print this page
NEX-15279 support NFS server in zone
NEX-15520 online NFS shares cause zoneadm halt to hang in nfs_export_zone_fini
Portions contributed by: Dan Kruchinin dan.kruchinin@nexenta.com
Portions contributed by: Stepan Zastupov stepan.zastupov@gmail.com
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>

@@ -16,18 +16,25 @@
  * fields enclosed by brackets "[]" replaced with your own identifying
  * information: Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
  */
+
 /*
  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
- *
+ */
+
+/*
  * Copyright (c) 1983,1984,1985,1986,1987,1988,1989  AT&T.
  * All rights reserved.
  */
 
+/*
+ * Copyright 2018 Nexenta Systems, Inc.
+ */
+
 #include <sys/types.h>
 #include <rpc/types.h>
 #include <sys/systm.h>
 #include <sys/vfs.h>
 #include <sys/errno.h>

@@ -78,12 +85,10 @@
 int
 nfs_export(void *arg)
 {
         STRUCT_DECL(exportfs_args, ea);
 
-        if (!INGLOBALZONE(curproc))
-                return (set_errno(EPERM));
         STRUCT_INIT(ea, get_udatamodel());
         if (copyin(arg, STRUCT_BUF(ea), STRUCT_SIZE(ea)))
                 return (set_errno(EFAULT));
 
         return (exportfs(STRUCT_BUF(ea), get_udatamodel(), CRED()));

@@ -109,13 +114,10 @@
                  */
                 if (rfs4_client_clrst == NULL) {
                         break;
                 }
 
-                if (!INGLOBALZONE(curproc))
-                        return (set_errno(EPERM));
-
                 STRUCT_INIT(u_clr, get_udatamodel());
 
                 if (copyin(arg, STRUCT_BUF(u_clr), STRUCT_SIZE(u_clr)))
                         return (set_errno(EFAULT));
 

@@ -162,12 +164,10 @@
 
         case RDMA_SVC_INIT: {
                 struct rdma_svc_args rsa;
                 char netstore[20] = "tcp";
 
-                if (!INGLOBALZONE(curproc))
-                        return (set_errno(EPERM));
                 if (get_udatamodel() != DATAMODEL_NATIVE) {
                         STRUCT_DECL(rdma_svc_args, ursa);
 
                         STRUCT_INIT(ursa, get_udatamodel());
                         if (copyin(arg, STRUCT_BUF(ursa), STRUCT_SIZE(ursa)))

@@ -187,13 +187,10 @@
                 break;
         }
 
         case NFS_SVC: { /* NFS server daemon */
                 STRUCT_DECL(nfs_svc_args, nsa);
-
-                if (!INGLOBALZONE(curproc))
-                        return (set_errno(EPERM));
                 STRUCT_INIT(nsa, get_udatamodel());
 
                 if (copyin(arg, STRUCT_BUF(nsa), STRUCT_SIZE(nsa)))
                         return (set_errno(EFAULT));
 

@@ -207,12 +204,10 @@
         }
 
         case NFS_GETFH: { /* get a file handle */
                 STRUCT_DECL(nfs_getfh_args, nga);
 
-                if (!INGLOBALZONE(curproc))
-                        return (set_errno(EPERM));
                 STRUCT_INIT(nga, get_udatamodel());
                 if (copyin(arg, STRUCT_BUF(nga), STRUCT_SIZE(nga)))
                         return (set_errno(EFAULT));
 
                 error = nfs_getfh(STRUCT_BUF(nga), get_udatamodel(), CRED());