Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/ata Really implement WDF_DIRTY. patch(1) did somethi...



details:   https://anonhg.NetBSD.org/src/rev/4527aa4e5c30
branches:  trunk
changeset: 455598:4527aa4e5c30
user:      bouyer <bouyer%NetBSD.org@localhost>
date:      Sun Apr 07 13:00:00 2019 +0000

description:
Really implement WDF_DIRTY. patch(1) did something silly here ...

diffstat:

 sys/dev/ata/wd.c |  15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diffs (58 lines):

diff -r 08d0458d0b7e -r 4527aa4e5c30 sys/dev/ata/wd.c
--- a/sys/dev/ata/wd.c  Sun Apr 07 12:23:54 2019 +0000
+++ b/sys/dev/ata/wd.c  Sun Apr 07 13:00:00 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: wd.c,v 1.448 2019/04/05 21:31:44 bouyer Exp $ */
+/*     $NetBSD: wd.c,v 1.449 2019/04/07 13:00:00 bouyer Exp $ */
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.  All rights reserved.
@@ -54,7 +54,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.448 2019/04/05 21:31:44 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.449 2019/04/07 13:00:00 bouyer Exp $");
 
 #include "opt_ata.h"
 #include "opt_wd.h"
@@ -719,8 +719,12 @@
 
        if (wd->sc_flags & WDF_LBA)
                xfer->c_bio.flags |= ATA_LBA;
-       if (bp->b_flags & B_READ)
+       if (bp->b_flags & B_READ) {
                xfer->c_bio.flags |= ATA_READ;
+       } else {
+               /* it's a write */
+               wd->sc_flags |= WDF_DIRTY;
+       }
        if (bp->b_flags & B_MEDIA_FUA) {
                /* If not using NCQ, the command WRITE DMA FUA EXT is LBA48 */
                KASSERT((wd->sc_flags & WDF_LBA48) != 0);
@@ -1144,7 +1148,8 @@
 
        KASSERTMSG(bufq_peek(wd->sc_dksc.sc_bufq) == NULL, "bufq not empty");
 
-       wd_flushcache(wd, AT_WAIT, false);
+       if (wd->sc_flags & WDF_DIRTY)
+               wd_flushcache(wd, AT_WAIT, false);
 
        wd->atabus->ata_delref(wd->drvp);
        wd->sc_flags &= ~WDF_OPEN;
@@ -1847,6 +1852,7 @@
                error = EIO;
                goto out_xfer;
        }
+       wd->sc_flags &= ~WDF_DIRTY;
        error = 0;
 
 out_xfer:
@@ -2235,7 +2241,6 @@
 
                atachannel_debug(wd->drvp->chnl_softc);
        }
-       wd->sc_flags &= ~WDF_DIRTY;
        return 0;
 }
 #endif /* ATADEBUG */



Home | Main Index | Thread Index | Old Index