Commit 9e5bd023 authored by Stefan Richter's avatar Stefan Richter Committed by Chris Wright

[PATCH] sbp2: backport read_capacity workaround for iPod

There is a firmware bug in several Apple iPods which prevents access to
these iPods under certain conditions. The disk size reported by the iPod
is one sector too big. Once access to the end of the disk is attempted,
the iPod becomes inaccessible. This problem has been known for USB iPods
for some time and has recently been discovered to exist with
FireWire/USB combo iPods too.

This patch is derived from the fix in Linux 2.6.17, commit
e9a1c52c, to be applicable to 2.6.16.x
without prerequisite patches. It hard-wires a workaround for three known
affected model numbers (those of 4th generation iPod, iPod Photo, iPod
mini).

Note: This patch lacks Linux 2.6.17's ability to enable and disable the
workaround via a module parameter.
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: default avatarChris Wright <chrisw@sous-sol.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent d989306d
......@@ -2491,9 +2491,20 @@ static int sbp2scsi_slave_alloc(struct scsi_device *sdev)
static int sbp2scsi_slave_configure(struct scsi_device *sdev)
{
struct scsi_id_instance_data *scsi_id =
(struct scsi_id_instance_data *)sdev->host->hostdata[0];
blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
sdev->use_10_for_rw = 1;
sdev->use_10_for_ms = 1;
if ((scsi_id->sbp2_firmware_revision & 0xffff00) == 0x0a2700 &&
(scsi_id->ud->model_id == 0x000021 /* gen.4 iPod */ ||
scsi_id->ud->model_id == 0x000023 /* iPod mini */ ||
scsi_id->ud->model_id == 0x00007e /* iPod Photo */ )) {
SBP2_INFO("enabling iPod workaround: decrement disk capacity");
sdev->fix_capacity = 1;
}
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment