summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/ata.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index c2a02cb03c..523b080ec8 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -204,6 +204,7 @@ int ata_read_sectors(unsigned long start,
buf = inbuf;
count = incount;
while (TIME_BEFORE(current_tick, timeout)) {
+ ret = 0;
if ( count == 256 )
ATA_NSECTOR = 0; /* 0 means 256 sectors */
@@ -276,15 +277,14 @@ int ata_read_sectors(unsigned long start,
ret = -3;
goto retry;
}
-
- ret = 0;
break;
}
led(false);
mutex_unlock(&ata_mtx);
- if ( delayed_write )
+ /* only flush if reading went ok */
+ if ( (ret == 0) && delayed_write )
ata_flush();
return ret;
@@ -373,7 +373,8 @@ int ata_write_sectors(unsigned long start,
mutex_unlock(&ata_mtx);
- if ( delayed_write )
+ /* only flush if writing went ok */
+ if ( (ret == 0) && delayed_write )
ata_flush();
return ret;