lkml.org 
[lkml]   [2010]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv6 04/15] writeback: do not lose wake-ups in the forker thread - 2
    Date
    From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>

    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>
    ---
    mm/backing-dev.c | 4 ++++
    1 files changed, 4 insertions(+), 0 deletions(-)

    diff --git a/mm/backing-dev.c b/mm/backing-dev.c
    index b1dc2d4..72e6eb9 100644
    --- a/mm/backing-dev.c
    +++ b/mm/backing-dev.c
    @@ -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;

    --
    1.7.1.1


    \
     
     \ /
      Last update: 2010-07-25 13:33    [W:2.132 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site