svn commit: r216230 -
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Ivan Voras
ivoras at FreeBSD.org
Mon Dec 6 12:18:03 UTC 2010
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
More information about the svn-src-head
mailing list