Subject: [patch ide-dev 6/9] check capacity in ide_task_init_flush()


Use WIN_FLUSH_CACHE_EXT only if disk requires LBA48.

diff -Nru a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
--- a/drivers/ide/ide-io.c 2005-02-23 20:58:16 +01:00
+++ b/drivers/ide/ide-io.c 2005-02-23 20:58:16 +01:00
@@ -61,7 +61,8 @@

memset(task, 0, sizeof(*task));

- if (ide_id_has_flush_cache_ext(drive->id)) {
+ if (ide_id_has_flush_cache_ext(drive->id) &&
+ (drive->capacity64 >= (1UL << 28))) {
tf->command = WIN_FLUSH_CACHE_EXT;
tf->flags |= ATA_TFLAG_LBA48;
} else


2005-03-04 09:00:27

by Chuck Ebbert

[permalink] [raw]
Subject: Re: [patch ide-dev 6/9] check capacity in ide_task_init_flush()

On Thu, 24 Feb 2005 at 15:44:34, Bartlomiej Zolnierkiewicz wrote:

> --- a/drivers/ide/ide-io.c 2005-02-23 20:58:16 +01:00
> +++ b/drivers/ide/ide-io.c 2005-02-23 20:58:16 +01:00
> @@ -61,7 +61,8 @@
>
> memset(task, 0, sizeof(*task));
>
> - if (ide_id_has_flush_cache_ext(drive->id)) {
> + if (ide_id_has_flush_cache_ext(drive->id) &&
> + (drive->capacity64 >= (1UL << 28))) {
^^
------------------------------>||

> tf->command = WIN_FLUSH_CACHE_EXT;
> tf->flags |= ATA_TFLAG_LBA48;
> } else

Shouldn't that be ">" ???

Either that or this code from ide-disk is wrong:

/* limit drive capacity to 137GB if LBA48 cannot be used */
if (drive->addressing == 0 && drive->capacity64 > 1ULL << 28) {
printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
"%llu sectors (%llu MB)\n",
drive->name, (unsigned long long)drive->capacity64,
sectors_to_MB(drive->capacity64));
drive->capacity64 = 1ULL << 28;
}


--
Chuck