summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch')
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch
new file mode 100644
index 00000000..74d1d69d
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0079-pnfsblock-limit-bio-page-count.patch
@@ -0,0 +1,51 @@
1From 4ebc5f6665b0d03c9488fafb7ac6f8bd2f104d70 Mon Sep 17 00:00:00 2001
2From: Peng Tao <bergwolf@gmail.com>
3Date: Thu, 12 Jan 2012 23:18:48 +0800
4Subject: [PATCH 079/130] pnfsblock: limit bio page count
5
6commit 74a6eeb44ca6174d9cc93b9b8b4d58211c57bc80 upstream.
7
8One bio can have at most BIO_MAX_PAGES pages. We should limit it bec otherwise
9bio_alloc will fail when there are many pages in one read/write_pagelist.
10
11Signed-off-by: Peng Tao <peng_tao@emc.com>
12Signed-off-by: Benny Halevy <bhalevy@tonian.com>
13Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
14Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
15---
16 fs/nfs/blocklayout/blocklayout.c | 17 +++++++++++------
17 1 files changed, 11 insertions(+), 6 deletions(-)
18
19diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
20index ce8129d..3db6b82 100644
21--- a/fs/nfs/blocklayout/blocklayout.c
22+++ b/fs/nfs/blocklayout/blocklayout.c
23@@ -146,14 +146,19 @@ static struct bio *bl_alloc_init_bio(int npg, sector_t isect,
24 {
25 struct bio *bio;
26
27+ npg = min(npg, BIO_MAX_PAGES);
28 bio = bio_alloc(GFP_NOIO, npg);
29- if (!bio)
30- return NULL;
31+ if (!bio && (current->flags & PF_MEMALLOC)) {
32+ while (!bio && (npg /= 2))
33+ bio = bio_alloc(GFP_NOIO, npg);
34+ }
35
36- bio->bi_sector = isect - be->be_f_offset + be->be_v_offset;
37- bio->bi_bdev = be->be_mdev;
38- bio->bi_end_io = end_io;
39- bio->bi_private = par;
40+ if (bio) {
41+ bio->bi_sector = isect - be->be_f_offset + be->be_v_offset;
42+ bio->bi_bdev = be->be_mdev;
43+ bio->bi_end_io = end_io;
44+ bio->bi_private = par;
45+ }
46 return bio;
47 }
48
49--
501.7.7.4
51