diff options
author | Tejun Heo <tj@kernel.org> | 2014-09-24 13:00:21 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2014-09-24 13:00:21 -0400 |
commit | d06efebf0c37d438fcf07057be00dd40fcfce08d (patch) | |
tree | 31a0786d132aadf4cbb9725f3f444ef6e1052128 /lib/percpu-refcount.c | |
parent | bb2e226b3bef596dd56be97df655d857b4603923 (diff) | |
parent | 0a30288da1aec914e158c2d7a3482a85f632750f (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block into for-3.18
This is to receive 0a30288da1ae ("blk-mq, percpu_ref: implement a
kludge for SCSI blk-mq stall during probe") which implements
__percpu_ref_kill_expedited() to work around SCSI blk-mq stall. The
commit reverted and patches to implement proper fix will be added.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Kent Overstreet <kmo@daterainc.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'lib/percpu-refcount.c')
-rw-r--r-- | lib/percpu-refcount.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c index 559ee0b20318..c6c31e2829b1 100644 --- a/lib/percpu-refcount.c +++ b/lib/percpu-refcount.c | |||
@@ -189,3 +189,19 @@ void percpu_ref_kill_and_confirm(struct percpu_ref *ref, | |||
189 | call_rcu_sched(&ref->rcu, percpu_ref_kill_rcu); | 189 | call_rcu_sched(&ref->rcu, percpu_ref_kill_rcu); |
190 | } | 190 | } |
191 | EXPORT_SYMBOL_GPL(percpu_ref_kill_and_confirm); | 191 | EXPORT_SYMBOL_GPL(percpu_ref_kill_and_confirm); |
192 | |||
193 | /* | ||
194 | * XXX: Temporary kludge to work around SCSI blk-mq stall. Used only by | ||
195 | * block/blk-mq.c::blk_mq_freeze_queue(). Will be removed during v3.18 | ||
196 | * devel cycle. Do not use anywhere else. | ||
197 | */ | ||
198 | void __percpu_ref_kill_expedited(struct percpu_ref *ref) | ||
199 | { | ||
200 | WARN_ONCE(ref->pcpu_count_ptr & PCPU_REF_DEAD, | ||
201 | "percpu_ref_kill() called more than once on %pf!", | ||
202 | ref->release); | ||
203 | |||
204 | ref->pcpu_count_ptr |= PCPU_REF_DEAD; | ||
205 | synchronize_sched_expedited(); | ||
206 | percpu_ref_kill_rcu(&ref->rcu); | ||
207 | } | ||