On Fri, Sep 20, 2019 at 09:59:41AM -0500, Eric Sandeen wrote: > On 9/19/19 12:38 PM, Christoph Hellwig wrote: > > On Thu, Sep 19, 2019 at 12:20:47PM -0500, Bill O'Donnell wrote: > >>>> @@ -391,7 +396,7 @@ xfs_buf_allocate_memory( > >>>> struct page *page; > >>>> uint retries = 0; > >>>> retry: > >>>> - page = alloc_page(gfp_mask); > >>>> + page = alloc_page(gfp_mask | kmflag_mask); > >>> > >>> alloc_page takes GFP_ flags, not KM_. In fact sparse should have warned > >>> about this. > >> > >> I wondered if the KM flag needed conversion to GFP, but saw no warning. > > > > I'd be tempted to just do a manual memset after either kind of > > allocation. > > At some point I think Dave had suggested that at least when allocating pages, > using the flag would be more efficient? With some configurations pages come from the free lists pre-zeroed, and so don't need zeroing to initialise them (e.g. when memory poisoning is turned on, or pages are being zeroed on free). Hence if you use __GFP_ZERO the it will only zero if the page obtained from the freelist isn't already zero. The __GFP_ZERO call will also use the most efficient method of zeroing the page for the platform via clear_page() rather than memset().... /me shrugs and doesn't really care either way.... -Dave. -- Dave Chinner david@xxxxxxxxxxxxx