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-all
mailing list