percpu_ref: make INIT_ATOMIC and switch_to_atomic() sticky
authorTejun Heo <tj@kernel.org>
Wed, 24 Sep 2014 17:31:50 +0000 (13:31 -0400)
committerTejun Heo <tj@kernel.org>
Wed, 24 Sep 2014 17:31:50 +0000 (13:31 -0400)
commit1cae13e75b7a7848c03138636d4eb8d8a5054dd5
tree309eaf4b79e7a8e41e17175f3475d46bef57c2a6
parent2aad2a86f6685c10360ec8a5a55eb9ab7059cb72
percpu_ref: make INIT_ATOMIC and switch_to_atomic() sticky

Currently, a percpu_ref which is initialized with
PERPCU_REF_INIT_ATOMIC or switched to atomic mode via
switch_to_atomic() automatically reverts to percpu mode on the first
percpu_ref_reinit().  This makes the atomic mode difficult to use for
cases where a percpu_ref is used as a persistent on/off switch which
may be cycled multiple times.

This patch makes such atomic state sticky so that it survives through
kill/reinit cycles.  After this patch, atomic state is cleared only by
an explicit percpu_ref_switch_to_percpu() call.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Kent Overstreet <kmo@daterainc.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
include/linux/percpu-refcount.h
lib/percpu-refcount.c