proc: mark more files as permanent
authorAlexey Dobriyan <adobriyan@gmail.com>
Tue, 20 Sep 2022 17:35:23 +0000 (20:35 +0300)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 3 Oct 2022 21:21:45 +0000 (14:21 -0700)
Mark
/proc/devices
/proc/kpagecount
/proc/kpageflags
/proc/kpagecgroup
/proc/loadavg
/proc/meminfo
/proc/softirqs
/proc/uptime
/proc/version

as permanent /proc entries, saving alloc/free and some list/spinlock ops
per use.

These files are never removed by the kernel so it is OK to mark them.

Link: https://lkml.kernel.org/r/Yyn527DzDMa+r0Yj@localhost.localdomain
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/proc/devices.c
fs/proc/internal.h
fs/proc/loadavg.c
fs/proc/meminfo.c
fs/proc/page.c
fs/proc/softirqs.c
fs/proc/uptime.c
fs/proc/version.c

index 837971e741097832d4033c24dc77749ae9bf82ce..fe7bfcb7d0494251de4efa9f9964043623f43b42 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/blkdev.h>
+#include "internal.h"
 
 static int devinfo_show(struct seq_file *f, void *v)
 {
@@ -54,7 +55,10 @@ static const struct seq_operations devinfo_ops = {
 
 static int __init proc_devices_init(void)
 {
-       proc_create_seq("devices", 0, NULL, &devinfo_ops);
+       struct proc_dir_entry *pde;
+
+       pde = proc_create_seq("devices", 0, NULL, &devinfo_ops);
+       pde_make_permanent(pde);
        return 0;
 }
 fs_initcall(proc_devices_init);
index 06a80f78433d8b40f48aa9419f3b51c9e8f77f65..af277184b8073566207c41bd1f56a05316d2dc30 100644 (file)
@@ -79,6 +79,11 @@ static inline bool pde_is_permanent(const struct proc_dir_entry *pde)
        return pde->flags & PROC_ENTRY_PERMANENT;
 }
 
+static inline void pde_make_permanent(struct proc_dir_entry *pde)
+{
+       pde->flags |= PROC_ENTRY_PERMANENT;
+}
+
 extern struct kmem_cache *proc_dir_entry_cache;
 void pde_free(struct proc_dir_entry *pde);
 
index f32878d9a39f394adfbbd2cfcc2b9535ccf20ff0..817981e57223ef62a362f9c57319c125e1e9b6b8 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/seq_file.h>
 #include <linux/seqlock.h>
 #include <linux/time.h>
+#include "internal.h"
 
 static int loadavg_proc_show(struct seq_file *m, void *v)
 {
@@ -27,7 +28,10 @@ static int loadavg_proc_show(struct seq_file *m, void *v)
 
 static int __init proc_loadavg_init(void)
 {
-       proc_create_single("loadavg", 0, NULL, loadavg_proc_show);
+       struct proc_dir_entry *pde;
+
+       pde = proc_create_single("loadavg", 0, NULL, loadavg_proc_show);
+       pde_make_permanent(pde);
        return 0;
 }
 fs_initcall(proc_loadavg_init);
index 6e89f0e2fd20f101d84b3c27daf9045ea33af697..70e5294052d52616b5d1b13ff64d5da88f6d19c9 100644 (file)
@@ -162,7 +162,10 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
 
 static int __init proc_meminfo_init(void)
 {
-       proc_create_single("meminfo", 0, NULL, meminfo_proc_show);
+       struct proc_dir_entry *pde;
+
+       pde = proc_create_single("meminfo", 0, NULL, meminfo_proc_show);
+       pde_make_permanent(pde);
        return 0;
 }
 fs_initcall(proc_meminfo_init);
index a2873a617ae86232c12376064cbc8ffc4df59ab8..f2273b164535bb33490c021a3bfbbb14a1dc9906 100644 (file)
@@ -91,6 +91,7 @@ static ssize_t kpagecount_read(struct file *file, char __user *buf,
 }
 
 static const struct proc_ops kpagecount_proc_ops = {
+       .proc_flags     = PROC_ENTRY_PERMANENT,
        .proc_lseek     = mem_lseek,
        .proc_read      = kpagecount_read,
 };
@@ -268,6 +269,7 @@ static ssize_t kpageflags_read(struct file *file, char __user *buf,
 }
 
 static const struct proc_ops kpageflags_proc_ops = {
+       .proc_flags     = PROC_ENTRY_PERMANENT,
        .proc_lseek     = mem_lseek,
        .proc_read      = kpageflags_read,
 };
@@ -322,6 +324,7 @@ static ssize_t kpagecgroup_read(struct file *file, char __user *buf,
 }
 
 static const struct proc_ops kpagecgroup_proc_ops = {
+       .proc_flags     = PROC_ENTRY_PERMANENT,
        .proc_lseek     = mem_lseek,
        .proc_read      = kpagecgroup_read,
 };
index 12901dcf57e2bdce9610e8979f1f1d3781e55bc1..f4616083faef3bbb9e00e64d212d67cd650d2a1c 100644 (file)
@@ -3,6 +3,7 @@
 #include <linux/kernel_stat.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include "internal.h"
 
 /*
  * /proc/softirqs  ... display the number of softirqs
@@ -27,7 +28,10 @@ static int show_softirqs(struct seq_file *p, void *v)
 
 static int __init proc_softirqs_init(void)
 {
-       proc_create_single("softirqs", 0, NULL, show_softirqs);
+       struct proc_dir_entry *pde;
+
+       pde = proc_create_single("softirqs", 0, NULL, show_softirqs);
+       pde_make_permanent(pde);
        return 0;
 }
 fs_initcall(proc_softirqs_init);
index deb99bc9b7e6b009b8f2210bdf6a0959bfcbe9ed..b5343d209381aae892d2423602607f1ce05e479e 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/time.h>
 #include <linux/time_namespace.h>
 #include <linux/kernel_stat.h>
+#include "internal.h"
 
 static int uptime_proc_show(struct seq_file *m, void *v)
 {
@@ -39,7 +40,10 @@ static int uptime_proc_show(struct seq_file *m, void *v)
 
 static int __init proc_uptime_init(void)
 {
-       proc_create_single("uptime", 0, NULL, uptime_proc_show);
+       struct proc_dir_entry *pde;
+
+       pde = proc_create_single("uptime", 0, NULL, uptime_proc_show);
+       pde_make_permanent(pde);
        return 0;
 }
 fs_initcall(proc_uptime_init);
index b449f186577f82e0f8e7776d906099ac423d1ed9..02e3c3cd4a9af1e82361e1469ad777e9e53c2f4a 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/utsname.h>
+#include "internal.h"
 
 static int version_proc_show(struct seq_file *m, void *v)
 {
@@ -17,7 +18,10 @@ static int version_proc_show(struct seq_file *m, void *v)
 
 static int __init proc_version_init(void)
 {
-       proc_create_single("version", 0, NULL, version_proc_show);
+       struct proc_dir_entry *pde;
+
+       pde = proc_create_single("version", 0, NULL, version_proc_show);
+       pde_make_permanent(pde);
        return 0;
 }
 fs_initcall(proc_version_init);