Please note that the above patch isn't helpful on armel. We had some very fruitful discussions about armel w/ some XFS guys, and it turns out that a simple patch like the attached is needed. This works fine for me on 2.6.25-rc6, but I assume it will be made to look/behave differently before being pushed upstream into the kernel/xfs-cvs :-)
Since this fixes a cache issue, plain (old) arm will most likely need it in addition to the struct packing patch, too.
Index: linux-2.6.25-rc6/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6.25-rc6.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-03-26 21:41:29.932766585 +0000 +++ linux-2.6.25-rc6/fs/xfs/linux-2.6/xfs_buf.c 2008-03-26 21:43:13.037769383 +0000 @@ -1157,6 +1157,17 @@ _xfs_buf_ioapply( (bp->b_flags & XBF_READ_AHEAD) ? READA : READ; } +#if 0 + if ((bp->b_flags & (_XBF_PAGE_CACHE|_XBF_PAGES)) + && (bp->b_flags & XBF_MAPPED) + && (bp->b_page_count > 1)) { + flush_cache_vunmap(bp->b_addr - bp->b_offset, // start + bp->b_addr - bp->b_offset + (bp->b_page_count * PAGE_SIZE)); + } +#else + flush_cache_vunmap (0, 1); +#endif + /* Special code path for reading a sub page size buffer in -- * we populate up the whole page, and hence the other metadata * in the same page. This optimization is only valid when the