lkml.org 
[lkml]   [2017]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 48/78] shmem: Convert shmem_alloc_hugepage to XArray
    Date
    From: Matthew Wilcox <mawilcox@microsoft.com>

    xa_find() is a slightly easier API to use than
    radix_tree_gang_lookup_slot() because it contains its own RCU locking.

    Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
    ---
    mm/shmem.c | 13 +++----------
    1 file changed, 3 insertions(+), 10 deletions(-)

    diff --git a/mm/shmem.c b/mm/shmem.c
    index 0f49edae05e4..bd66bbd40499 100644
    --- a/mm/shmem.c
    +++ b/mm/shmem.c
    @@ -1413,23 +1413,16 @@ static struct page *shmem_alloc_hugepage(gfp_t gfp,
    struct shmem_inode_info *info, pgoff_t index)
    {
    struct vm_area_struct pvma;
    - struct inode *inode = &info->vfs_inode;
    - struct address_space *mapping = inode->i_mapping;
    - pgoff_t idx, hindex;
    - void __rcu **results;
    + struct address_space *mapping = info->vfs_inode.i_mapping;
    + pgoff_t hindex;
    struct page *page;

    if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGE_PAGECACHE))
    return NULL;

    hindex = round_down(index, HPAGE_PMD_NR);
    - rcu_read_lock();
    - if (radix_tree_gang_lookup_slot(&mapping->pages, &results, &idx,
    - hindex, 1) && idx < hindex + HPAGE_PMD_NR) {
    - rcu_read_unlock();
    + if (xa_find(&mapping->pages, &hindex, hindex + HPAGE_PMD_NR - 1))
    return NULL;
    - }
    - rcu_read_unlock();

    shmem_pseudo_vma_init(&pvma, info, hindex);
    page = alloc_pages_vma(gfp | __GFP_COMP | __GFP_NORETRY | __GFP_NOWARN,
    --
    2.15.1
    \
     
     \ /
      Last update: 2017-12-15 23:39    [W:4.355 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site