mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
3745 zpool create should treat -O mountpoint and -m the same 3811 zpool create -o altroot=/xyz -O mountpoint=/mnt ignores the mountpoint option Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Christopher Siden <christopher.siden@delphix.com> References: https://www.illumos.org/issues/3745 https://www.illumos.org/issues/3811 illumos/illumos-gate@8b71377531 Ported-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #1775
This commit is contained in:
parent
d09f25dc66
commit
7bc7f25040
@ -831,6 +831,7 @@ zpool_do_create(int argc, char **argv)
|
|||||||
goto errout;
|
goto errout;
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
|
/* Equivalent to -O mountpoint=optarg */
|
||||||
mountpoint = optarg;
|
mountpoint = optarg;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
@ -869,8 +870,18 @@ zpool_do_create(int argc, char **argv)
|
|||||||
*propval = '\0';
|
*propval = '\0';
|
||||||
propval++;
|
propval++;
|
||||||
|
|
||||||
if (add_prop_list(optarg, propval, &fsprops, B_FALSE))
|
/*
|
||||||
|
* Mountpoints are checked and then added later.
|
||||||
|
* Uniquely among properties, they can be specified
|
||||||
|
* more than once, to avoid conflict with -m.
|
||||||
|
*/
|
||||||
|
if (0 == strcmp(optarg,
|
||||||
|
zfs_prop_to_name(ZFS_PROP_MOUNTPOINT))) {
|
||||||
|
mountpoint = propval;
|
||||||
|
} else if (add_prop_list(optarg, propval, &fsprops,
|
||||||
|
B_FALSE)) {
|
||||||
goto errout;
|
goto errout;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ':':
|
case ':':
|
||||||
(void) fprintf(stderr, gettext("missing argument for "
|
(void) fprintf(stderr, gettext("missing argument for "
|
||||||
@ -987,6 +998,18 @@ zpool_do_create(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now that the mountpoint's validity has been checked, ensure that
|
||||||
|
* the property is set appropriately prior to creating the pool.
|
||||||
|
*/
|
||||||
|
if (mountpoint != NULL) {
|
||||||
|
ret = add_prop_list(zfs_prop_to_name(ZFS_PROP_MOUNTPOINT),
|
||||||
|
mountpoint, &fsprops, B_FALSE);
|
||||||
|
if (ret != 0)
|
||||||
|
goto errout;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
if (dryrun) {
|
if (dryrun) {
|
||||||
/*
|
/*
|
||||||
* For a dry run invocation, print out a basic message and run
|
* For a dry run invocation, print out a basic message and run
|
||||||
@ -1021,21 +1044,19 @@ zpool_do_create(int argc, char **argv)
|
|||||||
if (nvlist_exists(props, propname))
|
if (nvlist_exists(props, propname))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (add_prop_list(propname, ZFS_FEATURE_ENABLED,
|
ret = add_prop_list(propname,
|
||||||
&props, B_TRUE) != 0)
|
ZFS_FEATURE_ENABLED, &props, B_TRUE);
|
||||||
|
if (ret != 0)
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
if (zpool_create(g_zfs, poolname,
|
if (zpool_create(g_zfs, poolname,
|
||||||
nvroot, props, fsprops) == 0) {
|
nvroot, props, fsprops) == 0) {
|
||||||
zfs_handle_t *pool = zfs_open(g_zfs, poolname,
|
zfs_handle_t *pool = zfs_open(g_zfs, poolname,
|
||||||
ZFS_TYPE_FILESYSTEM);
|
ZFS_TYPE_FILESYSTEM);
|
||||||
if (pool != NULL) {
|
if (pool != NULL) {
|
||||||
if (mountpoint != NULL)
|
|
||||||
verify(zfs_prop_set(pool,
|
|
||||||
zfs_prop_to_name(
|
|
||||||
ZFS_PROP_MOUNTPOINT),
|
|
||||||
mountpoint) == 0);
|
|
||||||
if (zfs_mount(pool, NULL, 0) == 0)
|
if (zfs_mount(pool, NULL, 0) == 0)
|
||||||
ret = zfs_shareall(pool);
|
ret = zfs_shareall(pool);
|
||||||
zfs_close(pool);
|
zfs_close(pool);
|
||||||
|
@ -1159,7 +1159,6 @@ zpool_create(libzfs_handle_t *hdl, const char *pool, nvlist_t *nvroot,
|
|||||||
nvlist_t *zc_fsprops = NULL;
|
nvlist_t *zc_fsprops = NULL;
|
||||||
nvlist_t *zc_props = NULL;
|
nvlist_t *zc_props = NULL;
|
||||||
char msg[1024];
|
char msg[1024];
|
||||||
char *altroot;
|
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
(void) snprintf(msg, sizeof (msg), dgettext(TEXT_DOMAIN,
|
(void) snprintf(msg, sizeof (msg), dgettext(TEXT_DOMAIN,
|
||||||
@ -1260,21 +1259,6 @@ zpool_create(libzfs_handle_t *hdl, const char *pool, nvlist_t *nvroot,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* If this is an alternate root pool, then we automatically set the
|
|
||||||
* mountpoint of the root dataset to be '/'.
|
|
||||||
*/
|
|
||||||
if (nvlist_lookup_string(props, zpool_prop_to_name(ZPOOL_PROP_ALTROOT),
|
|
||||||
&altroot) == 0) {
|
|
||||||
zfs_handle_t *zhp;
|
|
||||||
|
|
||||||
verify((zhp = zfs_open(hdl, pool, ZFS_TYPE_DATASET)) != NULL);
|
|
||||||
verify(zfs_prop_set(zhp, zfs_prop_to_name(ZFS_PROP_MOUNTPOINT),
|
|
||||||
"/") == 0);
|
|
||||||
|
|
||||||
zfs_close(zhp);
|
|
||||||
}
|
|
||||||
|
|
||||||
create_failed:
|
create_failed:
|
||||||
zcmd_free_nvlists(&zc);
|
zcmd_free_nvlists(&zc);
|
||||||
nvlist_free(zc_props);
|
nvlist_free(zc_props);
|
||||||
|
Loading…
Reference in New Issue
Block a user