svn commit: r289405 - head/sys/ufs/ffs

Warner Losh imp at FreeBSD.org
Fri Oct 16 03:06:04 UTC 2015


Author: imp
Date: Fri Oct 16 03:06:02 2015
New Revision: 289405
URL: https://svnweb.freebsd.org/changeset/base/289405

Log:
  Do not relocate extents to make them contiguous if the underlying drive can do
  deletions. Ability to do deletions is a strong indication that this
  optimization will not help performance. It will only generate extra write
  traffic. These devices are typically flash based and have a limited number of
  write cycles. In addition, making the file contiguous in LBA space doesn't
  improve the access times from flash devices because they have no seek time.
  
  Reviewed by: mckusick@

Modified:
  head/sys/ufs/ffs/ffs_alloc.c

Modified: head/sys/ufs/ffs/ffs_alloc.c
==============================================================================
--- head/sys/ufs/ffs/ffs_alloc.c	Fri Oct 16 03:03:04 2015	(r289404)
+++ head/sys/ufs/ffs/ffs_alloc.c	Fri Oct 16 03:06:02 2015	(r289405)
@@ -481,9 +481,19 @@ ffs_reallocblks(ap)
 		struct cluster_save *a_buflist;
 	} */ *ap;
 {
+	struct ufsmount *ump;
 
-	if (doreallocblks == 0)
+	/*
+	 * If the underlying device can do deletes, then skip reallocating
+	 * the blocks of this file into contiguous sequences. Devices that
+	 * benefit from BIO_DELETE also benefit from not moving the data.
+	 * These devices are flash and therefore work less well with this
+	 * optimization. Also skip if reallocblks has been disabled globally.
+	 */
+	ump = VTOI(ap->a_vp)->i_ump;
+	if (ump->um_candelete || doreallocblks == 0)
 		return (ENOSPC);
+
 	/*
 	 * We can't wait in softdep prealloc as it may fsync and recurse
 	 * here.  Instead we simply fail to reallocate blocks if this
@@ -492,7 +502,7 @@ ffs_reallocblks(ap)
 	if (DOINGSOFTDEP(ap->a_vp))
 		if (softdep_prealloc(ap->a_vp, MNT_NOWAIT) != 0)
 			return (ENOSPC);
-	if (VTOI(ap->a_vp)->i_ump->um_fstype == UFS1)
+	if (ump->um_fstype == UFS1)
 		return (ffs_reallocblks_ufs1(ap));
 	return (ffs_reallocblks_ufs2(ap));
 }


More information about the svn-src-head mailing list