From: Linus Torvalds Date: Wed, 2 Jan 2008 21:04:48 +0000 (-0800) Subject: Unify /proc/slabinfo configuration X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=158a962422e4a54dc256b6a9b9562f3d30d34d9c;p=openwrt%2Fstaging%2Fblogic.git Unify /proc/slabinfo configuration Both SLUB and SLAB really did almost exactly the same thing for /proc/slabinfo setup, using duplicate code and per-allocator #ifdef's. This just creates a common CONFIG_SLABINFO that is enabled by both SLUB and SLAB, and shares all the setup code. Maybe SLOB will want this some day too. Reviewed-by: Pekka Enberg Signed-off-by: Linus Torvalds --- diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index a11968bc0516..3462bfde89f6 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c @@ -410,7 +410,7 @@ static const struct file_operations proc_modules_operations = { }; #endif -#ifdef CONFIG_SLAB +#ifdef CONFIG_SLABINFO static int slabinfo_open(struct inode *inode, struct file *file) { return seq_open(file, &slabinfo_op); @@ -451,20 +451,6 @@ static const struct file_operations proc_slabstats_operations = { #endif #endif -#ifdef CONFIG_SLUB -static int slabinfo_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &slabinfo_op); -} - -static const struct file_operations proc_slabinfo_operations = { - .open = slabinfo_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif - static int show_stat(struct seq_file *p, void *v) { int i; @@ -742,14 +728,11 @@ void __init proc_misc_init(void) #endif create_seq_entry("stat", 0, &proc_stat_operations); create_seq_entry("interrupts", 0, &proc_interrupts_operations); -#ifdef CONFIG_SLAB +#ifdef CONFIG_SLABINFO create_seq_entry("slabinfo",S_IWUSR|S_IRUGO,&proc_slabinfo_operations); #ifdef CONFIG_DEBUG_SLAB_LEAK create_seq_entry("slab_allocators", 0 ,&proc_slabstats_operations); #endif -#endif -#ifdef CONFIG_SLUB - create_seq_entry("slabinfo", S_IWUSR|S_IRUGO, &proc_slabinfo_operations); #endif create_seq_entry("buddyinfo",S_IRUGO, &fragmentation_file_operations); create_seq_entry("pagetypeinfo", S_IRUGO, &pagetypeinfo_file_ops); diff --git a/include/linux/slab.h b/include/linux/slab.h index f3a8eecd99f3..f62caaad94e0 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -271,5 +271,10 @@ static inline void *kzalloc(size_t size, gfp_t flags) return kmalloc(size, flags | __GFP_ZERO); } +#ifdef CONFIG_SLABINFO +extern const struct seq_operations slabinfo_op; +ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *); +#endif + #endif /* __KERNEL__ */ #endif /* _LINUX_SLAB_H */ diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index 32bdc2ffd715..fcc48096ee64 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h @@ -95,7 +95,4 @@ found: #endif /* CONFIG_NUMA */ -extern const struct seq_operations slabinfo_op; -ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *); - #endif /* _LINUX_SLAB_DEF_H */ diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index b7d9408a00ff..40801e754afb 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h @@ -200,6 +200,4 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) } #endif -extern const struct seq_operations slabinfo_op; - #endif /* _LINUX_SLUB_DEF_H */ diff --git a/init/Kconfig b/init/Kconfig index 404bbf3699be..b9d11a899b88 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -658,6 +658,12 @@ endchoice endmenu # General setup +config SLABINFO + bool + depends on PROC_FS + depends on SLAB || SLUB + default y + config RT_MUTEXES boolean select PLIST diff --git a/mm/slab.c b/mm/slab.c index 2e338a5f7b14..aebb9f68557a 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -4105,7 +4105,7 @@ out: schedule_delayed_work(work, round_jiffies_relative(REAPTIMEOUT_CPUC)); } -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_SLABINFO static void print_slabinfo_header(struct seq_file *m) { diff --git a/mm/slub.c b/mm/slub.c index 903dabd92daf..474945ecd89d 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -4127,7 +4127,14 @@ __initcall(slab_sysfs_init); /* * The /proc/slabinfo ABI */ -#ifdef CONFIG_PROC_FS +#ifdef CONFIG_SLABINFO + +ssize_t slabinfo_write(struct file *file, const char __user * buffer, + size_t count, loff_t *ppos) +{ + return -EINVAL; +} + static void print_slabinfo_header(struct seq_file *m) { @@ -4201,4 +4208,4 @@ const struct seq_operations slabinfo_op = { .show = s_show, }; -#endif /* CONFIG_PROC_FS */ +#endif /* CONFIG_SLABINFO */