lkml.org 
[lkml]   [2012]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] writeback: avoid race when update bandwidth
    Date
    From: Wanpeng Li <liwp@linux.vnet.ibm.com>

    Since bdi->wb.list_lock is used to protect the b_* lists,
    so the flushers who call wb_writeback to writeback pages will
    stuck when bandwidth update policy holds this lock. In order
    to avoid this race we can introduce a new bandwidth_lock who
    is responsible for protecting bandwidth update policy.

    Signed-off-by: Wanpeng Li <liswp@linux.vnet.ibm.com>
    ---
    mm/page-writeback.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/mm/page-writeback.c b/mm/page-writeback.c
    index c8945e0..b3b08fb 100644
    --- a/mm/page-writeback.c
    +++ b/mm/page-writeback.c
    @@ -1032,12 +1032,14 @@ static void bdi_update_bandwidth(struct backing_dev_info *bdi,
    unsigned long bdi_dirty,
    unsigned long start_time)
    {
    + static DEFINE_SPINLOCK(bandwidth_lock);
    +
    if (time_is_after_eq_jiffies(bdi->bw_time_stamp + BANDWIDTH_INTERVAL))
    return;
    - spin_lock(&bdi->wb.list_lock);
    + spin_lock(&bandwidth_lock);
    __bdi_update_bandwidth(bdi, thresh, bg_thresh, dirty,
    bdi_thresh, bdi_dirty, start_time);
    - spin_unlock(&bdi->wb.list_lock);
    + spin_unlock(&bandwidth_lock);
    }

    /*
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2012-06-12 13:21    [W:8.666 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site