diff options
author | Tejun Heo <tj@kernel.org> | 2010-04-05 10:33:13 +0900 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2010-04-06 10:55:33 -0400 |
commit | 445d211b0da4e9a6e6d576edff85085c2aaf53df (patch) | |
tree | 039ade5b49cb0bbd388babc369f28f541c76ec96 /include/linux/libata.h | |
parent | 68b0ddb289220b6d4d865be128939663be34959d (diff) | |
download | op-kernel-dev-445d211b0da4e9a6e6d576edff85085c2aaf53df.zip op-kernel-dev-445d211b0da4e9a6e6d576edff85085c2aaf53df.tar.gz |
libata: unlock HPA if device shrunk
Some BIOSes don't configure HPA during boot but do so while resuming.
This causes harddrives to shrink during resume making libata detach
and reattach them. This can be worked around by unlocking HPA if old
size equals native size.
Add ATA_DFLAG_UNLOCK_HPA so that HPA unlocking can be controlled
per-device and update ata_dev_revalidate() such that it sets
ATA_DFLAG_UNLOCK_HPA and fails with -EIO when the above condition is
detected.
This patch fixes the following bug.
https://bugzilla.kernel.org/show_bug.cgi?id=15396
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Oleksandr Yermolenko <yaa.bta@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'include/linux/libata.h')
-rw-r--r-- | include/linux/libata.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h index f8ea71e..b2f2003 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h @@ -146,6 +146,7 @@ enum { ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */ ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */ ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */ + ATA_DFLAG_UNLOCK_HPA = (1 << 18), /* unlock HPA */ ATA_DFLAG_INIT_MASK = (1 << 24) - 1, ATA_DFLAG_DETACH = (1 << 24), |