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 |
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
>> 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 --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();