+++ /dev/null
-From f74373a5cc7a0155d232c4e999648c7a95435bb2 Mon Sep 17 00:00:00 2001
-From: Heiko Carstens <heiko.carstens@de.ibm.com>
-Date: Wed, 2 Jul 2014 15:22:37 -0700
-Subject: /proc/stat: convert to single_open_size()
-
-From: Heiko Carstens <heiko.carstens@de.ibm.com>
-
-commit f74373a5cc7a0155d232c4e999648c7a95435bb2 upstream.
-
-These two patches are supposed to "fix" failed order-4 memory
-allocations which have been observed when reading /proc/stat. The
-problem has been observed on s390 as well as on x86.
-
-To address the problem change the seq_file memory allocations to
-fallback to use vmalloc, so that allocations also work if memory is
-fragmented.
-
-This approach seems to be simpler and less intrusive than changing
-/proc/stat to use an interator. Also it "fixes" other users as well,
-which use seq_file's single_open() interface.
-
-This patch (of 2):
-
-Use seq_file's single_open_size() to preallocate a buffer that is large
-enough to hold the whole output, instead of open coding it. Also
-calculate the requested size using the number of online cpus instead of
-possible cpus, since the size of the output only depends on the number
-of online cpus.
-
-Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
-Acked-by: David Rientjes <rientjes@google.com>
-Cc: Ian Kent <raven@themaw.net>
-Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
-Cc: Thorsten Diehl <thorsten.diehl@de.ibm.com>
-Cc: Andrea Righi <andrea@betterlinux.com>
-Cc: Christoph Hellwig <hch@infradead.org>
-Cc: Al Viro <viro@zeniv.linux.org.uk>
-Cc: Stefan Bader <stefan.bader@canonical.com>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- fs/proc/stat.c | 22 ++--------------------
- 1 file changed, 2 insertions(+), 20 deletions(-)
-
---- a/fs/proc/stat.c
-+++ b/fs/proc/stat.c
-@@ -184,29 +184,11 @@ static int show_stat(struct seq_file *p,
-
- static int stat_open(struct inode *inode, struct file *file)
- {
-- size_t size = 1024 + 128 * num_possible_cpus();
-- char *buf;
-- struct seq_file *m;
-- int res;
-+ size_t size = 1024 + 128 * num_online_cpus();
-
- /* minimum size to display an interrupt count : 2 bytes */
- size += 2 * nr_irqs;
--
-- /* don't ask for more than the kmalloc() max size */
-- if (size > KMALLOC_MAX_SIZE)
-- size = KMALLOC_MAX_SIZE;
-- buf = kmalloc(size, GFP_KERNEL);
-- if (!buf)
-- return -ENOMEM;
--
-- res = single_open(file, show_stat, NULL);
-- if (!res) {
-- m = file->private_data;
-- m->buf = buf;
-- m->size = ksize(buf);
-- } else
-- kfree(buf);
-- return res;
-+ return single_open_size(file, show_stat, NULL, size);
- }
-
- static const struct file_operations proc_stat_operations = {
md-flush-writes-before-starting-a-recovery.patch
irqchip-spear_shirq-fix-interrupt-offset.patch
mm-page_alloc-fix-cma-area-initialisation-when-pageblock-max_order.patch
-proc-stat-convert-to-single_open_size.patch
mlx4_core-fix-incorrect-flags1-bitmap-test-in-mlx4_query_func_cap.patch
clk-qcom-fix-clk_rcg2_is_enabled-check.patch
clk-qcom-fix-mmcc-8974-s-pll-configurations.patch
drivers-video-fbdev-fb-puv3.c-add-header-files-for-function-unifb_mmap.patch
mm-numa-remove-bug_on-in-__handle_mm_fault.patch
slab-fix-oops-when-reading-proc-slab_allocators.patch
+sym53c8xx_2-set-did_requeue-return-code-when-aborting-squeue.patch
--- /dev/null
+From fd1232b214af43a973443aec6a2808f16ee5bf70 Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Tue, 8 Apr 2014 21:52:05 -0400
+Subject: sym53c8xx_2: Set DID_REQUEUE return code when aborting squeue
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+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 <mpatocka@redhat.com>
+Cc: Matthew Wilcox <matthew@wil.cx>
+Cc: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
+ }