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

Avoids walking the radix tree multiple times looking for tags.

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

diff --git a/fs/dax.c b/fs/dax.c
index 19ac013204a1..b68b2f81fa47 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -586,27 +586,28 @@ static void *grab_mapping_entry(struct address_space 
*mapping, pgoff_t index,
 static int __dax_invalidate_entry(struct address_space *mapping,
                                          pgoff_t index, bool trunc)
 {
+       XA_STATE(xas, &mapping->i_pages, index);
        int ret = 0;
        void *entry;
-       struct radix_tree_root *pages = &mapping->i_pages;
 
-       xa_lock_irq(pages);
-       entry = get_unlocked_mapping_entry(mapping, index, NULL);
+       xas_lock_irq(&xas);
+       entry = get_unlocked_entry(&xas);
        if (!entry || WARN_ON_ONCE(!xa_is_value(entry)))
                goto out;
        if (!trunc &&
-           (radix_tree_tag_get(pages, index, PAGECACHE_TAG_DIRTY) ||
-            radix_tree_tag_get(pages, index, PAGECACHE_TAG_TOWRITE)))
+           (xas_get_tag(&xas, PAGECACHE_TAG_DIRTY) ||
+            xas_get_tag(&xas, PAGECACHE_TAG_TOWRITE)))
                goto out;
        dax_disassociate_entry(entry, mapping, trunc);
-       radix_tree_delete(pages, index);
+       xas_store(&xas, NULL);
        mapping->nrexceptional--;
        ret = 1;
 out:
-       put_unlocked_mapping_entry(mapping, index, entry);
-       xa_unlock_irq(pages);
+       put_unlocked_entry(&xas, entry);
+       xas_unlock_irq(&xas);
        return ret;
 }
+
 /*
  * Delete DAX entry at @index from @mapping.  Wait for it
  * to be unlocked before deleting it.
-- 
2.17.0


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to