MFV r247180: Update vendor/illumos/dist and vendor-sys/illumos/dist
to illumos-gate 13967:92bec6d87f59 Illumos ZFS issues: 3557 dumpvp_size is not updated correctly when a dump zvol's size is changed 3558 setting the volsize on a dump device does not return back ENOSPC 3559 setting a volsize larger than the space available sometimes succeeds
This commit is contained in:
commit
9a975c8c7b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=289499
@ -845,10 +845,12 @@ zfs_do_create(int argc, char **argv)
|
|||||||
|
|
||||||
if (type == ZFS_TYPE_VOLUME && !noreserve) {
|
if (type == ZFS_TYPE_VOLUME && !noreserve) {
|
||||||
zpool_handle_t *zpool_handle;
|
zpool_handle_t *zpool_handle;
|
||||||
|
nvlist_t *real_props;
|
||||||
uint64_t spa_version;
|
uint64_t spa_version;
|
||||||
char *p;
|
char *p;
|
||||||
zfs_prop_t resv_prop;
|
zfs_prop_t resv_prop;
|
||||||
char *strval;
|
char *strval;
|
||||||
|
char msg[1024];
|
||||||
|
|
||||||
if (p = strchr(argv[0], '/'))
|
if (p = strchr(argv[0], '/'))
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
@ -864,7 +866,15 @@ zfs_do_create(int argc, char **argv)
|
|||||||
resv_prop = ZFS_PROP_REFRESERVATION;
|
resv_prop = ZFS_PROP_REFRESERVATION;
|
||||||
else
|
else
|
||||||
resv_prop = ZFS_PROP_RESERVATION;
|
resv_prop = ZFS_PROP_RESERVATION;
|
||||||
volsize = zvol_volsize_to_reservation(volsize, props);
|
|
||||||
|
(void) snprintf(msg, sizeof (msg),
|
||||||
|
gettext("cannot create '%s'"), argv[0]);
|
||||||
|
if (props && (real_props = zfs_valid_proplist(g_zfs, type,
|
||||||
|
props, 0, NULL, msg)) == NULL)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
volsize = zvol_volsize_to_reservation(volsize, real_props);
|
||||||
|
nvlist_free(real_props);
|
||||||
|
|
||||||
if (nvlist_lookup_string(props, zfs_prop_to_name(resv_prop),
|
if (nvlist_lookup_string(props, zfs_prop_to_name(resv_prop),
|
||||||
&strval) != 0) {
|
&strval) != 0) {
|
||||||
|
@ -1403,6 +1403,7 @@ zfs_add_synthetic_resv(zfs_handle_t *zhp, nvlist_t *nvl)
|
|||||||
uint64_t old_reservation;
|
uint64_t old_reservation;
|
||||||
uint64_t new_reservation;
|
uint64_t new_reservation;
|
||||||
zfs_prop_t resv_prop;
|
zfs_prop_t resv_prop;
|
||||||
|
nvlist_t *props;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If this is an existing volume, and someone is setting the volsize,
|
* If this is an existing volume, and someone is setting the volsize,
|
||||||
@ -1412,16 +1413,25 @@ zfs_add_synthetic_resv(zfs_handle_t *zhp, nvlist_t *nvl)
|
|||||||
if (zfs_which_resv_prop(zhp, &resv_prop) < 0)
|
if (zfs_which_resv_prop(zhp, &resv_prop) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
old_reservation = zfs_prop_get_int(zhp, resv_prop);
|
old_reservation = zfs_prop_get_int(zhp, resv_prop);
|
||||||
if ((zvol_volsize_to_reservation(old_volsize, zhp->zfs_props) !=
|
|
||||||
old_reservation) || nvlist_lookup_uint64(nvl,
|
props = fnvlist_alloc();
|
||||||
zfs_prop_to_name(resv_prop), &new_reservation) != ENOENT) {
|
fnvlist_add_uint64(props, zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE),
|
||||||
|
zfs_prop_get_int(zhp, ZFS_PROP_VOLBLOCKSIZE));
|
||||||
|
|
||||||
|
if ((zvol_volsize_to_reservation(old_volsize, props) !=
|
||||||
|
old_reservation) || nvlist_exists(nvl,
|
||||||
|
zfs_prop_to_name(resv_prop))) {
|
||||||
|
fnvlist_free(props);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
if (nvlist_lookup_uint64(nvl, zfs_prop_to_name(ZFS_PROP_VOLSIZE),
|
if (nvlist_lookup_uint64(nvl, zfs_prop_to_name(ZFS_PROP_VOLSIZE),
|
||||||
&new_volsize) != 0)
|
&new_volsize) != 0) {
|
||||||
|
fnvlist_free(props);
|
||||||
return (-1);
|
return (-1);
|
||||||
new_reservation = zvol_volsize_to_reservation(new_volsize,
|
}
|
||||||
zhp->zfs_props);
|
new_reservation = zvol_volsize_to_reservation(new_volsize, props);
|
||||||
|
fnvlist_free(props);
|
||||||
|
|
||||||
if (nvlist_add_uint64(nvl, zfs_prop_to_name(resv_prop),
|
if (nvlist_add_uint64(nvl, zfs_prop_to_name(resv_prop),
|
||||||
new_reservation) != 0) {
|
new_reservation) != 0) {
|
||||||
(void) no_memory(zhp->zfs_hdl);
|
(void) no_memory(zhp->zfs_hdl);
|
||||||
|
Loading…
Reference in New Issue
Block a user