From: Matthew Wilcox <mawil...@microsoft.com>

Signed-off-by: Matthew Wilcox <mawil...@microsoft.com>
---
 fs/dax.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/fs/dax.c b/fs/dax.c
index e6b25ef112f2..494e8fb7a98f 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -498,9 +498,9 @@ static void *dax_insert_mapping_entry(struct address_space 
*mapping,
                                      void *entry, sector_t sector,
                                      unsigned long flags, bool dirty)
 {
-       struct radix_tree_root *pages = &mapping->pages;
        void *new_entry;
        pgoff_t index = vmf->pgoff;
+       XA_STATE(xas, &mapping->pages, index);
 
        if (dirty)
                __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
@@ -516,7 +516,7 @@ static void *dax_insert_mapping_entry(struct address_space 
*mapping,
                                        PAGE_SIZE, 0);
        }
 
-       xa_lock_irq(&mapping->pages);
+       xas_lock_irq(&xas);
        new_entry = dax_radix_locked_entry(sector, flags);
 
        if (dax_is_zero_entry(entry) || dax_is_empty_entry(entry)) {
@@ -528,21 +528,15 @@ static void *dax_insert_mapping_entry(struct 
address_space *mapping,
                 * existing entry is a PMD, we will just leave the PMD in the
                 * tree and dirty it if necessary.
                 */
-               struct radix_tree_node *node;
-               void **slot;
-               void *ret;
-
-               ret = __radix_tree_lookup(pages, index, &node, &slot);
-               WARN_ON_ONCE(ret != entry);
-               __radix_tree_replace(pages, node, slot,
-                                    new_entry, NULL);
+               void *prev = xas_store(&xas, new_entry);
+               WARN_ON_ONCE(prev != entry);
                entry = new_entry;
        }
 
        if (dirty)
-               radix_tree_tag_set(pages, index, PAGECACHE_TAG_DIRTY);
+               xas_set_tag(&xas, PAGECACHE_TAG_DIRTY);
 
-       xa_unlock_irq(&mapping->pages);
+       xas_unlock_irq(&xas);
        return entry;
 }
 
-- 
2.15.1

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to