On 2/26/19 5:19 PM, Matthew Wilcox wrote: > On Tue, Feb 26, 2019 at 08:14:33AM -0800, Darrick J. Wong wrote: >> 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.