libata: implement on-demand HPA unlocking
authorTejun Heo <tj@kernel.org>
Sat, 15 May 2010 18:09:34 +0000 (20:09 +0200)
committerJeff Garzik <jgarzik@redhat.com>
Wed, 2 Jun 2010 17:50:10 +0000 (13:50 -0400)
commitd8d9129ea28e2177749627c82962feb26e8d11e9
treef930703c8e3ba66cadcaf712ee7ce9b36a6d0823
parent68939ce5fc17ee9c03ef6e543d4f82bd9f5583d4
libata: implement on-demand HPA unlocking

Implement ata_scsi_unlock_native_capacity() which will be called
through SCSI layer when block layer notices that partitions on a
device extend beyond the end of the device.  It requests EH to unlock
HPA, waits for completion and returns the current device capacity.

This allows libata to unlock HPA on demand instead of having to decide
whether to unlock upfront.  Unlocking on demand is safer than
unlocking by upfront because some BIOSes write private data to the
area beyond HPA limit.  This was suggested by Ben Hutchings.

Signed-off-by: Tejun Heo <tj@kernel.org>
Suggested-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-core.c
drivers/ata/libata-scsi.c
include/linux/libata.h