On Tue, Dec 04, 2007 at 12:35:49PM +0100, Nick Piggin wrote: > On Tue, Dec 04, 2007 at 03:26:20AM -0800, Andrew Morton wrote: > > On Tue, 4 Dec 2007 12:21:00 +0100 Nick Piggin <npiggin@xxxxxxx> wrote: > > > > > + * > > > + * Cannot support XIP and highmem, because our ->direct_access > > > + * routine for XIP must return memory that is always addressable. > > > + * If XIP was reworked to use pfns and kmap throughout, this > > > + * restriction might be able to be lifted. > > > */ > > > + gfp_flags = GFP_NOIO | __GFP_ZERO; > > > +#ifndef CONFIG_BLK_DEV_XIP > > > + gfp_flags |= __GFP_HIGHMEM; > > > +#endif > > > > A dubious tradeoff? > > On big highmem machines certainly. It may be somewhat useful on small > memory systems... but having the config option there is nice for a VM > developer without an s390 easily available ;) > > But don't apply these XIP patches yet -- after a bit more testing I'm > seeing some data corruption, so I'll have to work out what's going > wrong with that first. Here we go. See, brd already found a bug ;) Can you apply the ext2 XIP patch too? And I'll resend the brd XIP patch. --- Writing to XIP files at a non-page-aligned offset results in data corruption because the writes were always sent to the start of the page. Signed-off-by: Nick Piggin <npiggin@xxxxxxx> --- Index: linux-2.6/mm/filemap_xip.c =================================================================== --- linux-2.6.orig/mm/filemap_xip.c +++ linux-2.6/mm/filemap_xip.c @@ -314,7 +314,7 @@ __xip_file_write(struct file *filp, cons fault_in_pages_readable(buf, bytes); kaddr = kmap_atomic(page, KM_USER0); copied = bytes - - __copy_from_user_inatomic_nocache(kaddr, buf, bytes); + __copy_from_user_inatomic_nocache(kaddr + offset, buf, bytes); kunmap_atomic(kaddr, KM_USER0); flush_dcache_page(page); - To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html