diff mbox series

[V3,2/2] mm: compaction: limit illegal input parameters of compact_memory interface

Message ID 202303091142580726760@zte.com.cn (mailing list archive)
State Mainlined, archived
Headers show
Series [V3,1/2] mm: compaction: move compact_memory sysctl to its own file | expand

Commit Message

ye.xingchen@zte.com.cn March 9, 2023, 3:42 a.m. UTC
From: Minghao Chi <chi.minghao@zte.com.cn>

Available only when CONFIG_COMPACTION is set. When 1 is written to
the file, all zones are compacted such that free memory is available
in contiguous blocks where possible.
But echo others-parameter > compact_memory, this function will be
triggered by writing parameters to the interface.

Applied this patch,
sh/$ echo 1.1 > /proc/sys/vm/compact_memory
sh/$ sh: write error: Invalid argument

Link: https://lore.kernel.org/all/ZAJwoXJCzfk1WIBx@bombadil.infradead.org/
Signed-off-by: Minghao Chi <chi.minghao@zte.com.cn>
Signed-off-by: Ye Xingchen <ye.xingchen@zte.com.cn>
---
 mm/compaction.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Luis Chamberlain March 9, 2023, 3:56 a.m. UTC | #1
On Thu, Mar 09, 2023 at 11:42:58AM +0800, ye.xingchen@zte.com.cn wrote:
> From: Minghao Chi <chi.minghao@zte.com.cn>
> 
> Available only when CONFIG_COMPACTION is set. When 1 is written to
> the file, all zones are compacted such that free memory is available
> in contiguous blocks where possible.
> But echo others-parameter > compact_memory, this function will be
> triggered by writing parameters to the interface.
> 
> Applied this patch,
> sh/$ echo 1.1 > /proc/sys/vm/compact_memory
> sh/$ sh: write error: Invalid argument

Didn't echo 2 > /proc/sys/vm/compact_memory used to work too?

Why kill that? Did the docs say only 1 was possible? If not
perhaps the docs need to be updated?

  Luis
ye xingchen March 10, 2023, 1:54 a.m. UTC | #2
>> From: Minghao Chi <chi.minghao@zte.com.cn>
>> 
>> Available only when CONFIG_COMPACTION is set. When 1 is written to
>> the file, all zones are compacted such that free memory is available
>> in contiguous blocks where possible.
>> But echo others-parameter > compact_memory, this function will be
>> triggered by writing parameters to the interface.
>> 
>> Applied this patch,
>> sh/$ echo 1.1 > /proc/sys/vm/compact_memory
>> sh/$ sh: write error: Invalid argument
>
>Didn't echo 2 > /proc/sys/vm/compact_memory used to work too?
yes
>
>Why kill that? Did the docs say only 1 was possible? If not
>perhaps the docs need to be updated?
In Documentation/admin-guide/sysctl/vm.rst:109 say: when 1 is written
to the file, all zones are compacted such that free memory is available
in contiguous blocks where possible.
So limit the value of interface compact_memory to 1.

Chi, and Ye
diff mbox series

Patch

diff --git a/mm/compaction.c b/mm/compaction.c
index acbda28c11f4..39f4c8a6f843 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -2762,15 +2762,18 @@  int compaction_proactiveness_sysctl_handler(struct ctl_table *table, int write,

 	return 0;
 }
+static int sysctl_compact_memory;

 #ifdef CONFIG_SYSCTL
 static struct ctl_table vm_compact_memory[] = {
 	{
 		.procname	= "compact_memory",
-		.data		= NULL,
+		.data		= &sysctl_compact_memory,
 		.maxlen		= sizeof(int),
 		.mode		= 0200,
 		.proc_handler	= sysctl_compaction_handler,
+		.extra1		= SYSCTL_ONE,
+		.extra2		= SYSCTL_ONE,
 	},
 	{ }
 };
@@ -2782,6 +2785,11 @@  static struct ctl_table vm_compact_memory[] = {
 int sysctl_compaction_handler(struct ctl_table *table, int write,
 			void *buffer, size_t *length, loff_t *ppos)
 {
+	int ret;
+
+	ret = proc_dointvec_minmax(table, write, buffer, length, ppos);
+	if (ret)
+		return ret;
 	if (write)
 		compact_nodes();