lkml.org 
[lkml]   [2018]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 57/63] fs: Convert writeback to XArray
    Date
    From: Matthew Wilcox <mawilcox@microsoft.com>

    A couple of short loops.

    Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
    ---
    fs/fs-writeback.c | 25 +++++++++----------------
    1 file changed, 9 insertions(+), 16 deletions(-)

    diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
    index 091577edc497..98e5e08274a2 100644
    --- a/fs/fs-writeback.c
    +++ b/fs/fs-writeback.c
    @@ -339,9 +339,9 @@ static void inode_switch_wbs_work_fn(struct work_struct *work)
    struct address_space *mapping = inode->i_mapping;
    struct bdi_writeback *old_wb = inode->i_wb;
    struct bdi_writeback *new_wb = isw->new_wb;
    - struct radix_tree_iter iter;
    + XA_STATE(xas, &mapping->i_pages, 0);
    + struct page *page;
    bool switched = false;
    - void **slot;

    /*
    * By the time control reaches here, RCU grace period has passed
    @@ -375,25 +375,18 @@ static void inode_switch_wbs_work_fn(struct work_struct *work)
    * to possibly dirty pages while PAGECACHE_TAG_WRITEBACK points to
    * pages actually under writeback.
    */
    - radix_tree_for_each_tagged(slot, &mapping->i_pages, &iter, 0,
    - PAGECACHE_TAG_DIRTY) {
    - struct page *page = radix_tree_deref_slot_protected(slot,
    - &mapping->i_pages.xa_lock);
    - if (likely(page) && PageDirty(page)) {
    + xas_for_each_tag(&xas, page, ULONG_MAX, PAGECACHE_TAG_DIRTY) {
    + if (PageDirty(page)) {
    dec_wb_stat(old_wb, WB_RECLAIMABLE);
    inc_wb_stat(new_wb, WB_RECLAIMABLE);
    }
    }

    - radix_tree_for_each_tagged(slot, &mapping->i_pages, &iter, 0,
    - PAGECACHE_TAG_WRITEBACK) {
    - struct page *page = radix_tree_deref_slot_protected(slot,
    - &mapping->i_pages.xa_lock);
    - if (likely(page)) {
    - WARN_ON_ONCE(!PageWriteback(page));
    - dec_wb_stat(old_wb, WB_WRITEBACK);
    - inc_wb_stat(new_wb, WB_WRITEBACK);
    - }
    + xas_set(&xas, 0);
    + xas_for_each_tag(&xas, page, ULONG_MAX, PAGECACHE_TAG_WRITEBACK) {
    + WARN_ON_ONCE(!PageWriteback(page));
    + dec_wb_stat(old_wb, WB_WRITEBACK);
    + inc_wb_stat(new_wb, WB_WRITEBACK);
    }

    wb_get(new_wb);
    --
    2.16.1
    \
     
     \ /
      Last update: 2018-03-06 20:28    [W:9.215 / U:0.432 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site