From: Greg Kroah-Hartman Date: Mon, 7 Jul 2014 23:19:35 +0000 (-0700) Subject: 3.10-stable patches X-Git-Tag: v3.4.98~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8f1a1f2cd3d0442bee80305c7e094b132c4c0ea3;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: sym53c8xx_2-set-did_requeue-return-code-when-aborting-squeue.patch --- diff --git a/queue-3.10/series b/queue-3.10/series index c98b539f4c5..76448c375bf 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -50,3 +50,4 @@ alsa-usb-audio-suppress-repetitive-debug-messages-from-retire_playback_urb.patch alsa-usb-audio-prevent-printk-ratelimiting-from-spamming-kernel-log-while-debug-not-defined.patch arch-unicore32-mm-alignment.c-include-asm-pgtable.h-to-avoid-compiling-error.patch drivers-video-fbdev-fb-puv3.c-add-header-files-for-function-unifb_mmap.patch +sym53c8xx_2-set-did_requeue-return-code-when-aborting-squeue.patch diff --git a/queue-3.10/sym53c8xx_2-set-did_requeue-return-code-when-aborting-squeue.patch b/queue-3.10/sym53c8xx_2-set-did_requeue-return-code-when-aborting-squeue.patch new file mode 100644 index 00000000000..023ee2ca3e5 --- /dev/null +++ b/queue-3.10/sym53c8xx_2-set-did_requeue-return-code-when-aborting-squeue.patch @@ -0,0 +1,56 @@ +From fd1232b214af43a973443aec6a2808f16ee5bf70 Mon Sep 17 00:00:00 2001 +From: Mikulas Patocka +Date: Tue, 8 Apr 2014 21:52:05 -0400 +Subject: sym53c8xx_2: Set DID_REQUEUE return code when aborting squeue + +From: Mikulas Patocka + +commit fd1232b214af43a973443aec6a2808f16ee5bf70 upstream. + +This patch fixes I/O errors with the sym53c8xx_2 driver when the disk +returns QUEUE FULL status. + +When the controller encounters an error (including QUEUE FULL or BUSY +status), it aborts all not yet submitted requests in the function +sym_dequeue_from_squeue. + +This function aborts them with DID_SOFT_ERROR. + +If the disk has full tag queue, the request that caused the overflow is +aborted with QUEUE FULL status (and the scsi midlayer properly retries +it until it is accepted by the disk), but the sym53c8xx_2 driver aborts +the following requests with DID_SOFT_ERROR --- for them, the midlayer +does just a few retries and then signals the error up to sd. + +The result is that disk returning QUEUE FULL causes request failures. + +The error was reproduced on 53c895 with COMPAQ BD03685A24 disk +(rebranded ST336607LC) with command queue 48 or 64 tags. The disk has +64 tags, but under some access patterns it return QUEUE FULL when there +are less than 64 pending tags. The SCSI specification allows returning +QUEUE FULL anytime and it is up to the host to retry. + +Signed-off-by: Mikulas Patocka +Cc: Matthew Wilcox +Cc: James Bottomley +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/sym53c8xx_2/sym_hipd.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c ++++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c +@@ -3000,7 +3000,11 @@ sym_dequeue_from_squeue(struct sym_hcb * + if ((target == -1 || cp->target == target) && + (lun == -1 || cp->lun == lun) && + (task == -1 || cp->tag == task)) { ++#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING + sym_set_cam_status(cp->cmd, DID_SOFT_ERROR); ++#else ++ sym_set_cam_status(cp->cmd, DID_REQUEUE); ++#endif + sym_remque(&cp->link_ccbq); + sym_insque_tail(&cp->link_ccbq, &np->comp_ccbq); + }