Re: [PATCH] mm: compaction: fix echo 1 > compact_memory return error issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]