提交 9e251d02 编写于 作者: A Al Viro

kill pin_put()

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 92fc41c3
...@@ -4,19 +4,8 @@ ...@@ -4,19 +4,8 @@
#include "internal.h" #include "internal.h"
#include "mount.h" #include "mount.h"
static void pin_free_rcu(struct rcu_head *head)
{
kfree(container_of(head, struct fs_pin, rcu));
}
static DEFINE_SPINLOCK(pin_lock); static DEFINE_SPINLOCK(pin_lock);
void pin_put(struct fs_pin *p)
{
if (atomic_long_dec_and_test(&p->count))
call_rcu(&p->rcu, pin_free_rcu);
}
void pin_remove(struct fs_pin *pin) void pin_remove(struct fs_pin *pin)
{ {
spin_lock(&pin_lock); spin_lock(&pin_lock);
......
...@@ -12,6 +12,5 @@ struct fs_pin { ...@@ -12,6 +12,5 @@ struct fs_pin {
void (*kill)(struct fs_pin *); void (*kill)(struct fs_pin *);
}; };
void pin_put(struct fs_pin *);
void pin_remove(struct fs_pin *); void pin_remove(struct fs_pin *);
void pin_insert(struct fs_pin *, struct vfsmount *); void pin_insert(struct fs_pin *, struct vfsmount *);
...@@ -124,6 +124,12 @@ static int check_free_space(struct bsd_acct_struct *acct) ...@@ -124,6 +124,12 @@ static int check_free_space(struct bsd_acct_struct *acct)
return acct->active; return acct->active;
} }
static void acct_put(struct bsd_acct_struct *p)
{
if (atomic_long_dec_and_test(&p->pin.count))
kfree_rcu(p, pin.rcu);
}
static struct bsd_acct_struct *acct_get(struct pid_namespace *ns) static struct bsd_acct_struct *acct_get(struct pid_namespace *ns)
{ {
struct bsd_acct_struct *res; struct bsd_acct_struct *res;
...@@ -144,7 +150,7 @@ static struct bsd_acct_struct *acct_get(struct pid_namespace *ns) ...@@ -144,7 +150,7 @@ static struct bsd_acct_struct *acct_get(struct pid_namespace *ns)
mutex_lock(&res->lock); mutex_lock(&res->lock);
if (!res->ns) { if (!res->ns) {
mutex_unlock(&res->lock); mutex_unlock(&res->lock);
pin_put(&res->pin); acct_put(res);
goto again; goto again;
} }
return res; return res;
...@@ -175,7 +181,7 @@ static void acct_kill(struct bsd_acct_struct *acct, ...@@ -175,7 +181,7 @@ static void acct_kill(struct bsd_acct_struct *acct,
acct->ns = NULL; acct->ns = NULL;
atomic_long_dec(&acct->pin.count); atomic_long_dec(&acct->pin.count);
mutex_unlock(&acct->lock); mutex_unlock(&acct->lock);
pin_put(&acct->pin); acct_put(acct);
} }
} }
...@@ -186,7 +192,7 @@ static void acct_pin_kill(struct fs_pin *pin) ...@@ -186,7 +192,7 @@ static void acct_pin_kill(struct fs_pin *pin)
mutex_lock(&acct->lock); mutex_lock(&acct->lock);
if (!acct->ns) { if (!acct->ns) {
mutex_unlock(&acct->lock); mutex_unlock(&acct->lock);
pin_put(pin); acct_put(acct);
acct = NULL; acct = NULL;
} }
acct_kill(acct, NULL); acct_kill(acct, NULL);
...@@ -576,7 +582,7 @@ static void slow_acct_process(struct pid_namespace *ns) ...@@ -576,7 +582,7 @@ static void slow_acct_process(struct pid_namespace *ns)
if (acct) { if (acct) {
do_acct_process(acct); do_acct_process(acct);
mutex_unlock(&acct->lock); mutex_unlock(&acct->lock);
pin_put(&acct->pin); acct_put(acct);
} }
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册