On 2/25/19 5:36 AM, Dave Chinner wrote: > On Mon, Feb 25, 2019 at 12:09:04PM +0800, Ming Lei wrote: >> XFS uses kmalloc() to allocate sector sized IO buffer. > .... >> Use page_frag_alloc() to allocate the sector sized buffer, then the >> above issue can be fixed because offset_in_page of allocated buffer >> is always sector aligned. > > Didn't we already reject this approach because page frags cannot be > reused and that pages allocated to the frag pool are pinned in > memory until all fragments allocated on the page have been freed? I don't know if you did, but it's certainly true., Also I don't think there's any specified alignment guarantee for page_frag_alloc(). What about kmem_cache_create() with align parameter? That *should* be guaranteed regardless of whatever debugging is enabled - if not, I would consider it a bug. > i.e. when we consider 64k page machines and 4k block sizes (i.e. > default config), every single metadata allocation is a sub-page > allocation and so will use this new page frag mechanism. IOWs, it > will result in fragmenting memory severely and typical memory > reclaim not being able to fix it because the metadata that pins each > page is largely unreclaimable... > > Cheers, > > Dave. >