From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Axboe Subject: Re: [PATCH] bio allocation failure due to bio_get_nr_vecs() Date: Fri, 11 May 2012 16:45:49 +0200 Message-ID: <4FAD261D.80102@kernel.dk> References: <4FABF01E.7080303@itwm.fraunhofer.de> <4FAD18D4.3090102@itwm.fraunhofer.de> <4FAD23F7.2080605@kernel.dk> <4FAD25B3.3050802@itwm.fraunhofer.de> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: "linux-fsdevel@vger.kernel.org" , linux-xfs@oss.sgi.com, sandeen@sandeen.net, Kent Overstreet , Tejun Heo To: Bernd Schubert Return-path: Received: from merlin.infradead.org ([205.233.59.134]:52191 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757393Ab2EKOqE (ORCPT ); Fri, 11 May 2012 10:46:04 -0400 In-Reply-To: <4FAD25B3.3050802@itwm.fraunhofer.de> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On 05/11/2012 04:44 PM, Bernd Schubert wrote: > On 05/11/2012 04:36 PM, Jens Axboe wrote: >> On 05/11/2012 03:49 PM, Bernd Schubert wrote: >>> The number of bio_get_nr_vecs() is passed down via bio_alloc() to >>> bvec_alloc_bs(), which fails the bio allocation if >>> nr_iovecs> BIO_MAX_PAGES. For the underlying caller this causes an >>> unexpected bio allocation failure. >>> Limiting to queue_max_segments() is not sufficient, as max_segments >>> also might be very large. >>> >>> bvec_alloc_bs(gfp_mask, nr_iovecs, ) => NULL when nr_iovecs> BIO_MAX_PAGES >>> bio_alloc_bioset(gfp_mask, nr_iovecs, ...) >>> bio_alloc(GFP_NOIO, nvecs) >>> xfs_alloc_ioend_bio() >> >> Thanks, looks sane. Applied. >> > > Great, thanks! Should we CC linux-stable for commit > 5abebfdd02450fa1349daacf242e70b3736581e3 and this one, as I got a hard > kernel panic? Yes, that's a good idea. I've ammended the commit now to include stable. -- Jens Axboe