On Fri, Jan 13, 2012 at 01:25:40PM -0800, Andrew Morton wrote: > On Wed, 14 Dec 2011 15:41:30 +0000 > Mel Gorman <mgorman@xxxxxxx> wrote: > > > This patch adds a lightweight sync migrate operation MIGRATE_SYNC_LIGHT > > mode that avoids writing back pages to backing storage. Async > > compaction maps to MIGRATE_ASYNC while sync compaction maps to > > MIGRATE_SYNC_LIGHT. For other migrate_pages users such as memory > > hotplug, MIGRATE_SYNC is used. > > > > This avoids sync compaction stalling for an excessive length of time, > > particularly when copying files to a USB stick where there might be > > a large number of dirty pages backed by a filesystem that does not > > support ->writepages. > > > > ... > > > > --- a/include/linux/fs.h > > +++ b/include/linux/fs.h > > @@ -525,6 +525,7 @@ enum positive_aop_returns { > > struct page; > > struct address_space; > > struct writeback_control; > > +enum migrate_mode; > > > > struct iov_iter { > > const struct iovec *iov; > > @@ -614,7 +615,7 @@ struct address_space_operations { > > * is false, it must not block. > > */ > > int (*migratepage) (struct address_space *, > > - struct page *, struct page *, bool); > > + struct page *, struct page *, enum migrate_mode); > > I'm getting a huge warning spew from this with my sparc64 gcc-3.4.5. > I'm not sure why, really. > Tetsuo Handa complained about the same thing using gcc 3.3 (added to cc). > Forward-declaring an enum in this fashion is problematic because some > compilers (I'm unsure about gcc) use different sizeofs for enums, > depending on the enum's value range. For example, an enum which only > has values 0...255 can fit into a byte. (iirc, the compiler actually > put it in a 16-bit storage). > Ok, I was not aware of this. Thanks for the heads-up. > So I propose: > > From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Subject: mm: fix warnings regarding enum migrate_mode > > sparc64 allmodconfig: > > In file included from include/linux/compat.h:15, > from /usr/src/25/arch/sparc/include/asm/siginfo.h:19, > from include/linux/signal.h:5, > from include/linux/sched.h:73, > from arch/sparc/kernel/asm-offsets.c:13: > include/linux/fs.h:618: warning: parameter has incomplete type > > It seems that my sparc64 compiler (gcc-3.4.5) doesn't like the forward > declaration of enums. > > Fix this by moving the "enum migrate_mode" definition into its own header > file. > > Cc: Mel Gorman <mgorman@xxxxxxx> > Cc: Rik van Riel <riel@xxxxxxxxxx> > Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx> > Cc: Minchan Kim <minchan.kim@xxxxxxxxx> > Cc: Dave Jones <davej@xxxxxxxxxx> > Cc: Jan Kara <jack@xxxxxxx> > Cc: Andy Isaacson <adi@xxxxxxxxxxxxx> > Cc: Nai Xia <nai.xia@xxxxxxxxx> > Cc: Johannes Weiner <jweiner@xxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Acked-by: Mel Gorman <mgorman@xxxxxxx> -- Mel Gorman SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>