[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CA+55aFyT7vCjr0-3qdz_0oNVZ+a3K8A7F7aGVVzYtNdUkovp1Q@mail.gmail.com>
Date: Thu, 5 Apr 2012 23:26:07 -0700
From: Linus Torvalds <torvalds@...ux-foundation.org>
To: Liu Ping Fan <kernelfans@...il.com>
Cc: linux-kernel@...r.kernel.org
Subject: Re: [PATCH] pid: remove redundant condition
On Thu, Apr 5, 2012 at 11:16 PM, Liu Ping Fan <kernelfans@...il.com> wrote:
> From: Liu Ping Fan <pingfank@...ux.vnet.ibm.com>
>
> Signed-off-by: Liu Ping Fan <pingfank@...ux.vnet.ibm.com>
> ---
> kernel/pid.c | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/pid.c b/kernel/pid.c
> index 9f08dfa..e4ca244 100644
> --- a/kernel/pid.c
> +++ b/kernel/pid.c
> @@ -248,8 +248,7 @@ void put_pid(struct pid *pid)
> return;
>
> ns = pid->numbers[pid->level].ns;
> - if ((atomic_read(&pid->count) == 1) ||
> - atomic_dec_and_test(&pid->count)) {
> + if (atomic_dec_and_test(&pid->count) {
> kmem_cache_free(ns->pid_cachep, pid);
> put_pid_ns(ns);
> }
No, this isn't necessarily redundant.
The atomic_dec_and_test() instruction can be very expensive. So if
count was 1 before, we're the last user, and we can free it without
the expensive atomic_dec_and_test().
However, if we are *not* the last user, then we can race with another
user decrementing the count, so now we need to use the expensive
version.
Now, whether that special case is really worth it or not, I don't
know. But it's not redundant.
Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists