summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2016-12-20 12:56:57 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2016-12-20 12:56:57 +0000
commitb1fdc2e682407f4dc8c02732080d69266e914698 (patch)
treefa7b78ed029cf9c6efdd1b7158002e57075a4b54 /usr/src
parentc6b06866f0307cf67293572a1a0e1340fd19628a (diff)
parent540b2cc7a3cce4677bb918fec08d34cfd5f8c545 (diff)
downloadillumos-joyent-b1fdc2e682407f4dc8c02732080d69266e914698.tar.gz
[illumos-gate merge]
commit 540b2cc7a3cce4677bb918fec08d34cfd5f8c545 7670 c0 controller instance should be reserved for vhci commit cead1df3b072a636f2f644cb38b83059f9f01fe8 7662 assertion triggered in syseventd zfs_mod.so commit d3147737fcad3bbe69cbd5b065363137f4e61c52 7675 Python2.7 needs 5879-like exception_list fixes commit 1a444326de2cbc1063a0ec1465543edcf4a5a997 5032 share_nfs(1m): Documentation for "noaclfab" is needed
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/devfsadm/cfg_link.c9
-rw-r--r--usr/src/cmd/devfsadm/devfsadm.c8
-rw-r--r--usr/src/cmd/devfsadm/devfsadm.h8
-rw-r--r--usr/src/cmd/devfsadm/disk_link.c9
-rw-r--r--usr/src/cmd/devfsadm/mapfile-vers2
-rw-r--r--usr/src/cmd/devfsadm/sgen_link.c10
-rw-r--r--usr/src/cmd/syseventd/modules/zfs_mod/zfs_mod.c4
-rw-r--r--usr/src/man/man1m/share_nfs.1m11
-rw-r--r--usr/src/uts/common/nfs/export.h6
9 files changed, 46 insertions, 21 deletions
diff --git a/usr/src/cmd/devfsadm/cfg_link.c b/usr/src/cmd/devfsadm/cfg_link.c
index ce59039a75..ffdbc6d0af 100644
--- a/usr/src/cmd/devfsadm/cfg_link.c
+++ b/usr/src/cmd/devfsadm/cfg_link.c
@@ -20,6 +20,7 @@
*/
/*
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -177,7 +178,7 @@ scsi_cfg_creat_cb(di_minor_t minor, di_node_t node)
(void) strcat(path, mn);
di_devfs_path_free(devfs_path);
- if (devfsadm_enumerate_int(path, 1, &c_num, rules, 3)
+ if (ctrl_enumerate_int(path, 1, &c_num, rules, 3, 0, B_FALSE)
== DEVFSADM_FAILURE) {
/*
* Unlike the disks module we don't retry on failure.
@@ -226,7 +227,7 @@ usb_cfg_creat_cb(di_minor_t minor, di_node_t node)
(void) snprintf(path, sizeof (path), "%s:%s", cp, di_minor_name(minor));
di_devfs_path_free(cp);
- if (devfsadm_enumerate_int(path, 0, &cp, rules, 1)) {
+ if (ctrl_enumerate_int(path, 0, &cp, rules, 1, 0, B_FALSE)) {
return (DEVFSADM_CONTINUE);
}
@@ -263,7 +264,7 @@ sata_cfg_creat_cb(di_minor_t minor, di_node_t node)
di_devfs_path_free(devfspath);
/* build the physical path from the components */
- if (devfsadm_enumerate_int(path, 0, &buf, rules, 1) ==
+ if (ctrl_enumerate_int(path, 0, &buf, rules, 1, 0, B_FALSE) ==
DEVFSADM_FAILURE) {
return (DEVFSADM_CONTINUE);
}
@@ -297,7 +298,7 @@ sdcard_cfg_creat_cb(di_minor_t minor, di_node_t node)
di_devfs_path_free(devfspath);
/* build the physical path from the components */
- if (devfsadm_enumerate_int(path, 0, &buf, rules, 1) ==
+ if (ctrl_enumerate_int(path, 0, &buf, rules, 1, 0, B_FALSE) ==
DEVFSADM_FAILURE) {
return (DEVFSADM_CONTINUE);
}
diff --git a/usr/src/cmd/devfsadm/devfsadm.c b/usr/src/cmd/devfsadm/devfsadm.c
index 7d7904e9c0..6f2706c21a 100644
--- a/usr/src/cmd/devfsadm/devfsadm.c
+++ b/usr/src/cmd/devfsadm/devfsadm.c
@@ -21,6 +21,7 @@
/*
* Copyright 2016 Toomas Soome <tsoome@me.com>
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
*/
@@ -4845,11 +4846,12 @@ devfsadm_enumerate_int(char *devfs_path, int index, char **buf,
}
int
-disk_enumerate_int(char *devfs_path, int index, char **buf,
- devfsadm_enumerate_t rules[], int nrules)
+ctrl_enumerate_int(char *devfs_path, int index, char **buf,
+ devfsadm_enumerate_t rules[], int nrules, int multiple,
+ boolean_t scsi_vhci)
{
return (find_enum_id(rules, nrules,
- devfs_path, index, "0", INTEGER, buf, 1));
+ devfs_path, index, scsi_vhci ? "0" : "1", INTEGER, buf, multiple));
}
/*
diff --git a/usr/src/cmd/devfsadm/devfsadm.h b/usr/src/cmd/devfsadm/devfsadm.h
index 3d801f66db..ae630496f8 100644
--- a/usr/src/cmd/devfsadm/devfsadm.h
+++ b/usr/src/cmd/devfsadm/devfsadm.h
@@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
*/
#ifndef _DEVFSADM_H
@@ -231,10 +232,11 @@ void devfsadm_free_dev_names(char **dev_names, int len);
di_devlink_handle_t devfsadm_devlink_cache(void);
/*
- * Private enumerate interface for disks and sgen modules
+ * Private enumerate interface for controllers, disks, and sgen modules
*/
-int disk_enumerate_int(char *devfs_path, int index, char **buf,
- devfsadm_enumerate_t rules[], int nrules);
+int ctrl_enumerate_int(char *devfs_path, int index, char **buf,
+ devfsadm_enumerate_t rules[], int nrules,
+ int multiple, boolean_t scsi_vhci);
/*
* Private interfaces for ports module (port_link.c).
*/
diff --git a/usr/src/cmd/devfsadm/disk_link.c b/usr/src/cmd/devfsadm/disk_link.c
index 3e966ac6bd..c68cba8bea 100644
--- a/usr/src/cmd/devfsadm/disk_link.c
+++ b/usr/src/cmd/devfsadm/disk_link.c
@@ -657,6 +657,7 @@ diskctrl(di_node_t node, di_minor_t minor)
char path[PATH_MAX + 1];
char *devfspath;
char *buf, *mn;
+ boolean_t is_vhci;
devfsadm_enumerate_t rules[3] = {
{"^r?dsk$/^c([0-9]+)", 1, MATCH_PARENT},
@@ -677,9 +678,10 @@ diskctrl(di_node_t node, di_minor_t minor)
/*
* Use controller component of disk path
*/
- if (disk_enumerate_int(path, RULE_INDEX, &buf, rules, 3) ==
- DEVFSADM_MULTIPLE) {
+ is_vhci = (strncmp(path, "/scsi_vhci/", 11) == 0);
+ if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 1, is_vhci) ==
+ DEVFSADM_MULTIPLE) {
/*
* We failed because there are multiple logical controller
* numbers for a single physical controller. If we use node
@@ -694,7 +696,8 @@ diskctrl(di_node_t node, di_minor_t minor)
rules[0].flags = MATCH_NODE | MATCH_UNCACHED; /* disks */
rules[2].flags = MATCH_NODE | MATCH_UNCACHED; /* generic scsi */
- if (devfsadm_enumerate_int(path, RULE_INDEX, &buf, rules, 3)) {
+ if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 0,
+ is_vhci)) {
return (NULL);
}
}
diff --git a/usr/src/cmd/devfsadm/mapfile-vers b/usr/src/cmd/devfsadm/mapfile-vers
index 9c30e217de..ebb7593fb7 100644
--- a/usr/src/cmd/devfsadm/mapfile-vers
+++ b/usr/src/cmd/devfsadm/mapfile-vers
@@ -1,4 +1,5 @@
#
+# Copyright 2016 Nexenta Systems, Inc. All rights reserved.
# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
#
# CDDL HEADER START
@@ -39,6 +40,7 @@ $mapfile_version 2
# External interface requirements
SYMBOL_SCOPE {
global:
+ ctrl_enumerate_int { FLAGS = EXTERN };
devfsadm_devlink_cache { FLAGS = EXTERN };
devfsadm_enumerate_char_start { FLAGS = EXTERN };
devfsadm_enumerate_int { FLAGS = EXTERN };
diff --git a/usr/src/cmd/devfsadm/sgen_link.c b/usr/src/cmd/devfsadm/sgen_link.c
index 92289050ac..e4ffa3f8fd 100644
--- a/usr/src/cmd/devfsadm/sgen_link.c
+++ b/usr/src/cmd/devfsadm/sgen_link.c
@@ -19,6 +19,7 @@
* CDDL HEADER END
*/
/*
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -186,6 +187,7 @@ find_ctrlr(di_node_t node, di_minor_t minor)
char path[PATH_MAX + 1];
char *devfspath;
char *buf, *mn;
+ boolean_t is_vhci;
devfsadm_enumerate_t rules[3] = {
{"^r?dsk$/^c([0-9]+)", 1, MATCH_PARENT},
@@ -206,9 +208,10 @@ find_ctrlr(di_node_t node, di_minor_t minor)
/*
* Use controller (parent) component of device path
*/
- if (disk_enumerate_int(path, RULE_INDEX, &buf, rules, 3) ==
- DEVFSADM_MULTIPLE) {
+ is_vhci = (strncmp(path, "/scsi_vhci/", 11) == 0);
+ if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 1, is_vhci) ==
+ DEVFSADM_MULTIPLE) {
/*
* We failed because there are multiple logical controller
* numbers for a single physical controller. If we use node
@@ -222,7 +225,8 @@ find_ctrlr(di_node_t node, di_minor_t minor)
*/
rules[0].flags = MATCH_NODE | MATCH_UNCACHED; /* disks */
rules[2].flags = MATCH_NODE | MATCH_UNCACHED; /* generic scsi */
- if (devfsadm_enumerate_int(path, RULE_INDEX, &buf, rules, 3)) {
+ if (ctrl_enumerate_int(path, RULE_INDEX, &buf, rules, 3, 0,
+ is_vhci)) {
return (NULL);
}
}
diff --git a/usr/src/cmd/syseventd/modules/zfs_mod/zfs_mod.c b/usr/src/cmd/syseventd/modules/zfs_mod/zfs_mod.c
index dae69d1945..e98ee0c9b7 100644
--- a/usr/src/cmd/syseventd/modules/zfs_mod/zfs_mod.c
+++ b/usr/src/cmd/syseventd/modules/zfs_mod/zfs_mod.c
@@ -21,7 +21,7 @@
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012 by Delphix. All rights reserved.
- * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
*/
/*
@@ -822,6 +822,7 @@ slm_fini()
{
unavailpool_t *pool;
+ (void) thr_join(g_zfs_tid, NULL, NULL);
if (g_tpool != NULL) {
tpool_wait(g_tpool);
tpool_destroy(g_tpool);
@@ -831,7 +832,6 @@ slm_fini()
zpool_close(pool->uap_zhp);
free(pool);
}
- (void) thr_join(g_zfs_tid, NULL, NULL);
list_destroy(&g_pool_list);
libzfs_fini(g_zfshdl);
}
diff --git a/usr/src/man/man1m/share_nfs.1m b/usr/src/man/man1m/share_nfs.1m
index f19aec79b6..fbd6943ba8 100644
--- a/usr/src/man/man1m/share_nfs.1m
+++ b/usr/src/man/man1m/share_nfs.1m
@@ -21,8 +21,9 @@
.\"
.\" Copyright (C) 2008, Sun Microsystems, Inc. All Rights Reserved
.\" Copyright 2014 Nexenta Systems, Inc. All rights reserved.
+.\" Copyright 2016 Jason King.
.\"
-.Dd November 10, 2014
+.Dd December 16, 2016
.Dt SHARE_NFS 1M
.Os
.Sh NAME
@@ -157,6 +158,13 @@ is specified, the default values associated with the global tag in
.Pa /etc/nfs/nfslog.conf
are used. Support of NFS server logging is only available for NFS Version 2 and
Version 3 requests.
+.It Sy noaclfab
+By default, the NFS server will fabricate POSIX-draft style ACLs in response
+to ACL requests from NFS Version 2 or Version 3 clients accessing shared
+file systems that do not support POSIX-draft ACLs (such as ZFS).
+Specifying
+.Sy noaclfab
+disables this behavior.
.It Sy none Ns = Ns Ar access_list
Access is not allowed to any client that matches the access list. The exception
is when the access list is an asterisk (*), in which case
@@ -519,6 +527,7 @@ share -o uidmap=100:joe:@10.0.0.1 /export
.Xr getnetbyname 3SOCKET ,
.Xr netgroup 4 ,
.Xr nfslog.conf 4 ,
+.Xr acl 5 ,
.Xr attributes 5 ,
.Xr nfssec 5
.Sh NOTES
diff --git a/usr/src/uts/common/nfs/export.h b/usr/src/uts/common/nfs/export.h
index 66b86cdf8f..85f0476873 100644
--- a/usr/src/uts/common/nfs/export.h
+++ b/usr/src/uts/common/nfs/export.h
@@ -22,6 +22,7 @@
/*
* Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2016 Jason King.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
@@ -185,8 +186,9 @@ struct exportdata32 {
#endif /* VOLATILE_FH_TEST */
#define EX_CHARMAP 0x1000 /* NFS may need a character set conversion */
-#define EX_NOACLFAB 0x2000 /* If set, NFSv2 and v3 servers doesn't */
- /* fabricate ACL for VOP_GETSECATTR OTW call */
+#define EX_NOACLFAB 0x2000 /* If set, NFSv2 and v3 servers won't */
+ /* fabricate an aclent_t ACL on file systems */
+ /* that don't support aclent_t ACLs */
#ifdef _KERNEL