proc: rename de_get() to pde_get() and inline it
* de_get() is trivial -- make inline, save a few bits of code, drop "refcount is 0" check -- it should be done in some generic refcount code, don't recall it's was helpful * rename GET and PUT functions to pde_get(), pde_put() for cool prefix! * remove obvious and incorrent comments * in remove_proc_entry() use pde_put(), when I fixed PDE refcounting to be normal one, remove_proc_entry() was supposed to do "-1" and code now reflects that. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f065f41f48
commit
135d5655dc
|
@ -429,7 +429,7 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir,
|
||||||
unsigned int ino;
|
unsigned int ino;
|
||||||
|
|
||||||
ino = de->low_ino;
|
ino = de->low_ino;
|
||||||
de_get(de);
|
pde_get(de);
|
||||||
spin_unlock(&proc_subdir_lock);
|
spin_unlock(&proc_subdir_lock);
|
||||||
error = -EINVAL;
|
error = -EINVAL;
|
||||||
inode = proc_get_inode(dir->i_sb, ino, de);
|
inode = proc_get_inode(dir->i_sb, ino, de);
|
||||||
|
@ -445,7 +445,7 @@ out_unlock:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (de)
|
if (de)
|
||||||
de_put(de);
|
pde_put(de);
|
||||||
return ERR_PTR(error);
|
return ERR_PTR(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,17 +509,17 @@ int proc_readdir_de(struct proc_dir_entry *de, struct file *filp, void *dirent,
|
||||||
struct proc_dir_entry *next;
|
struct proc_dir_entry *next;
|
||||||
|
|
||||||
/* filldir passes info to user space */
|
/* filldir passes info to user space */
|
||||||
de_get(de);
|
pde_get(de);
|
||||||
spin_unlock(&proc_subdir_lock);
|
spin_unlock(&proc_subdir_lock);
|
||||||
if (filldir(dirent, de->name, de->namelen, filp->f_pos,
|
if (filldir(dirent, de->name, de->namelen, filp->f_pos,
|
||||||
de->low_ino, de->mode >> 12) < 0) {
|
de->low_ino, de->mode >> 12) < 0) {
|
||||||
de_put(de);
|
pde_put(de);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
spin_lock(&proc_subdir_lock);
|
spin_lock(&proc_subdir_lock);
|
||||||
filp->f_pos++;
|
filp->f_pos++;
|
||||||
next = de->next;
|
next = de->next;
|
||||||
de_put(de);
|
pde_put(de);
|
||||||
de = next;
|
de = next;
|
||||||
} while (de);
|
} while (de);
|
||||||
spin_unlock(&proc_subdir_lock);
|
spin_unlock(&proc_subdir_lock);
|
||||||
|
@ -763,7 +763,7 @@ out:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_proc_entry(struct proc_dir_entry *de)
|
static void free_proc_entry(struct proc_dir_entry *de)
|
||||||
{
|
{
|
||||||
unsigned int ino = de->low_ino;
|
unsigned int ino = de->low_ino;
|
||||||
|
|
||||||
|
@ -777,6 +777,12 @@ void free_proc_entry(struct proc_dir_entry *de)
|
||||||
kfree(de);
|
kfree(de);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pde_put(struct proc_dir_entry *pde)
|
||||||
|
{
|
||||||
|
if (atomic_dec_and_test(&pde->count))
|
||||||
|
free_proc_entry(pde);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove a /proc entry and free it if it's not currently in use.
|
* Remove a /proc entry and free it if it's not currently in use.
|
||||||
*/
|
*/
|
||||||
|
@ -845,6 +851,5 @@ continue_removing:
|
||||||
WARN(de->subdir, KERN_WARNING "%s: removing non-empty directory "
|
WARN(de->subdir, KERN_WARNING "%s: removing non-empty directory "
|
||||||
"'%s/%s', leaking at least '%s'\n", __func__,
|
"'%s/%s', leaking at least '%s'\n", __func__,
|
||||||
de->parent->name, de->name, de->subdir->name);
|
de->parent->name, de->name, de->subdir->name);
|
||||||
if (atomic_dec_and_test(&de->count))
|
pde_put(de);
|
||||||
free_proc_entry(de);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,29 +24,6 @@
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
struct proc_dir_entry *de_get(struct proc_dir_entry *de)
|
|
||||||
{
|
|
||||||
atomic_inc(&de->count);
|
|
||||||
return de;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Decrements the use count and checks for deferred deletion.
|
|
||||||
*/
|
|
||||||
void de_put(struct proc_dir_entry *de)
|
|
||||||
{
|
|
||||||
if (!atomic_read(&de->count)) {
|
|
||||||
printk("de_put: entry %s already free!\n", de->name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (atomic_dec_and_test(&de->count))
|
|
||||||
free_proc_entry(de);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Decrement the use count of the proc_dir_entry.
|
|
||||||
*/
|
|
||||||
static void proc_delete_inode(struct inode *inode)
|
static void proc_delete_inode(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct proc_dir_entry *de;
|
struct proc_dir_entry *de;
|
||||||
|
@ -59,7 +36,7 @@ static void proc_delete_inode(struct inode *inode)
|
||||||
/* Let go of any associated proc directory entry */
|
/* Let go of any associated proc directory entry */
|
||||||
de = PROC_I(inode)->pde;
|
de = PROC_I(inode)->pde;
|
||||||
if (de)
|
if (de)
|
||||||
de_put(de);
|
pde_put(de);
|
||||||
if (PROC_I(inode)->sysctl)
|
if (PROC_I(inode)->sysctl)
|
||||||
sysctl_head_put(PROC_I(inode)->sysctl);
|
sysctl_head_put(PROC_I(inode)->sysctl);
|
||||||
clear_inode(inode);
|
clear_inode(inode);
|
||||||
|
@ -480,7 +457,7 @@ struct inode *proc_get_inode(struct super_block *sb, unsigned int ino,
|
||||||
}
|
}
|
||||||
unlock_new_inode(inode);
|
unlock_new_inode(inode);
|
||||||
} else
|
} else
|
||||||
de_put(de);
|
pde_put(de);
|
||||||
return inode;
|
return inode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -495,7 +472,7 @@ int proc_fill_super(struct super_block *s)
|
||||||
s->s_op = &proc_sops;
|
s->s_op = &proc_sops;
|
||||||
s->s_time_gran = 1;
|
s->s_time_gran = 1;
|
||||||
|
|
||||||
de_get(&proc_root);
|
pde_get(&proc_root);
|
||||||
root_inode = proc_get_inode(s, PROC_ROOT_INO, &proc_root);
|
root_inode = proc_get_inode(s, PROC_ROOT_INO, &proc_root);
|
||||||
if (!root_inode)
|
if (!root_inode)
|
||||||
goto out_no_root;
|
goto out_no_root;
|
||||||
|
@ -509,6 +486,6 @@ int proc_fill_super(struct super_block *s)
|
||||||
out_no_root:
|
out_no_root:
|
||||||
printk("proc_read_super: get root inode failed\n");
|
printk("proc_read_super: get root inode failed\n");
|
||||||
iput(root_inode);
|
iput(root_inode);
|
||||||
de_put(&proc_root);
|
pde_put(&proc_root);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,8 +61,6 @@ extern const struct file_operations proc_pagemap_operations;
|
||||||
extern const struct file_operations proc_net_operations;
|
extern const struct file_operations proc_net_operations;
|
||||||
extern const struct inode_operations proc_net_inode_operations;
|
extern const struct inode_operations proc_net_inode_operations;
|
||||||
|
|
||||||
void free_proc_entry(struct proc_dir_entry *de);
|
|
||||||
|
|
||||||
void proc_init_inodecache(void);
|
void proc_init_inodecache(void);
|
||||||
|
|
||||||
static inline struct pid *proc_pid(struct inode *inode)
|
static inline struct pid *proc_pid(struct inode *inode)
|
||||||
|
@ -101,8 +99,12 @@ unsigned long task_vsize(struct mm_struct *);
|
||||||
int task_statm(struct mm_struct *, int *, int *, int *, int *);
|
int task_statm(struct mm_struct *, int *, int *, int *, int *);
|
||||||
void task_mem(struct seq_file *, struct mm_struct *);
|
void task_mem(struct seq_file *, struct mm_struct *);
|
||||||
|
|
||||||
struct proc_dir_entry *de_get(struct proc_dir_entry *de);
|
static inline struct proc_dir_entry *pde_get(struct proc_dir_entry *pde)
|
||||||
void de_put(struct proc_dir_entry *de);
|
{
|
||||||
|
atomic_inc(&pde->count);
|
||||||
|
return pde;
|
||||||
|
}
|
||||||
|
void pde_put(struct proc_dir_entry *pde);
|
||||||
|
|
||||||
extern struct vfsmount *proc_mnt;
|
extern struct vfsmount *proc_mnt;
|
||||||
int proc_fill_super(struct super_block *);
|
int proc_fill_super(struct super_block *);
|
||||||
|
|
Loading…
Reference in New Issue