Re: [Repost] IDE error 2.6.7-rc3-mm2 and 2.6.8-rc1-mm1

From: Jens Axboe
Date: Thu Jul 22 2004 - 12:39:51 EST


On Thu, Jul 22 2004, Tabris wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Jul 21 03:00:18 tabriel kernel: hda: drive_cmd: status=0x51 { DriveReady
> SeekComplete Error }
> Jul 21 03:00:18 tabriel kernel: hda: drive_cmd: error=0x04 {
> DriveStatusError }
> Jul 21 03:00:18 tabriel kernel: ide: failed opcode was: 0xe7
> Jul 21 03:00:23 tabriel kernel: hda: drive_cmd: status=0x51 { DriveReady
> SeekComplete Error }
> Jul 21 03:00:23 tabriel kernel: hda: drive_cmd: error=0x04 {
> DriveStatusError }
> Jul 21 03:00:23 tabriel kernel: ide: failed opcode was: 0xe7
> Jul 21 03:00:28 tabriel kernel: hda: drive_cmd: status=0x51 { DriveReady
> SeekComplete Error }
> Jul 21 03:00:28 tabriel kernel: hda: drive_cmd: error=0x04 {
> DriveStatusError }
> Jul 21 03:00:28 tabriel kernel: ide: failed opcode was: 0xe7
>
> This error did not occur in 2.6.6-rc3-mm2. Turning off ACPI made no
> difference, not that I expected one.
>
> It appears to be harmless but it's polluting my syslog.
>
> Appears related to
> http://marc.theaimsgroup.com/?l=linux-kernel&m=108946389700930
>
> None of my harddrives are over 60GiB (and hda is an 8GiB), so there's
> no reason i should be getting LBA48 Flush Cache.
>
> What should I do, what do you need from me to get to the bottom of
> this?

Does this work?

--- /opt/kernel/linux-2.6.8-rc1-mm1/drivers/ide/ide-disk.c 2004-07-22 13:37:09.751485758 -0200
+++ linux-2.6.8-rc1-mm1/drivers/ide/ide-disk.c 2004-07-22 13:37:52.812593031 -0200
@@ -1248,7 +1248,8 @@

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;
--- /opt/kernel/linux-2.6.8-rc1-mm1/drivers/ide/ide-io.c 2004-07-22 13:37:09.756486583 -0200
+++ linux-2.6.8-rc1-mm1/drivers/ide/ide-io.c 2004-07-22 13:38:23.807708802 -0200
@@ -67,7 +67,8 @@
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;
}


--
Jens Axboe

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/