lkml.org 
[lkml]   [2012]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[079/129] pnfsblock: limit bio page count
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------
    Content-Length: 1277
    Lines: 45

    From: Peng Tao <bergwolf@gmail.com>

    commit 74a6eeb44ca6174d9cc93b9b8b4d58211c57bc80 upstream.

    One bio can have at most BIO_MAX_PAGES pages. We should limit it bec otherwise
    bio_alloc will fail when there are many pages in one read/write_pagelist.

    Signed-off-by: Peng Tao <peng_tao@emc.com>
    Signed-off-by: Benny Halevy <bhalevy@tonian.com>
    Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/nfs/blocklayout/blocklayout.c | 17 +++++++++++------
    1 file changed, 11 insertions(+), 6 deletions(-)

    --- a/fs/nfs/blocklayout/blocklayout.c
    +++ b/fs/nfs/blocklayout/blocklayout.c
    @@ -146,14 +146,19 @@ static struct bio *bl_alloc_init_bio(int
    {
    struct bio *bio;

    + npg = min(npg, BIO_MAX_PAGES);
    bio = bio_alloc(GFP_NOIO, npg);
    - if (!bio)
    - return NULL;
    + if (!bio && (current->flags & PF_MEMALLOC)) {
    + while (!bio && (npg /= 2))
    + bio = bio_alloc(GFP_NOIO, npg);
    + }

    - bio->bi_sector = isect - be->be_f_offset + be->be_v_offset;
    - bio->bi_bdev = be->be_mdev;
    - bio->bi_end_io = end_io;
    - bio->bi_private = par;
    + if (bio) {
    + bio->bi_sector = isect - be->be_f_offset + be->be_v_offset;
    + bio->bi_bdev = be->be_mdev;
    + bio->bi_end_io = end_io;
    + bio->bi_private = par;
    + }
    return bio;
    }




    \
     
     \ /
      Last update: 2012-01-24 04:07    [W:4.049 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site