]> granicus.if.org Git - zfs/commitdiff
Illumos 4951 - ZFS administrative commands (fix)
authorChristopher Siden <chris@delphix.com>
Tue, 4 Nov 2014 17:35:37 +0000 (09:35 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 4 May 2015 16:41:10 +0000 (09:41 -0700)
4951 ZFS administrative commands should use reserved space, not fail with ENOSPC
Approved by: Christopher Siden <christopher.siden@delphix.com>

References:
  https://www.illumos.org/issues/4951
  https://github.com/illumos/illumos-gate/commit/c39f2c8

Ported by: Brian Behlendorf <behlendorf1@llnl.gov>

include/sys/spa.h
module/zfs/dsl_pool.c

index ea43713a44fa0381ed564c69ae13d22ba5d61e94..13cbbf98b566f3da6cf5db8a482d27fe360faff7 100644 (file)
@@ -786,6 +786,7 @@ extern spa_load_state_t spa_load_state(spa_t *spa);
 extern uint64_t spa_freeze_txg(spa_t *spa);
 extern uint64_t spa_get_asize(spa_t *spa, uint64_t lsize);
 extern uint64_t spa_get_dspace(spa_t *spa);
+extern uint64_t spa_get_slop_space(spa_t *spa);
 extern void spa_update_dspace(spa_t *spa);
 extern uint64_t spa_version(spa_t *spa);
 extern boolean_t spa_deflate(spa_t *spa);
index 717dfbe9f6a0012851c35e71cc82c3118b79039e..fe1a4d8b771aa4d26167561c01dabbccddf277b0 100644 (file)
@@ -612,17 +612,12 @@ dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree)
        uint64_t space, resv;
 
        /*
-        * Reserve about 1.6% (1/64), or at least 32MB, for allocation
-        * efficiency.
-        * XXX The intent log is not accounted for, so it must fit
-        * within this slop.
-        *
         * If we're trying to assess whether it's OK to do a free,
         * cut the reservation in half to allow forward progress
         * (e.g. make it possible to rm(1) files from a full pool).
         */
        space = spa_get_dspace(dp->dp_spa);
-       resv = MAX(space >> 6, SPA_MINDEVSIZE >> 1);
+       resv = spa_get_slop_space(dp->dp_spa);
        if (netfree)
                resv >>= 1;