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 60/63] lustre: Convert to XArray
    Date
    From: Matthew Wilcox <mawilcox@microsoft.com>

    Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
    ---
    drivers/staging/lustre/lustre/llite/glimpse.c | 12 +++++-------
    drivers/staging/lustre/lustre/mdc/mdc_request.c | 16 ++++++++--------
    2 files changed, 13 insertions(+), 15 deletions(-)

    diff --git a/drivers/staging/lustre/lustre/llite/glimpse.c b/drivers/staging/lustre/lustre/llite/glimpse.c
    index 3075358f3f08..014035be5ac7 100644
    --- a/drivers/staging/lustre/lustre/llite/glimpse.c
    +++ b/drivers/staging/lustre/lustre/llite/glimpse.c
    @@ -57,7 +57,7 @@ static const struct cl_lock_descr whole_file = {
    };

    /*
    - * Check whether file has possible unwriten pages.
    + * Check whether file has possible unwritten pages.
    *
    * \retval 1 file is mmap-ed or has dirty pages
    * 0 otherwise
    @@ -66,16 +66,14 @@ blkcnt_t dirty_cnt(struct inode *inode)
    {
    blkcnt_t cnt = 0;
    struct vvp_object *vob = cl_inode2vvp(inode);
    - void *results[1];

    - if (inode->i_mapping)
    - cnt += radix_tree_gang_lookup_tag(&inode->i_mapping->i_pages,
    - results, 0, 1,
    - PAGECACHE_TAG_DIRTY);
    + if (inode->i_mapping && xa_tagged(&inode->i_mapping->i_pages,
    + PAGECACHE_TAG_DIRTY))
    + cnt = 1;
    if (cnt == 0 && atomic_read(&vob->vob_mmap_cnt) > 0)
    cnt = 1;

    - return (cnt > 0) ? 1 : 0;
    + return cnt;
    }

    int cl_glimpse_lock(const struct lu_env *env, struct cl_io *io,
    diff --git a/drivers/staging/lustre/lustre/mdc/mdc_request.c b/drivers/staging/lustre/lustre/mdc/mdc_request.c
    index 6950cb21638e..dbda8a9e351d 100644
    --- a/drivers/staging/lustre/lustre/mdc/mdc_request.c
    +++ b/drivers/staging/lustre/lustre/mdc/mdc_request.c
    @@ -931,17 +931,18 @@ static struct page *mdc_page_locate(struct address_space *mapping, __u64 *hash,
    * hash _smaller_ than one we are looking for.
    */
    unsigned long offset = hash_x_index(*hash, hash64);
    + XA_STATE(xas, &mapping->i_pages, offset);
    struct page *page;
    - int found;

    - xa_lock_irq(&mapping->i_pages);
    - found = radix_tree_gang_lookup(&mapping->i_pages,
    - (void **)&page, offset, 1);
    - if (found > 0 && !xa_is_value(page)) {
    + xas_lock_irq(&xas);
    + page = xas_find(&xas, ULONG_MAX);
    + if (xa_is_value(page))
    + page = NULL;
    + if (page) {
    struct lu_dirpage *dp;

    get_page(page);
    - xa_unlock_irq(&mapping->i_pages);
    + xas_unlock_irq(&xas);
    /*
    * In contrast to find_lock_page() we are sure that directory
    * page cannot be truncated (while DLM lock is held) and,
    @@ -989,8 +990,7 @@ static struct page *mdc_page_locate(struct address_space *mapping, __u64 *hash,
    page = ERR_PTR(-EIO);
    }
    } else {
    - xa_unlock_irq(&mapping->i_pages);
    - page = NULL;
    + xas_unlock_irq(&xas);
    }
    return page;
    }
    --
    2.16.1
    \
     
     \ /
      Last update: 2018-03-06 20:27    [W:4.424 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site