From: Jens Axboe <axboe@suse.de>

-ENOCHANGELOG

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/ide/ide-disk.c |    6 +++---
 25-akpm/drivers/ide/ide-io.c   |    3 ++-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff -puN drivers/ide/ide-disk.c~barrier-flushing-fix drivers/ide/ide-disk.c
--- 25/drivers/ide/ide-disk.c~barrier-flushing-fix	2004-07-27 00:48:31.824364096 -0700
+++ 25-akpm/drivers/ide/ide-disk.c	2004-07-27 00:48:31.830363184 -0700
@@ -1217,7 +1217,8 @@ static int idedisk_issue_flush(request_q
 
 	memset(rq->cmd, 0, sizeof(rq->cmd));
 
-	if ((drive->id->cfs_enable_2 & 0x2400) == 0x2400)
+	if (ide_id_has_flush_cache_ext(drive->id) &&
+	    (drive->capacity64 >= (1UL << 28)))
 		rq->cmd[0] = WIN_FLUSH_CACHE_EXT;
 	else
 		rq->cmd[0] = WIN_FLUSH_CACHE;
@@ -1585,9 +1586,8 @@ static void idedisk_setup (ide_drive_t *
 	 * properly. We can safely support FLUSH_CACHE on lba48, if capacity
 	 * doesn't exceed lba28
 	 */
-	barrier = 1;
+	barrier = ide_id_has_flush_cache(id);
 	if (drive->addressing == 1) {
-		barrier = ide_id_has_flush_cache(id);
 		if (capacity > (1ULL << 28) && !ide_id_has_flush_cache_ext(id))
 			barrier = 0;
 	}
diff -puN drivers/ide/ide-io.c~barrier-flushing-fix drivers/ide/ide-io.c
--- 25/drivers/ide/ide-io.c~barrier-flushing-fix	2004-07-27 00:48:31.825363944 -0700
+++ 25-akpm/drivers/ide/ide-io.c	2004-07-27 00:48:31.831363032 -0700
@@ -67,7 +67,8 @@ static void ide_fill_flush_cmd(ide_drive
 	rq->buffer = buf;
 	rq->buffer[0] = WIN_FLUSH_CACHE;
 
-	if (ide_id_has_flush_cache_ext(drive->id))
+	if (ide_id_has_flush_cache_ext(drive->id) &&
+	    (drive->capacity64 >= (1UL << 28)))
 		rq->buffer[0] = WIN_FLUSH_CACHE_EXT;
 }
 
_