libata: during revalidation, check n_sectors after device is configured
authorTejun Heo <htejun@gmail.com>
Mon, 14 May 2007 18:28:15 +0000 (03:28 +0900)
committerJeff Garzik <jeff@garzik.org>
Wed, 16 May 2007 05:18:30 +0000 (01:18 -0400)
commit6ddcd3b0201a7ad72294347636d2b4028ddbd95d
treeef2d28ea1775693f632705ebe71ad3e451cd69f1
parentfe30911b34098db58c21d0f936f6c3f17f32deb8
libata: during revalidation, check n_sectors after device is configured

Device might be resized during ata_dev_configure() due to HPA or
(later) ACPI _GTF.  Currently it's worked around by caching n_sectors
before turning off HPA.  The cached original size is overwritten if
the device is reconfigured without being hardreset - which always
happens after configuring trasnfer mode.  If the device gets hardreset
for some reason after that, revalidation fails with -ENODEV.

This patch makes size checking more robust by moving n_sectors check
from ata_dev_reread_id() to ata_dev_revalidate() after the device is
fully configured.  No matter what happens during configuration, a
device must have the same n_sectors after fully configured to be
treated as the same device.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c
include/linux/libata.h