Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e251d02 authored by Al Viro's avatar Al Viro
Browse files

kill pin_put()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 92fc41c3
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -4,19 +4,8 @@
#include "internal.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);

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)
{
	spin_lock(&pin_lock);
+0 −1
Original line number Diff line number Diff line
@@ -12,6 +12,5 @@ struct fs_pin {
	void (*kill)(struct fs_pin *);
};

void pin_put(struct fs_pin *);
void pin_remove(struct fs_pin *);
void pin_insert(struct fs_pin *, struct vfsmount *);
+10 −4
Original line number Diff line number Diff line
@@ -124,6 +124,12 @@ static int check_free_space(struct bsd_acct_struct *acct)
	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)
{
	struct bsd_acct_struct *res;
@@ -144,7 +150,7 @@ static struct bsd_acct_struct *acct_get(struct pid_namespace *ns)
	mutex_lock(&res->lock);
	if (!res->ns) {
		mutex_unlock(&res->lock);
		pin_put(&res->pin);
		acct_put(res);
		goto again;
	}
	return res;
@@ -175,7 +181,7 @@ static void acct_kill(struct bsd_acct_struct *acct,
		acct->ns = NULL;
		atomic_long_dec(&acct->pin.count);
		mutex_unlock(&acct->lock);
		pin_put(&acct->pin);
		acct_put(acct);
	}
}

@@ -186,7 +192,7 @@ static void acct_pin_kill(struct fs_pin *pin)
	mutex_lock(&acct->lock);
	if (!acct->ns) {
		mutex_unlock(&acct->lock);
		pin_put(pin);
		acct_put(acct);
		acct = NULL;
	}
	acct_kill(acct, NULL);
@@ -576,7 +582,7 @@ static void slow_acct_process(struct pid_namespace *ns)
		if (acct) {
			do_acct_process(acct);
			mutex_unlock(&acct->lock);
			pin_put(&acct->pin);
			acct_put(acct);
		}
	}
}