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:
parent
4fb8e1965f
commit
a715e58b8c
@ -845,10 +845,12 @@ zfs_do_create(int argc, char **argv)
|
||||
|
||||
if (type == ZFS_TYPE_VOLUME && !noreserve) {
|
||||
zpool_handle_t *zpool_handle;
|
||||
nvlist_t *real_props;
|
||||
uint64_t spa_version;
|
||||
char *p;
|
||||
zfs_prop_t resv_prop;
|
||||
char *strval;
|
||||
char msg[1024];
|
||||
|
||||
if (p = strchr(argv[0], '/'))
|
||||
*p = '\0';
|
||||
@ -864,7 +866,15 @@ zfs_do_create(int argc, char **argv)
|
||||
resv_prop = ZFS_PROP_REFRESERVATION;
|
||||
else
|
||||
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),
|
||||
&strval) != 0) {
|
||||
|
@ -1403,6 +1403,7 @@ zfs_add_synthetic_resv(zfs_handle_t *zhp, nvlist_t *nvl)
|
||||
uint64_t old_reservation;
|
||||
uint64_t new_reservation;
|
||||
zfs_prop_t resv_prop;
|
||||
nvlist_t *props;
|
||||
|
||||
/*
|
||||
* 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)
|
||||
return (-1);
|
||||
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,
|
||||
zfs_prop_to_name(resv_prop), &new_reservation) != ENOENT) {
|
||||
|
||||
props = fnvlist_alloc();
|
||||
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);
|
||||
}
|
||||
if (nvlist_lookup_uint64(nvl, zfs_prop_to_name(ZFS_PROP_VOLSIZE),
|
||||
&new_volsize) != 0)
|
||||
&new_volsize) != 0) {
|
||||
fnvlist_free(props);
|
||||
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),
|
||||
new_reservation) != 0) {
|
||||
(void) no_memory(zhp->zfs_hdl);
|
||||
|
Loading…
Reference in New Issue
Block a user