Print this page
4012 Upper limit of zfs set bounds check for refreservation on volumes is too low
@@ -780,10 +780,12 @@
uint64_t spa_version;
char *p;
zfs_prop_t resv_prop;
char *strval;
char msg[1024];
+ uint64_t volblocksize;
+ int ncopies;
if (p = strchr(argv[0], '/'))
*p = '\0';
zpool_handle = zpool_open(g_zfs, argv[0]);
if (p != NULL)
@@ -802,11 +804,22 @@
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);
+ if (nvlist_lookup_string(real_props,
+ zfs_prop_to_name(ZFS_PROP_COPIES), &strval) == 0)
+ ncopies = atoi(strval);
+ else
+ ncopies = 1;
+ if (nvlist_lookup_uint64(real_props,
+ zfs_prop_to_name(ZFS_PROP_VOLBLOCKSIZE),
+ &volblocksize) != 0)
+ volblocksize = ZVOL_DEFAULT_BLOCKSIZE;
+
+ volsize = zvol_volsize_to_reservation_impl(volsize,
+ volblocksize, ncopies);
nvlist_free(real_props);
if (nvlist_lookup_string(props, zfs_prop_to_name(resv_prop),
&strval) != 0) {
if (nvlist_add_uint64(props,