]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
add splice fix to 2.6.24 queue
authorChris Wright <chrisw@sous-sol.org>
Tue, 29 Apr 2008 18:28:56 +0000 (11:28 -0700)
committerChris Wright <chrisw@sous-sol.org>
Tue, 29 Apr 2008 18:28:56 +0000 (11:28 -0700)
queue-2.6.24/series
queue-2.6.24/splice-use-mapping_gfp_mask.patch [new file with mode: 0644]

index afb1fa5a5bc3918db7a5878ed2ecc9a34dea3a13..d8bd8c91e2a4a91f915b9aa129da0422fae7537b 100644 (file)
@@ -1,3 +1,4 @@
+splice-use-mapping_gfp_mask.patch
 fix-oops-on-rmmod-capidrv.patch
 x86-fix-32-bit-x86-msi-x-allocation-leakage.patch
 tehuti-check-register-size.patch
diff --git a/queue-2.6.24/splice-use-mapping_gfp_mask.patch b/queue-2.6.24/splice-use-mapping_gfp_mask.patch
new file mode 100644 (file)
index 0000000..84ff009
--- /dev/null
@@ -0,0 +1,33 @@
+From 4cd13504652d28e16bf186c6bb2bbb3725369383 Mon Sep 17 00:00:00 2001
+From: Hugh Dickins <hugh@veritas.com>
+Date: Thu, 3 Apr 2008 23:35:22 +0100
+Message-ID: <Pine.LNX.4.64.0804291840200.11253@blonde.site>
+Subject: splice: use mapping_gfp_mask
+
+upstream commit: 4cd13504652d28e16bf186c6bb2bbb3725369383
+
+The loop block driver is careful to mask __GFP_IO|__GFP_FS out of its
+mapping_gfp_mask, to avoid hangs under memory pressure.  But nowadays
+it uses splice, usually going through __generic_file_splice_read.  That
+must use mapping_gfp_mask instead of GFP_KERNEL to avoid those hangs.
+
+Signed-off-by: Hugh Dickins <hugh@veritas.com>
+Cc: Jens Axboe <jens.axboe@oracle.com>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ fs/splice.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -314,7 +314,7 @@ __generic_file_splice_read(struct file *
+                               break;
+                       error = add_to_page_cache_lru(page, mapping, index,
+-                                            GFP_KERNEL);
++                                              mapping_gfp_mask(mapping));
+                       if (unlikely(error)) {
+                               page_cache_release(page);
+                               if (error == -EEXIST)