summaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorJosef Bacik <josef@toxicpanda.com>2018-07-31 18:39:04 +0200
committerJens Axboe <axboe@kernel.dk>2018-08-01 17:16:04 +0200
commit2c323017e381c55c5ce2a603b8305bb18c1162cc (patch)
treedec6e7ee5c6b022966a69e4422d4e33a3adfbcba /kernel/fork.c
parentblk-cgroup: hold the queue ref during throttling (diff)
downloadlinux-2c323017e381c55c5ce2a603b8305bb18c1162cc.tar.xz
linux-2c323017e381c55c5ce2a603b8305bb18c1162cc.zip
blk-cgroup: clear the throttle queue on fork
We were hitting a panic in production where we put too many times on the request queue. This is because we'd get the throttle_queue of the parent if we fork()'ed while we needed to be throttled, but we didn't have a reference on it. Instead just clear these flags on fork so the child doesn't pay for the sins of its father. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 9440d61b925c..694ae0e56866 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -843,6 +843,11 @@ static struct task_struct *dup_task_struct(struct task_struct *orig, int node)
tsk->fail_nth = 0;
#endif
+#ifdef CONFIG_BLK_CGROUP
+ tsk->throttle_queue = NULL;
+ tsk->use_memdelay = 0;
+#endif
+
return tsk;
free_stack: