]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
sbp2 read_capacity workaround for iPod from Stefan Richter
authorChris Wright <chrisw@sous-sol.org>
Fri, 2 Jun 2006 17:44:42 +0000 (10:44 -0700)
committerChris Wright <chrisw@sous-sol.org>
Fri, 2 Jun 2006 17:44:42 +0000 (10:44 -0700)
queue-2.6.16/sbp2-backport-read_capacity-workaround-for-ipod.patch [new file with mode: 0644]
queue-2.6.16/series

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 (file)
index 0000000..8f769bd
--- /dev/null
@@ -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 <stefanr@s5r6.in-berlin.de>
+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 <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ 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;
+ }
index 4d11f64e3ae07b6b1d246d0a166ad7810ad10a4b..492727dffe4548769633dcdcc329611f085084bb 100644 (file)
@@ -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