Messages in this thread | | | From | Linus Torvalds <> | Date | Thu, 5 Apr 2012 23:26:07 -0700 | Subject | Re: [PATCH] pid: remove redundant condition |
| |
On Thu, Apr 5, 2012 at 11:16 PM, Liu Ping Fan <kernelfans@gmail.com> wrote: > From: Liu Ping Fan <pingfank@linux.vnet.ibm.com> > > Signed-off-by: Liu Ping Fan <pingfank@linux.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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |