|
@@ -4322,16 +4322,6 @@ need_resched:
|
|
|
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 @@ need_resched:
|
|
|
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);
|