svn commit: r326779 - stable/11/sys/cam/scsi
Alan Somers
asomers at FreeBSD.org
Mon Dec 11 20:30:59 UTC 2017
Author: asomers
Date: Mon Dec 11 20:30:58 2017
New Revision: 326779
URL: https://svnweb.freebsd.org/changeset/base/326779
Log:
MFC r326036:
da(4): Short-circuit unnecessary BIO_FLUSH commands
sys/cam/scsi/scsi_da.c
Complete BIO_FLUSH commands immediately if the da(4) device hasn't
been written to since the last flush. If we haven't written to the
device, there is no reason to send a flush.
Submitted by: gibbs
Reviewed by: imp
Sponsored by: Spectra Logic Corp
Differential Revision: https://reviews.freebsd.org/D13106
Modified:
stable/11/sys/cam/scsi/scsi_da.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/cam/scsi/scsi_da.c
==============================================================================
--- stable/11/sys/cam/scsi/scsi_da.c Mon Dec 11 20:24:29 2017 (r326778)
+++ stable/11/sys/cam/scsi/scsi_da.c Mon Dec 11 20:30:58 2017 (r326779)
@@ -2994,6 +2994,18 @@ more:
}
case BIO_FLUSH:
/*
+ * If we don't support sync cache, or the disk
+ * isn't dirty, FLUSH is a no-op. Use the
+ * allocated * CCB for the next bio if one is
+ * available.
+ */
+ if ((softc->quirks & DA_Q_NO_SYNC_CACHE) != 0 ||
+ (softc->flags & DA_FLAG_DIRTY) == 0) {
+ biodone(bp);
+ goto skipstate;
+ }
+
+ /*
* BIO_FLUSH doesn't currently communicate
* range data, so we synchronize the cache
* over the whole disk. We also force
@@ -3008,6 +3020,15 @@ more:
/*lb_count*/0,
SSD_FULL_SIZE,
da_default_timeout*1000);
+ /*
+ * Clear the dirty flag before sending the command.
+ * Either this sync cache will be successful, or it
+ * will fail after a retry. If it fails, it is
+ * unlikely to be successful if retried later, so
+ * we'll save ourselves time by just marking the
+ * device clean.
+ */
+ softc->flags &= ~DA_FLAG_DIRTY;
break;
case BIO_ZONE: {
int error, queue_ccb;
More information about the svn-src-stable
mailing list