diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-01-10 00:07:35 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-01-25 23:16:29 -0500 |
commit | 32426f6653cbfde1ca16aff27a530ee36332f796 (patch) | |
tree | 87c9d86a5c164745acaf0a20a0ff92485c070bd2 /kernel | |
parent | 9e251d02041432487d89cb340e72490c4bbc198a (diff) |
pull bumping refcount into ->kill()
there will be one more change of ->kill() calling conventions; this
isn't final.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/acct.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index 7bb9e659a7da..a74f3d1a0c26 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -189,6 +189,12 @@ static void acct_pin_kill(struct fs_pin *pin) { struct bsd_acct_struct *acct; acct = container_of(pin, struct bsd_acct_struct, pin); + if (!atomic_long_inc_not_zero(&pin->count)) { + rcu_read_unlock(); + cpu_relax(); + return; + } + rcu_read_unlock(); mutex_lock(&acct->lock); if (!acct->ns) { mutex_unlock(&acct->lock); |