Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Dec 2010 12:18:03 +0000 (UTC)
From:      Ivan Voras <ivoras@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r216230 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201012061218.oB6CI3oW032770@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ivoras
Date: Mon Dec  6 12:18:02 2010
New Revision: 216230
URL: http://svn.freebsd.org/changeset/base/216230

Log:
  Use GEOM stripesize field when calculating ashift. This will enable correct
  alignment on drives with large sector sizes (e.g. 4 KiB) but the
  implementation might need to be revisited if devices with large stripesizes
  appear (e.g. if RAID controllers or flash drives start using the field),
  probably by introducing a physsectorsize field in GEOM providers.
  
  Discussed with: mav, mostly silence on freebsd-geom@ and freebsd-fs@

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

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Mon Dec  6 11:37:24 2010	(r216229)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Mon Dec  6 12:18:02 2010	(r216230)
@@ -496,7 +496,10 @@ vdev_geom_open(vdev_t *vd, uint64_t *psi
 	/*
 	 * Determine the device's minimum transfer size.
 	 */
-	*ashift = highbit(MAX(pp->sectorsize, SPA_MINBLOCKSIZE)) - 1;
+	if (pp->stripesize > pp->sectorsize)
+		*ashift = highbit(MIN(pp->stripesize, SPA_MAXBLOCKSIZE)) - 1;
+	else
+		*ashift = highbit(MAX(pp->sectorsize, SPA_MINBLOCKSIZE)) - 1;
 
 	/*
 	 * Clear the nowritecache bit, so that on a vdev_reopen() we will



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