summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/proc/inode.c12
-rw-r--r--fs/proc/internal.h2
-rw-r--r--fs/proc/root.c2
3 files changed, 10 insertions, 6 deletions
diff --git a/fs/proc/inode.c b/fs/proc/inode.c
index 0331ddbee4f6..5349eb07ac29 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -54,6 +54,7 @@ static void proc_evict_inode(struct inode *inode)
}
static struct kmem_cache *proc_inode_cachep __ro_after_init;
+static struct kmem_cache *pde_opener_cache __ro_after_init;
static struct inode *proc_alloc_inode(struct super_block *sb)
{
@@ -92,7 +93,7 @@ static void init_once(void *foo)
inode_init_once(&ei->vfs_inode);
}
-void __init proc_init_inodecache(void)
+void __init proc_init_kmemcache(void)
{
proc_inode_cachep = kmem_cache_create("proc_inode_cache",
sizeof(struct proc_inode),
@@ -100,6 +101,9 @@ void __init proc_init_inodecache(void)
SLAB_MEM_SPREAD|SLAB_ACCOUNT|
SLAB_PANIC),
init_once);
+ pde_opener_cache =
+ kmem_cache_create("pde_opener", sizeof(struct pde_opener), 0,
+ SLAB_PANIC, NULL);
}
static int proc_show_options(struct seq_file *seq, struct dentry *root)
@@ -172,7 +176,7 @@ static void close_pdeo(struct proc_dir_entry *pde, struct pde_opener *pdeo)
spin_unlock(&pde->pde_unload_lock);
if (unlikely(c))
complete(c);
- kfree(pdeo);
+ kmem_cache_free(pde_opener_cache, pdeo);
}
}
@@ -347,7 +351,7 @@ static int proc_reg_open(struct inode *inode, struct file *file)
release = pde->proc_fops->release;
if (release) {
- pdeo = kmalloc(sizeof(struct pde_opener), GFP_KERNEL);
+ pdeo = kmem_cache_alloc(pde_opener_cache, GFP_KERNEL);
if (!pdeo) {
rv = -ENOMEM;
goto out_unuse;
@@ -368,7 +372,7 @@ static int proc_reg_open(struct inode *inode, struct file *file)
list_add(&pdeo->lh, &pde->pde_openers);
spin_unlock(&pde->pde_unload_lock);
} else
- kfree(pdeo);
+ kmem_cache_free(pde_opener_cache, pdeo);
}
out_unuse:
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
index 713d5dfe3f05..dc00ef8538cb 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -182,7 +182,7 @@ extern const struct inode_operations proc_link_inode_operations;
extern const struct inode_operations proc_pid_link_inode_operations;
-extern void proc_init_inodecache(void);
+void proc_init_kmemcache(void);
void set_proc_pid_nlink(void);
extern struct inode *proc_get_inode(struct super_block *, struct proc_dir_entry *);
extern int proc_fill_super(struct super_block *, void *data, int flags);
diff --git a/fs/proc/root.c b/fs/proc/root.c
index 4a19e02c7ed0..98797b762a71 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -125,7 +125,7 @@ void __init proc_root_init(void)
{
int err;
- proc_init_inodecache();
+ proc_init_kmemcache();
set_proc_pid_nlink();
err = register_filesystem(&proc_fs_type);
if (err)