proc: switch struct proc_dir_entry::count to refcount
PATCH 1/1 proc: switch struct proc_dir_entry::count to refcount
->count is honest reference count unlike ->in_use.
Signed-off-by Alexey Dobriyan <[email protected]>
---
fs/proc/generic.c | 4 ++-- fs/proc/internal.h | 5 +++-- fs/proc/root.c | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-)
fs/proc/generic.c +2 -2
@@ -423,7 +423,7 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent, ent->mode = mode; ent->nlink = nlink; ent->subdir =RB_ROOT_CACHED ; -atomic_set (&ent->count,1 ); +refcount_set (&ent->refcnt,1 );spin_lock_init (&ent->pde_unload_lock);INIT_LIST_HEAD (&ent->pde_openers);proc_set_user (ent, (*parent)->uid, (*parent)->gid);
@@ -574,7 +574,7 @@ EXPORT_SYMBOL(proc_set_user);void pde_put (struct proc_dir_entry *pde) { -if (atomic_dec_and_test (&pde->count)) { +if (refcount_dec_and_test (&pde->refcnt)) {proc_free_inum (pde->low_ino);pde_free (pde); }
fs/proc/internal.h +3 -2
@@ -11,6 +11,7 @@#include <linux/proc_fs.h> #include <linux/proc_ns.h> +#include <linux/refcount.h> #include <linux/spinlock.h> #include <linux/atomic.h> #include <linux/binfmts.h>
@@ -36,7 +37,7 @@ struct proc_dir_entry {* negative -> it's going away RSN */ atomic_t in_use; -atomic_t count;/* use count */ +refcount_t refcnt;struct list_head pde_openers;/* who did ->open, but not ->release */ /* protects ->pde_openers and all struct pde_opener instances */ spinlock_t pde_unload_lock;
@@ -168,7 +169,7 @@ int proc_readdir_de(struct file *, struct dir_context *, struct proc_dir_entry *static inline struct proc_dir_entry *pde_get (struct proc_dir_entry *pde) { -atomic_inc (&pde->count); +refcount_inc (&pde->refcnt);return pde; }extern void pde_put (struct proc_dir_entry *);
fs/proc/root.c +1 -1
@@ -199,7 +199,7 @@ struct proc_dir_entry proc_root = { .namelen = 5, .mode = S_IFDIR | S_IRUGO | S_IXUGO, .nlink = 2, - .count = ATOMIC_INIT(1), + .refcnt = REFCOUNT_INIT(1), .proc_iops = &proc_root_inode_operations, .proc_fops = &proc_root_operations, .parent = &proc_root,