Commit ef1d6178 authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Andrew Morton
Browse files

proc: mark more files as permanent

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: default avatarAlexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent da6f7916
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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);

+5 −1
Original line number Diff line number Diff line
@@ -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);
+4 −1
Original line number Diff line number Diff line
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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,
};
Loading