>-----Original Message----- >From: Wanpeng Li [mailto:liwanp@xxxxxxxxxxxxxxxxxx] >Sent: Sunday, January 06, 2013 4:00 PM >To: Liu Hui-R64343 >Cc: linux-kernel@xxxxxxxxxxxxxxx; mgorman@xxxxxxx; akpm@linux- >foundation.org; riel@xxxxxxxxxx; minchan@xxxxxxxxxx; >kamezawa.hiroyu@xxxxxxxxxxxxxx; linux-mm@xxxxxxxxx >Subject: Re: [PATCH] mm: compaction: fix echo 1 > compact_memory return >error issue > >On Sun, Jan 06, 2013 at 03:44:33PM +0800, Jason Liu wrote: > >Hi Jason, > >>when run the folloing command under shell, it will return error sh/$ >>echo 1 > /proc/sys/vm/compact_memory sh/$ sh: write error: Bad address >> > >How can you modify the value through none privileged user since the mode >== 0200? I write it through privileged user(root). I'm using the GNOME_Mobile rootfs. > >>After strace, I found the following log: >>... >>write(1, "1\n", 2) = 3 >>write(1, "", 4294967295) = -1 EFAULT (Bad address) >>write(2, "echo: write error: Bad address\n", 31echo: write error: Bad >>address >>) = 31 >> >>This tells system return 3(COMPACT_COMPLETE) after write data to >compact_memory. >> >>The fix is to make the system just return 0 instead 3(COMPACT_COMPLETE) >>from sysctl_compaction_handler after compaction_nodes finished. > >What's the special scenario you are in? I couldn't figure out the similar error >against latest 3.8-rc2, how could you reproduce it? I'm using the BusyBox v1.20.2 () built-in shell (ash), it reproduces the issue: 100%. root@freescale /$ sh BusyBox v1.20.2 () built-in shell (ash) Enter 'help' for a list of built-in commands. Could you run strace and see the log: strace echo 1 > /proc/sys/vm/compact_memory > >Regards, >Wanpeng Li > >> >>Suggested-by:David Rientjes <rientjes@xxxxxxxxxx> Cc:Mel Gorman >><mgorman@xxxxxxx> Cc:Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >Cc:Rik >>van Riel <riel@xxxxxxxxxx> Cc:Minchan Kim <minchan@xxxxxxxxxx> >>Cc:KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> >>Signed-off-by: Jason Liu <r64343@xxxxxxxxxxxxx> >>--- >> mm/compaction.c | 6 ++---- >> 1 files changed, 2 insertions(+), 4 deletions(-) >> >>diff --git a/mm/compaction.c b/mm/compaction.c index 6b807e4..f8f5c11 >>100644 >>--- a/mm/compaction.c >>+++ b/mm/compaction.c >>@@ -1210,7 +1210,7 @@ static int compact_node(int nid) } >> >> /* Compact all nodes in the system */ >>-static int compact_nodes(void) >>+static void compact_nodes(void) >> { >> int nid; >> >>@@ -1219,8 +1219,6 @@ static int compact_nodes(void) >> >> for_each_online_node(nid) >> compact_node(nid); >>- >>- return COMPACT_COMPLETE; >> } >> >> /* The written value is actually unused, all memory is compacted */ @@ >>-1231,7 +1229,7 @@ int sysctl_compaction_handler(struct ctl_table *table, >int write, >> void __user *buffer, size_t *length, loff_t *ppos) { >> if (write) >>- return compact_nodes(); >>+ compact_nodes(); >> >> return 0; >> } >>-- >>1.7.5.4 >> >> >>-- >>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/ . >>Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> > -- 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/ . Don't email: <a href