From: Matthew Wilcox <mawil...@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 <mawil...@microsoft.com>
---
 mm/shmem.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/mm/shmem.c b/mm/shmem.c
index 54fbfc2c6c09..768d470a03da 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.0

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to