From: Chris Wright Date: Fri, 2 Jun 2006 17:44:42 +0000 (-0700) Subject: sbp2 read_capacity workaround for iPod from Stefan Richter X-Git-Tag: v2.6.16.20~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be2644783a0be8741effed093257d9132bbce775;p=thirdparty%2Fkernel%2Fstable-queue.git sbp2 read_capacity workaround for iPod from Stefan Richter --- diff --git a/queue-2.6.16/sbp2-backport-read_capacity-workaround-for-ipod.patch b/queue-2.6.16/sbp2-backport-read_capacity-workaround-for-ipod.patch new file mode 100644 index 00000000000..8f769bd0a6c --- /dev/null +++ b/queue-2.6.16/sbp2-backport-read_capacity-workaround-for-ipod.patch @@ -0,0 +1,53 @@ +From stable-bounces@linux.kernel.org Fri Jun 2 10:39:23 2006 +Date: Fri, 2 Jun 2006 19:34:30 +0200 (CEST) +From: Stefan Richter +To: stable@kernel.org +Cc: linux-kernel@vger.kernel.org +Subject: 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 +e9a1c52c7b19d10342226c12f170d7ab644427e2, 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: Stefan Richter +Signed-off-by: Chris Wright +--- + + drivers/ieee1394/sbp2.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +--- linux-2.6.16.19.orig/drivers/ieee1394/sbp2.c ++++ linux-2.6.16.19/drivers/ieee1394/sbp2.c +@@ -2491,9 +2491,20 @@ static int sbp2scsi_slave_alloc(struct s + + 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; + } + diff --git a/queue-2.6.16/series b/queue-2.6.16/series index 4d11f64e3ae..492727dffe4 100644 --- a/queue-2.6.16/series +++ b/queue-2.6.16/series @@ -9,3 +9,4 @@ ipw2200-Filter-unsupported-channels-out-in-ad-hoc-mode.patch x86_64-add-crashdump-trigger-points.patch x86_64-don-t-do-syscall-exit-tracing-twice.patch x86_64-Don-t-sanity-check-Type-1-PCI-bus-access-on-newer-systems.patch +sbp2-backport-read_capacity-workaround-for-ipod.patch