From c0ea88b855590131a398f2ecdbed51c63b17926f Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Wed, 22 Jun 2011 19:47:01 +0200 Subject: [PATCH] --- yaml --- r: 263649 b: refs/heads/master c: 9c40cef2b799f9b5e7fa5de4d2ad3a0168ba118c h: refs/heads/master i: 263647: 3f53963b1064a6524529418910fe88c5cd92a7f9 v: v3 --- [refs] | 2 +- trunk/kernel/sched.c | 25 +++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index e1635f897610..7bd4085129a6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c259e01a1ec90063042f758e409cd26b2a0963c8 +refs/heads/master: 9c40cef2b799f9b5e7fa5de4d2ad3a0168ba118c diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index ec15e8129cf7..511732c39b6e 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -4322,16 +4322,6 @@ static void __sched __schedule(void) if (to_wakeup) try_to_wake_up_local(to_wakeup); } - - /* - * If we are going to sleep and we have plugged IO - * queued, make sure to submit it to avoid deadlocks. - */ - if (blk_needs_flush_plug(prev)) { - raw_spin_unlock(&rq->lock); - blk_schedule_flush_plug(prev); - raw_spin_lock(&rq->lock); - } } switch_count = &prev->nvcsw; } @@ -4370,8 +4360,23 @@ static void __sched __schedule(void) goto need_resched; } +static inline void sched_submit_work(struct task_struct *tsk) +{ + if (!tsk->state) + return; + /* + * If we are going to sleep and we have plugged IO queued, + * make sure to submit it to avoid deadlocks. + */ + if (blk_needs_flush_plug(tsk)) + blk_schedule_flush_plug(tsk); +} + asmlinkage void schedule(void) { + struct task_struct *tsk = current; + + sched_submit_work(tsk); __schedule(); } EXPORT_SYMBOL(schedule);