David Dillow <dillowda@xxxxxxxx> writes: > When using devices that support max_segments > BIO_MAX_PAGES (256), > direct IO tries to allocate a bio with more pages than allowed, which > leads to an oops in dio_bio_alloc(). Clamp that request to the supported > maximum. > > Signed-off-by: David Dillow <dillowda@xxxxxxxx> > -- > dio_bio_alloc() doesn't check the result of bio_alloc(), so it > dereferences a NULL pointer. bio_alloc(GFP_KERNEL, ...) doesn't fail > unless it gets called for an invalid number of pages, so it seems a bit > like overkill to check for failure in dio_bio_alloc(), though it would > have saved me some time tracking this down. We should always be checking return values. Mind respinning the patch to include that? > diff --git a/fs/direct-io.c b/fs/direct-io.c > index 85882f6..9eb0553 100644 > --- a/fs/direct-io.c > +++ b/fs/direct-io.c > @@ -583,6 +583,7 @@ static int dio_new_bio(struct dio *dio, sector_t start_sector) > goto out; > sector = start_sector << (dio->blkbits - 9); > nr_pages = min(dio->pages_in_io, bio_get_nr_vecs(dio->map_bh.b_bdev)); > + nr_pages = min(nr_pages, BIO_MAX_PAGES); This looks fine. Thanks for tracking it down! Cheers, Jeff -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html