svn commit: r268626 - in vendor-sys/illumos/dist/uts/common/fs/zfs: . sys

Xin LI delphij at FreeBSD.org
Mon Jul 14 18:02:37 UTC 2014


Author: delphij
Date: Mon Jul 14 18:02:36 2014
New Revision: 268626
URL: http://svnweb.freebsd.org/changeset/base/268626

Log:
  4951 ZFS administrative commands should use reserved space, not fail with ENOSPC (fix call)
  
  Approved by: Christopher Siden <christopher.siden at delphix.com>
  
  illumos/illumos-gate at c39f2c8cacf297ec37acd421f4c4fec127991995

Modified:
  vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_pool.c
  vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa.h

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_pool.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_pool.c	Mon Jul 14 17:54:36 2014	(r268625)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/dsl_pool.c	Mon Jul 14 18:02:36 2014	(r268626)
@@ -612,17 +612,12 @@ dsl_pool_adjustedsize(dsl_pool_t *dp, bo
 	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;
 

Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa.h	Mon Jul 14 17:54:36 2014	(r268625)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa.h	Mon Jul 14 18:02:36 2014	(r268626)
@@ -739,6 +739,7 @@ extern spa_load_state_t spa_load_state(s
 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);


More information about the svn-src-all mailing list