mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-03 09:41:54 +09:00
pnfsblock: limit bio page count
commit 74a6eeb44c 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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7e0f9f47b4
commit
b4e8ff2994
@@ -146,14 +146,19 @@ static struct bio *bl_alloc_init_bio(int npg, sector_t isect,
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user