svn commit: r326036 - head/sys/cam/scsi

Alan Somers asomers at freebsd.org
Wed Nov 22 16:16:59 UTC 2017


I believe the original motivation was to reduce FLUSH CACHE EXT
activity with some old SSDs that handled that command very slowly.
gibbs might know more.

On Tue, Nov 21, 2017 at 1:14 PM, Ronald Klop <ronald-lists at klop.ws> wrote:
> Out of curiosity, What is the use case which this improves? Does happen in
> daily usage or mostly in testing?
>
> Regards,
> Ronald.
>
>
>
> On Mon, 20 Nov 2017 23:27:34 +0100, Alan Somers <asomers at freebsd.org> wrote:
>
>> Author: asomers
>> Date: Mon Nov 20 22:27:33 2017
>> New Revision: 326036
>> URL: https://svnweb.freebsd.org/changeset/base/326036
>>
>> Log:
>>   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
>>   MFC after:    3 weeks
>>   Sponsored by: Spectra Logic Corp
>>   Differential Revision:        https://reviews.freebsd.org/D13106
>>
>> Modified:
>>   head/sys/cam/scsi/scsi_da.c
>>
>> Modified: head/sys/cam/scsi/scsi_da.c
>>
>> ==============================================================================
>> --- head/sys/cam/scsi/scsi_da.c Mon Nov 20 22:18:24 2017        (r326035)
>> +++ head/sys/cam/scsi/scsi_da.c Mon Nov 20 22:27:33 2017        (r326036)
>> @@ -3038,6 +3038,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
>> @@ -3052,6 +3064,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;
>> _______________________________________________
>> svn-src-all at freebsd.org mailing list
>> https://lists.freebsd.org/mailman/listinfo/svn-src-all
>> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"


More information about the svn-src-all mailing list