[kernel] r15641 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series

Maximilian Attems maks at alioth.debian.org
Sat May 8 17:18:19 UTC 2010


Author: maks
Date: Sat May  8 17:18:16 2010
New Revision: 15641

Log:
raid6: fix recovery performance regression

linux-next heading to stable.

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/raid6-fix-recovery-performance-regression.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/13

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	Sat May  8 17:13:29 2010	(r15640)
+++ dists/sid/linux-2.6/debian/changelog	Sat May  8 17:18:16 2010	(r15641)
@@ -11,7 +11,8 @@
     (closes: #580652)
   * KEYS: find_keyring_by_name() can gain access to a freed keyring.
     CVE-2010-1437
-  * [SCSI] Enable retries for SYNCRONIZE_CACHE commands to fix I/O error
+  * [SCSI] Enable retries for SYNCRONIZE_CACHE commands to fix I/O error.
+  * raid6: fix recovery performance regression.
 
  -- Frederik Schüler <fs at debian.org>  Wed, 05 May 2010 17:54:01 +0200
 

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/raid6-fix-recovery-performance-regression.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/raid6-fix-recovery-performance-regression.patch	Sat May  8 17:18:16 2010	(r15641)
@@ -0,0 +1,73 @@
+From 5157b4aa5b7de8787b6318e61bcc285031bb9088 Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams at intel.com>
+Date: Tue, 4 May 2010 20:41:56 -0700
+Subject: [PATCH] raid6: fix recovery performance regression
+
+The raid6 recovery code should immediately drop back to the optimized
+synchronous path when a p+q dma resource is not available.  Otherwise we
+run the non-optimized/multi-pass async code in sync mode.
+
+Verified with raid6test (NDISKS=255)
+
+Applies to kernels >= 2.6.32.
+
+Cc: <stable at kernel.org>
+Acked-by: NeilBrown <neilb at suse.de>
+Reported-by: H. Peter Anvin <hpa at zytor.com>
+Signed-off-by: Dan Williams <dan.j.williams at intel.com>
+Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
+---
+ crypto/async_tx/async_raid6_recov.c |   21 +++++++++++++--------
+ 1 files changed, 13 insertions(+), 8 deletions(-)
+
+diff --git a/crypto/async_tx/async_raid6_recov.c b/crypto/async_tx/async_raid6_recov.c
+index 943f2ab..ce038d8 100644
+--- a/crypto/async_tx/async_raid6_recov.c
++++ b/crypto/async_tx/async_raid6_recov.c
+@@ -324,6 +324,7 @@ struct dma_async_tx_descriptor *
+ async_raid6_2data_recov(int disks, size_t bytes, int faila, int failb,
+ 			struct page **blocks, struct async_submit_ctl *submit)
+ {
++	void *scribble = submit->scribble;
+ 	int non_zero_srcs, i;
+ 
+ 	BUG_ON(faila == failb);
+@@ -332,11 +333,13 @@ async_raid6_2data_recov(int disks, size_t bytes, int faila, int failb,
+ 
+ 	pr_debug("%s: disks: %d len: %zu\n", __func__, disks, bytes);
+ 
+-	/* we need to preserve the contents of 'blocks' for the async
+-	 * case, so punt to synchronous if a scribble buffer is not available
++	/* if a dma resource is not available or a scribble buffer is not
++	 * available punt to the synchronous path.  In the 'dma not
++	 * available' case be sure to use the scribble buffer to
++	 * preserve the content of 'blocks' as the caller intended.
+ 	 */
+-	if (!submit->scribble) {
+-		void **ptrs = (void **) blocks;
++	if (!async_dma_find_channel(DMA_PQ) || !scribble) {
++		void **ptrs = scribble ? scribble : (void **) blocks;
+ 
+ 		async_tx_quiesce(&submit->depend_tx);
+ 		for (i = 0; i < disks; i++)
+@@ -406,11 +409,13 @@ async_raid6_datap_recov(int disks, size_t bytes, int faila,
+ 
+ 	pr_debug("%s: disks: %d len: %zu\n", __func__, disks, bytes);
+ 
+-	/* we need to preserve the contents of 'blocks' for the async
+-	 * case, so punt to synchronous if a scribble buffer is not available
++	/* if a dma resource is not available or a scribble buffer is not
++	 * available punt to the synchronous path.  In the 'dma not
++	 * available' case be sure to use the scribble buffer to
++	 * preserve the content of 'blocks' as the caller intended.
+ 	 */
+-	if (!scribble) {
+-		void **ptrs = (void **) blocks;
++	if (!async_dma_find_channel(DMA_PQ) || !scribble) {
++		void **ptrs = scribble ? scribble : (void **) blocks;
+ 
+ 		async_tx_quiesce(&submit->depend_tx);
+ 		for (i = 0; i < disks; i++)
+-- 
+1.6.5
+

Modified: dists/sid/linux-2.6/debian/patches/series/13
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/13	Sat May  8 17:13:29 2010	(r15640)
+++ dists/sid/linux-2.6/debian/patches/series/13	Sat May  8 17:18:16 2010	(r15641)
@@ -2,3 +2,4 @@
 + bugfix/all/KVM-x86-Extend-KVM_SET_VCPU_EVENTS-with-selective-up.patch
 + bugfix/all/keys-the-request_key-syscall-should-link-an-existing-key-to-the-dest-keyring.patch
 + bugfix/all/SCSI-Enable-retries-for-SYNCRONIZE_CACHE-commands-to.patch
++ bugfix/all/raid6-fix-recovery-performance-regression.patch



More information about the Kernel-svn-changes mailing list