writeback: do not lose wake-ups in the forker thread - 2
Currently, if someone submits jobs for the default bdi, we can lose wake-up events. E.g., this can happen if 'bdi_queue_work()' is called when 'bdi_forker_thread()' is executing code after 'wb_do_writeback(me, 0)', but before 'set_current_state(TASK_INTERRUPTIBLE)'. This situation is unlikely, and the result is not very severe - we'll just delay the execution of the work, but this is still not very nice. This patch fixes the issue by checking whether the default bdi has works before the forker thread goes sleep. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
This commit is contained in:
parent
c5f7ad233b
commit
c4ec7908c2
1 changed files with 4 additions and 0 deletions
|
@ -358,6 +358,10 @@ static int bdi_forker_thread(void *ptr)
|
|||
bdi_add_default_flusher_thread(bdi);
|
||||
}
|
||||
|
||||
/* Keep working if default bdi still has things to do */
|
||||
if (!list_empty(&me->bdi->work_list))
|
||||
__set_current_state(TASK_RUNNING);
|
||||
|
||||
if (list_empty(&bdi_pending_list)) {
|
||||
unsigned long wait;
|
||||
|
||||
|
|
Loading…
Reference in a new issue