On Mon, Jul 11, 2011 at 10:19:29PM +1000, David Gwynne wrote:
> now that we know if the blocks under a disk are not in the order
> the os uses them, we dont have to bother sorting io.
> 
> ok?

ok krw@

.... Ken

> 
> Index: sd.c
> ===================================================================
> RCS file: /cvs/src/sys/scsi/sd.c,v
> retrieving revision 1.235
> diff -u -p -r1.235 sd.c
> --- sd.c      11 Jul 2011 06:26:09 -0000      1.235
> +++ sd.c      11 Jul 2011 12:17:40 -0000
> @@ -163,7 +163,7 @@ sdattach(struct device *parent, struct d
>       int sd_autoconf = scsi_autoconf | SCSI_SILENT |
>           SCSI_IGNORE_ILLEGAL_REQUEST | SCSI_IGNORE_MEDIA_CHANGE;
>       struct dk_cache dkc;
> -     int error, result;
> +     int error, result, sortby = BUFQ_DEFAULT;
>  
>       SC_DEBUG(sc_link, SDEV_DB2, ("sdattach:\n"));
>  
> @@ -174,12 +174,6 @@ sdattach(struct device *parent, struct d
>       sc_link->interpret_sense = sd_interpret_sense;
>       sc_link->device_softc = sc;
>  
> -     /*
> -      * Initialize disk structures.
> -      */
> -     sc->sc_dk.dk_name = sc->sc_dev.dv_xname;
> -     bufq_init(&sc->sc_bufq, BUFQ_DEFAULT);
> -
>       if ((sc_link->flags & SDEV_ATAPI) && (sc_link->flags & SDEV_REMOVABLE))
>               sc_link->quirks |= SDEV_NOSYNCCACHE;
>  
> @@ -233,8 +227,10 @@ sdattach(struct device *parent, struct d
>                   sc->sc_dev.dv_xname,
>                   dp->disksize / (1048576 / dp->secsize), dp->secsize,
>                   dp->disksize);
> -             if (ISSET(sc->flags, SDF_THIN))
> +             if (ISSET(sc->flags, SDF_THIN)) {
> +                     sortby = BUFQ_FIFO;
>                       printf(", thin");
> +             }
>               printf("\n");
>               break;
>  
> @@ -248,6 +244,15 @@ sdattach(struct device *parent, struct d
>  #endif
>       }
>  
> +     /*
> +      * Initialize disk structures.
> +      */
> +     sc->sc_dk.dk_name = sc->sc_dev.dv_xname;
> +     bufq_init(&sc->sc_bufq, sortby);
> +
> +     /*
> +      * Enable write cache by default.
> +      */
>       memset(&dkc, 0, sizeof(dkc));
>       if (sd_ioctl_cache(sc, DIOCGCACHE, &dkc) == 0 && dkc.wrcache == 0) {
>               dkc.wrcache = 1;

Reply via email to