Re: [PATCH] xfs: allocate sector sized IO buffer via page_frag_alloc
From: Vlastimil Babka <hidden>
Date: 2019-02-27 07:10:47
Also in:
linux-fsdevel, linux-mm, linux-xfs
On 2/26/19 5:19 PM, Matthew Wilcox wrote:
On Tue, Feb 26, 2019 at 08:14:33AM -0800, Darrick J. Wong wrote:quoted
On Tue, Feb 26, 2019 at 06:04:40AM -0800, Matthew Wilcox wrote: Wait a minute, are you all saying that /directio/ is broken on XFS too?? XFS doesn't use blockdev_direct_IO anymore. I thought we were talking about alignment of XFS metadata buffers (xfs_buf.c), which is a very different topic. As I understand the problem, in non-debug mode the slab caches give xfs_buf chunks of memory that are aligned well enough to work, but in debug mode the slabs allocate slightly more bytes to carry debug information which pushes the returned address up slightly, thus breaking the alignment requirements. So why can't we just move the debug info to the end of the object? If our 512 byte allocation turns into a (512 + a few more) bytes we'll end up using 1024 bytes on the allocation regardless, so it shouldn't matter to put the debug info at offset 512. If the reason is fear that kernel code will scribble off the end of the object, then return (*obj + 512). Maybe you all have already covered this, though?I don't know _what_ Ming Lei is saying. I thought the problem was with slab redzones, which need to be before and after each object, but apparently the problem is with KASAN as well.
That's what I thought as well. But if we can solve it for caches created by kmem_cache_create(..., align, ...) then IMHO we could guarantee natural alignment for power-of-two kmalloc caches as well.