From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Morton Subject: Re: allowed pages in the block later, was Re: [Ext2-devel] [PATCH] ext3: avoid sending down non-refcounted pages Date: Mon, 12 Dec 2005 12:12:08 -0800 Message-ID: <20051212121208.4c7421ce.akpm@osdl.org> References: <20051208180900T.fujita.tomonori@lab.ntt.co.jp> <20051208101833.GM14509@schatzie.adilger.int> <20051208134239.GA13376@infradead.org> <20051210164736.6e4eaa3f.akpm@osdl.org> <20051212172552.GA28652@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: hch@infradead.org, fujita.tomonori@lab.ntt.co.jp, michaelc@cs.wisc.edu, linux-fsdevel@vger.kernel.org, ext2-devel@lists.sourceforge.net, open-iscsi@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Return-path: To: Christoph Hellwig In-Reply-To: <20051212172552.GA28652@infradead.org> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Christoph Hellwig wrote: > > On Sat, Dec 10, 2005 at 04:47:36PM -0800, Andrew Morton wrote: > > Christoph Hellwig wrote: > > > > > > The problem we're trying to solve here is how do implement network block > > > devices (nbd, iscsi) efficiently. The zero copy codepath in the networking > > > layer does need to grab additional references to pages. So to use sendpage > > > we need a refcountable page. pages used by the slab allocator are not > > > normally refcounted so try to do get_page/pub_page on them will break. > > > > I don't get it. Doing get_page/put_page on a slab-allocated page should do > > the right thing? > > As Arjan mentioned, what would be the right thing? Delaying returning the > page to the page pool and disallow reuse until page count reaches zero? Yes, that's what'll happen. slab will put its final ref to the page, so whoever did that intervening get_page() ends up owning the page. > All this seems highly impractical. Well, as Arjan points out, doing get_page() won't prevent slab from "freeing" a part of the page and reusing it for another object of the same type.