lkml.org 
[lkml]   [2010]   [Jul]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv4 05/14] writeback: do not lose wake-ups in bdi threads
    Date
    From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>

    Currently, bdi threads ('bdi_writeback_thread()') can lose wake-ups. For
    example, if 'bdi_queue_work()' is executed after the bdi thread have had
    finished 'wb_do_writeback()' but before it called
    'schedule_timeout_interruptible()'.

    To fix this issue, we have to check whether we have works to process after we
    have changed the task state to 'TASK_INTERRUPTIBLE'.

    This patch also clean-ups handling of the cases when 'dirty_writeback_interval'
    is zero or non-zero.

    Additionally, this patch also removes unneeded 'list_empty_careful()' call.

    Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    ---
    fs/fs-writeback.c | 17 +++++++++--------
    1 files changed, 9 insertions(+), 8 deletions(-)

    diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
    index 5e6b7fc..8cf53ba 100644
    --- a/fs/fs-writeback.c
    +++ b/fs/fs-writeback.c
    @@ -848,17 +848,18 @@ int bdi_writeback_thread(void *data)
    break;
    }

    - if (dirty_writeback_interval) {
    - wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10);
    - schedule_timeout_interruptible(wait_jiffies);
    - } else {
    - set_current_state(TASK_INTERRUPTIBLE);
    - if (list_empty_careful(&wb->bdi->work_list) &&
    - !kthread_should_stop())
    - schedule();
    + set_current_state(TASK_INTERRUPTIBLE);
    + if (!list_empty(&bdi->work_list)) {
    __set_current_state(TASK_RUNNING);
    + continue;
    }

    + if (dirty_writeback_interval) {
    + wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10);
    + schedule_timeout(wait_jiffies);
    + } else
    + schedule();
    +
    try_to_freeze();
    }

    --
    1.7.1.1


    \
     
     \ /
      Last update: 2010-07-23 17:11    [W:0.043 / U:7.476 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site