diff options
author | Tejun Heo <tj@kernel.org> | 2011-12-27 12:52:16 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2011-12-27 12:52:16 -0500 |
commit | c98b2cc29af8e84e7364b53e9bb4cc7cfaf62555 (patch) | |
tree | ed6e9642bb32fe53f5c036c66df4b6692228d0a9 /block/blk-ioc.c | |
parent | fd63836811d6e5b5f5f608abf865bc9e91762c8c (diff) |
block: remove WARN_ON_ONCE() in exit_io_context()
6e736be7 "block: make ioc get/put interface more conventional and fix
race on alloction" added WARN_ON_ONCE() in exit_io_context() which
triggers if !PF_EXITING. All tasks hitting exit_io_context() from
task exit should have PF_EXITING set but task struct tearing down
after fork failure calls into the function without PF_EXITING,
triggering the condition.
WARNING: at block/blk-ioc.c:234 exit_io_context+0x40/0x92()
Pid: 17090, comm: trinity Not tainted 3.2.0-rc6-next-20111222-sasha-dirty #77
Call Trace:
[<ffffffff810b69a3>] warn_slowpath_common+0x8f/0xb2
[<ffffffff810b6a77>] warn_slowpath_null+0x18/0x1a
[<ffffffff8181a7a2>] exit_io_context+0x40/0x92
[<ffffffff810b58c9>] copy_process+0x126f/0x1453
[<ffffffff810b5c1b>] do_fork+0x120/0x3e9
[<ffffffff8106242f>] sys_clone+0x26/0x28
[<ffffffff82425803>] stub_clone+0x13/0x20
---[ end trace a2e4eb670b375238 ]---
Reported-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-ioc.c')
-rw-r--r-- | block/blk-ioc.c | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/block/blk-ioc.c b/block/blk-ioc.c index 33fae7df16a0..27a06e00eaec 100644 --- a/block/blk-ioc.c +++ b/block/blk-ioc.c | |||
@@ -230,9 +230,6 @@ void exit_io_context(struct task_struct *task) | |||
230 | { | 230 | { |
231 | struct io_context *ioc; | 231 | struct io_context *ioc; |
232 | 232 | ||
233 | /* PF_EXITING prevents new io_context from being attached to @task */ | ||
234 | WARN_ON_ONCE(!(current->flags & PF_EXITING)); | ||
235 | |||
236 | task_lock(task); | 233 | task_lock(task); |
237 | ioc = task->io_context; | 234 | ioc = task->io_context; |
238 | task->io_context = NULL; | 235 | task->io_context = NULL; |