summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason King <jason.king@joyent.com>2018-12-20 05:34:12 +0000
committerJason King <jason.king@joyent.com>2020-03-20 06:21:16 +0000
commit0cfca8f32c95345186f446eb25fa58e7c89ef276 (patch)
tree9dd8788c8fb84ba5e2faf48f0cd92769c4c40c56
parent007f77c7d800323cdf03f3e1650b71b85ae67eb5 (diff)
downloadillumos-joyent-zfs-alias.tar.gz
Rebase + updates & fixeszfs-alias
-rw-r--r--usr/src/cmd/zonecfg/zonecfg_lex.l2
-rw-r--r--usr/src/lib/libzfs/Makefile7
-rw-r--r--usr/src/uts/common/brand/lx/os/lx_brand.c2
-rw-r--r--usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h1
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_ioctl.c43
5 files changed, 22 insertions, 33 deletions
diff --git a/usr/src/cmd/zonecfg/zonecfg_lex.l b/usr/src/cmd/zonecfg/zonecfg_lex.l
index db6da387e5..ef7045b902 100644
--- a/usr/src/cmd/zonecfg/zonecfg_lex.l
+++ b/usr/src/cmd/zonecfg/zonecfg_lex.l
@@ -58,7 +58,7 @@ extern void yyerror(char *s);
static char *create_token(char *s);
%}
-%a 8000
+%a 9000
%p 5500
%e 2000
%n 1000
diff --git a/usr/src/lib/libzfs/Makefile b/usr/src/lib/libzfs/Makefile
index 12cf832a36..e6e877d733 100644
--- a/usr/src/lib/libzfs/Makefile
+++ b/usr/src/lib/libzfs/Makefile
@@ -22,7 +22,7 @@
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-# ident "%Z%%M% %I% %E% SMI"
+# Copyright 2018, Joyent, Inc.
#
include ../Makefile.lib
@@ -34,6 +34,9 @@ HDRDIR= common
SUBDIRS= $(MACH)
$(BUILD64)SUBDIRS += $(MACH64)
+TYPECHECK_LIB= libzfs.so.1
+TYPELIST= zfs_cmd_t
+
all := TARGET= all
clean := TARGET= clean
clobber := TARGET= clobber
@@ -51,7 +54,7 @@ $(POFILE): pofile_MSGFILES
install_h: $(ROOTHDRS)
-check: $(CHECKHDRS)
+check: $(CHECKHDRS) $(TYPECHECK)
_msg: $(MSGDOMAINPOFILE)
diff --git a/usr/src/uts/common/brand/lx/os/lx_brand.c b/usr/src/uts/common/brand/lx/os/lx_brand.c
index 34f2f4f945..f5ee7b4e8f 100644
--- a/usr/src/uts/common/brand/lx/os/lx_brand.c
+++ b/usr/src/uts/common/brand/lx/os/lx_brand.c
@@ -1032,7 +1032,7 @@ lx_zone_get_zvols(zone_t *zone, ldi_handle_t lh, minor_t *emul_minor)
KM_SLEEP);
rc = zone_dataset_alias_inzone(zc->zc_name,
- zv->lzd_name, MAXPATHLEN, zone);
+ zc->zc_name, MAXPATHLEN, zone);
if (rc != 0)
continue;
diff --git a/usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h b/usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h
index 9947bedf54..0084bdfb95 100644
--- a/usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h
+++ b/usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h
@@ -467,6 +467,7 @@ typedef struct zfs_cmd {
uint64_t zc_fromobj;
uint64_t zc_createtxg;
zfs_stat_t zc_stat;
+ uint64_t zc_dataset; /* internal to zfs */
} zfs_cmd_t;
typedef struct zfs_useracct {
diff --git a/usr/src/uts/common/fs/zfs/zfs_ioctl.c b/usr/src/uts/common/fs/zfs/zfs_ioctl.c
index ef850131db..916c1aae0f 100644
--- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c
+++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c
@@ -375,7 +375,7 @@ zfs_unalias_poolname(zfs_cmd_t *zc, nvlist_t **innvl, cred_t *cr)
if (zc->zc_name[0] == '\0')
return (0);
- zc->zc_action_handle = 0;
+ zc->zc_dataset = 0;
/*
* First look for any straight-through zone dataset entries that mean
@@ -392,14 +392,7 @@ zfs_unalias_poolname(zfs_cmd_t *zc, nvlist_t **innvl, cred_t *cr)
len = (ptr - zd->zd_dataset);
if (bcmp(zc->zc_name, zd->zd_dataset, len) == 0 &&
strlen(zc->zc_name) == len) {
- /*
- * Stash the zone_dataset_t that matches in the
- * zfs_cmd_t, so that we can pull it back out later in
- * zfs_alias_poolname. The zc_action_handle field is
- * never used by any pool-related ioctls (only by
- * IOC_RECV), so overwriting it should be ok.
- */
- zc->zc_action_handle = (uint64_t)((uintptr_t)zd);
+ zc->zc_dataset = (uint64_t)(uintptr_t)zd;
return (0);
}
}
@@ -412,7 +405,7 @@ zfs_unalias_poolname(zfs_cmd_t *zc, nvlist_t **innvl, cred_t *cr)
len = strlen(zd->zd_alias);
if (bcmp(zc->zc_name, zd->zd_alias, len) == 0
&& strlen(zc->zc_name) == len) {
- zc->zc_action_handle = (uint64_t)((uintptr_t)zd);
+ zc->zc_dataset = (uint64_t)(uintptr_t)zd;
(void) strcpy(zc->zc_name, zd->zd_dataset);
ptr = strchr(zc->zc_name, '/');
if (ptr != NULL)
@@ -555,15 +548,11 @@ zfs_alias_poolname(zfs_cmd_t *zc, nvlist_t **innvl, nvlist_t **outnvl,
if (zc->zc_name[0] == '\0')
return (0);
- /*
- * We stashed the pointer to the zone_dataset_t in the zc_action_handle
- * member back in zfs_unalias_poolname.
- */
- zd = (zone_dataset_t *)((uintptr_t)zc->zc_action_handle);
+ zd = (zone_dataset_t *)(uintptr_t)zc->zc_dataset;
VERIFY(zd != NULL);
/* Zero it so we don't leak the pointer back to userland. */
- zc->zc_action_handle = 0;
+ zc->zc_dataset = 0;
if (zd->zd_alias == NULL)
return (0);
@@ -2262,11 +2251,7 @@ zfs_ioc_pool_stats(zfs_cmd_t *zc)
* aliases as needed.
*/
if (config != NULL && !INGLOBALZONE(curproc)) {
- /*
- * We stashed the pointer to the zone_dataset_t in the
- * zc_action_handle member back in zfs_unalias_poolname.
- */
- zd = (zone_dataset_t *)((uintptr_t)zc->zc_action_handle);
+ zd = (zone_dataset_t *)(uintptr_t)zc->zc_dataset;
if (zd == NULL)
return (EINVAL);
@@ -3704,11 +3689,7 @@ zfs_ioc_pool_get_props(zfs_cmd_t *zc)
nvlist_lookup_nvlist(nvp, "name", &prop) == 0) {
zone_dataset_t *zd;
- /*
- * We stashed the pointer to the zone_dataset_t in the
- * zc_action_handle member back in zfs_unalias_poolname.
- */
- zd = (zone_dataset_t *)((uintptr_t)zc->zc_action_handle);
+ zd = (zone_dataset_t *)(uintptr_t)zc->zc_dataset;
if (zd == NULL)
return (EINVAL);
@@ -7279,6 +7260,7 @@ zfs_ioctl_init(void)
zfs_ioctl_register("remap", ZFS_IOC_REMAP,
zfs_ioc_remap, zfs_secpolicy_remap, DATASET_NAME,
+ zfs_unalias_dsname, zfs_alias_dsname,
POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_FALSE, B_TRUE);
zfs_ioctl_register("destroy_snaps", ZFS_IOC_DESTROY_SNAPS,
@@ -7321,21 +7303,24 @@ zfs_ioctl_init(void)
POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE);
zfs_ioctl_register("channel_program", ZFS_IOC_CHANNEL_PROGRAM,
- zfs_ioc_channel_program, zfs_secpolicy_config,
- POOL_NAME, POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE,
- B_TRUE);
+ zfs_ioc_channel_program, zfs_secpolicy_config, POOL_NAME,
+ zfs_unalias_poolname, zfs_alias_poolname,
+ POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE);
zfs_ioctl_register("zpool_checkpoint", ZFS_IOC_POOL_CHECKPOINT,
zfs_ioc_pool_checkpoint, zfs_secpolicy_config, POOL_NAME,
+ zfs_unalias_poolname, zfs_alias_poolname,
POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE);
zfs_ioctl_register("zpool_discard_checkpoint",
ZFS_IOC_POOL_DISCARD_CHECKPOINT, zfs_ioc_pool_discard_checkpoint,
zfs_secpolicy_config, POOL_NAME,
+ zfs_unalias_poolname, zfs_alias_poolname,
POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE);
zfs_ioctl_register("initialize", ZFS_IOC_POOL_INITIALIZE,
zfs_ioc_pool_initialize, zfs_secpolicy_config, POOL_NAME,
+ zfs_unalias_poolname, zfs_alias_poolname,
POOL_CHECK_SUSPENDED | POOL_CHECK_READONLY, B_TRUE, B_TRUE);
zfs_ioctl_register("trim", ZFS_IOC_POOL_TRIM,