Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Oct 2018 15:14:22 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r339329 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201810121514.w9CFEM96089474@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Fri Oct 12 15:14:22 2018
New Revision: 339329
URL: https://svnweb.freebsd.org/changeset/base/339329

Log:
  Add ZIO_TYPE_FREE support for indirect vdevs.
  
  Upstream code expects only ZIO_TYPE_READ and some ZIO_TYPE_WRITE
  requests to removed (indirect) vdevs, while on FreeBSD there is also
  ZIO_TYPE_FREE (TRIM).  ZIO_TYPE_FREE requests do not have the data
  buffers, so don't need the pointer adjustment.
  
  PR:		228750, 229007
  Reviewed by:	allanjude, sef
  Approved by:	re (kib)
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D17523

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_indirect.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_indirect.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_indirect.c	Fri Oct 12 13:01:17 2018	(r339328)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_indirect.c	Fri Oct 12 15:14:22 2018	(r339329)
@@ -1147,6 +1147,9 @@ vdev_indirect_child_io_done(zio_t *zio)
 	pio->io_error = zio_worst_error(pio->io_error, zio->io_error);
 	mutex_exit(&pio->io_lock);
 
+#ifdef __FreeBSD__
+	if (zio->io_abd != NULL)
+#endif
 	abd_put(zio->io_abd);
 }
 
@@ -1262,8 +1265,12 @@ vdev_indirect_io_start(zio_t *zio)
 	zio->io_vsd_ops = &vdev_indirect_vsd_ops;
 
 	ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0);
+#ifdef __FreeBSD__
+	if (zio->io_type == ZIO_TYPE_WRITE) {
+#else
 	if (zio->io_type != ZIO_TYPE_READ) {
 		ASSERT3U(zio->io_type, ==, ZIO_TYPE_WRITE);
+#endif
 		/*
 		 * Note: this code can handle other kinds of writes,
 		 * but we don't expect them.
@@ -1295,6 +1302,9 @@ vdev_indirect_io_start(zio_t *zio)
 		ASSERT3P(list_next(&iv->iv_splits, first), ==, NULL);
 		zio_nowait(zio_vdev_child_io(zio, zio->io_bp,
 		    first->is_vdev, first->is_target_offset,
+#ifdef __FreeBSD__
+		    zio->io_abd == NULL ? NULL :
+#endif
 		    abd_get_offset(zio->io_abd, 0),
 		    zio->io_size, zio->io_type, zio->io_priority, 0,
 		    vdev_indirect_child_io_done, zio));
@@ -1321,6 +1331,9 @@ vdev_indirect_io_start(zio_t *zio)
 			    is != NULL; is = list_next(&iv->iv_splits, is)) {
 				zio_nowait(zio_vdev_child_io(zio, NULL,
 				    is->is_vdev, is->is_target_offset,
+#ifdef __FreeBSD__
+				    zio->io_abd == NULL ? NULL :
+#endif
 				    abd_get_offset(zio->io_abd,
 				    is->is_split_offset),
 				    is->is_size, zio->io_type,



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