svn commit: r267118 - in head/sys/cam: ata scsi

Warner Losh imp at FreeBSD.org
Thu Jun 5 17:13:43 UTC 2014


Author: imp
Date: Thu Jun  5 17:13:42 2014
New Revision: 267118
URL: http://svnweb.freebsd.org/changeset/base/267118

Log:
  The code that combines adjacent ranges for BIO_DELETEs to optimize
  trims to the device assumes the list is sorted. Don't apply the
  optimization of not sorting the queue when we have SSDs to the
  delete_queue, since it causes more discard traffic to the drive. While
  one could argue that the higher levels should coalesce the trims,
  that's not done today, so some optimization at this level is needed.
  
  CR: https://phabric.freebsd.org/D142

Modified:
  head/sys/cam/ata/ata_da.c
  head/sys/cam/scsi/scsi_da.c

Modified: head/sys/cam/ata/ata_da.c
==============================================================================
--- head/sys/cam/ata/ata_da.c	Thu Jun  5 16:03:55 2014	(r267117)
+++ head/sys/cam/ata/ata_da.c	Thu Jun  5 17:13:42 2014	(r267118)
@@ -729,10 +729,7 @@ adastrategy(struct bio *bp)
 	 */
 	if (bp->bio_cmd == BIO_DELETE &&
 	    (softc->flags & ADA_FLAG_CAN_TRIM)) {
-		if (ADA_SIO)
-		    bioq_disksort(&softc->trim_queue, bp);
-		else
-		    bioq_insert_tail(&softc->trim_queue, bp);
+		bioq_disksort(&softc->trim_queue, bp);
 	} else {
 		if (ADA_SIO)
 		    bioq_disksort(&softc->bio_queue, bp);

Modified: head/sys/cam/scsi/scsi_da.c
==============================================================================
--- head/sys/cam/scsi/scsi_da.c	Thu Jun  5 16:03:55 2014	(r267117)
+++ head/sys/cam/scsi/scsi_da.c	Thu Jun  5 17:13:42 2014	(r267118)
@@ -1383,10 +1383,7 @@ dastrategy(struct bio *bp)
 	 * Place it in the queue of disk activities for this disk
 	 */
 	if (bp->bio_cmd == BIO_DELETE) {
-		if (DA_SIO)
-			bioq_disksort(&softc->delete_queue, bp);
-		else
-			bioq_insert_tail(&softc->delete_queue, bp);
+		bioq_disksort(&softc->delete_queue, bp);
 	} else if (DA_SIO) {
 		bioq_disksort(&softc->bio_queue, bp);
 	} else {
@@ -2805,16 +2802,9 @@ cmd6workaround(union ccb *ccb)
 				  da_delete_method_desc[old_method],
 				  da_delete_method_desc[softc->delete_method]);
 
-		if (DA_SIO) {
-			while ((bp = bioq_takefirst(&softc->delete_run_queue))
-			    != NULL)
-				bioq_disksort(&softc->delete_queue, bp);
-		} else {
-			while ((bp = bioq_takefirst(&softc->delete_run_queue))
-			    != NULL)
-				bioq_insert_tail(&softc->delete_queue, bp);
-		}
-		bioq_insert_tail(&softc->delete_queue,
+		while ((bp = bioq_takefirst(&softc->delete_run_queue)) != NULL)
+			bioq_disksort(&softc->delete_queue, bp);
+		bioq_disksort(&softc->delete_queue,
 		    (struct bio *)ccb->ccb_h.ccb_bp);
 		ccb->ccb_h.ccb_bp = NULL;
 		return (0);


More information about the svn-src-all mailing list