Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Nov 2017 21:14:22 +0100
From:      "Ronald Klop" <ronald-lists@klop.ws>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org, "Alan Somers" <asomers@freebsd.org>
Subject:   Re: svn commit: r326036 - head/sys/cam/scsi
Message-ID:  <op.y92k58c9kndu52@klop.ws>
In-Reply-To: <201711202227.vAKMRYvW001932@repo.freebsd.org>
References:  <201711202227.vAKMRYvW001932@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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@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@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?op.y92k58c9kndu52>