Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Oct 2014 21:59:11 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r273345 - stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201410202159.s9KLxBko026838@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: delphij
Date: Mon Oct 20 21:59:11 2014
New Revision: 273345
URL: https://svnweb.freebsd.org/changeset/base/273345

Log:
  MFC r272510: MFV r272498:
  
  Add a new sysctl, vfs.zfs.vol.unmap_enabled, which allows the system
  administrator to toggle whether ZFS should ignore UNMAP requests.
  
  Illumos issue:
      5149 zvols need a way to ignore DKIOCFREE

Modified:
  stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c	Mon Oct 20 21:57:24 2014	(r273344)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c	Mon Oct 20 21:59:11 2014	(r273345)
@@ -168,6 +168,14 @@ static LIST_HEAD(, zvol_state) all_zvols
  */
 int zvol_maxphys = DMU_MAX_ACCESS/2;
 
+/*
+ * Toggle unmap functionality.
+ */
+boolean_t zvol_unmap_enabled = B_TRUE;
+SYSCTL_INT(_vfs_zfs_vol, OID_AUTO, unmap_enabled, CTLFLAG_RWTUN,
+    &zvol_unmap_enabled, 0,
+    "Enable UNMAP functionality");
+
 static d_open_t		zvol_d_open;
 static d_close_t	zvol_d_close;
 static d_read_t		zvol_read;
@@ -1972,6 +1980,9 @@ zvol_ioctl(dev_t dev, int cmd, intptr_t 
 		dkioc_free_t df;
 		dmu_tx_t *tx;
 
+		if (!zvol_unmap_enabled)
+			break;
+
 		if (ddi_copyin((void *)arg, &df, sizeof (df), flag)) {
 			error = SET_ERROR(EFAULT);
 			break;
@@ -2816,6 +2827,9 @@ zvol_d_ioctl(struct cdev *dev, u_long cm
 		zil_commit(zv->zv_zilog, ZVOL_OBJ);
 		break;
 	case DIOCGDELETE:
+		if (!zvol_unmap_enabled)
+			break;
+
 		offset = ((off_t *)data)[0];
 		length = ((off_t *)data)[1];
 		if ((offset % DEV_BSIZE) != 0 || (length % DEV_BSIZE) != 0 ||



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410202159.s9KLxBko026838>