mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 09:02:00 +00:00
pnfsblock: limit bio page count
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. Cc: <stable@vger.kernel.org> #3.1+ 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>
This commit is contained in:
parent
93a3844ee0
commit
74a6eeb44c
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user