[lkml]   [2010]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 26/47] writeback: start background writeback earlier
    It's possible for some one to suddenly eat lots of memory,
    leading to sudden drop of global dirty limit. So a dirtier
    task may get hard throttled immediately without some previous
    balance_dirty_pages() call to invoke background writeback.

    In this case we need to check for background writeback earlier in the
    loop to avoid stucking the application for very long time. This was not
    a problem before the IO-less balance_dirty_pages() because it will try
    to write something and then break out of the loop regardless of the
    global limit.

    Another scheme this check will help is, the dirty limit is too close to
    the background threshold, so that someone manages to jump directly into
    the pause threshold (background+dirty)/2.

    Signed-off-by: Wu Fengguang <>
    mm/page-writeback.c | 3 +++
    1 file changed, 3 insertions(+)

    --- linux-next.orig/mm/page-writeback.c 2010-12-08 23:54:36.000000000 +0800
    +++ linux-next/mm/page-writeback.c 2010-12-08 23:56:55.000000000 +0800
    @@ -662,6 +662,9 @@ static void balance_dirty_pages(struct a
    bdi_prev_dirty = bdi_dirty;

    + if (unlikely(!writeback_in_progress(bdi)))
    + bdi_start_background_writeback(bdi);
    bdi_update_bandwidth(bdi, start_time, bdi_dirty, bdi_thresh);

    if (bdi_dirty >= task_thresh) {

     \ /
      Last update: 2010-12-13 08:01    [W:0.023 / U:17.112 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site