diff options
author | Jason King <jason.king@joyent.com> | 2018-12-20 05:34:12 +0000 |
---|---|---|
committer | Jason King <jason.king@joyent.com> | 2020-03-20 06:21:16 +0000 |
commit | 0cfca8f32c95345186f446eb25fa58e7c89ef276 (patch) | |
tree | 9dd8788c8fb84ba5e2faf48f0cd92769c4c40c56 | |
parent | 007f77c7d800323cdf03f3e1650b71b85ae67eb5 (diff) | |
download | illumos-joyent-zfs-alias.tar.gz |
Rebase + updates & fixeszfs-alias
-rw-r--r-- | usr/src/cmd/zonecfg/zonecfg_lex.l | 2 | ||||
-rw-r--r-- | usr/src/lib/libzfs/Makefile | 7 | ||||
-rw-r--r-- | usr/src/uts/common/brand/lx/os/lx_brand.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/sys/zfs_ioctl.h | 1 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_ioctl.c | 43 |
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, |