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? >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? 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=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>