]> www.infradead.org Git - users/willy/xarray.git/commitdiff
f2fs: Convert gclist.iroot to XArray
authorMatthew Wilcox <willy@infradead.org>
Wed, 17 Oct 2018 19:36:23 +0000 (15:36 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 8 Aug 2019 14:29:40 +0000 (10:29 -0400)
Straightforward conversion.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
fs/f2fs/gc.c
fs/f2fs/gc.h

index 8974672db78f39ef929f2bb61230054ae38471e4..f4fd71b6f36b2e3c3900088bb2c4030520c18434 100644 (file)
@@ -442,7 +442,7 @@ static struct inode *find_gc_inode(struct gc_inode_list *gc_list, nid_t ino)
 {
        struct inode_entry *ie;
 
-       ie = radix_tree_lookup(&gc_list->iroot, ino);
+       ie = xa_load(&gc_list->iroot, ino);
        if (ie)
                return ie->inode;
        return NULL;
@@ -459,7 +459,8 @@ static void add_gc_inode(struct gc_inode_list *gc_list, struct inode *inode)
        new_ie = f2fs_kmem_cache_alloc(f2fs_inode_entry_slab, GFP_NOFS);
        new_ie->inode = inode;
 
-       f2fs_radix_tree_insert(&gc_list->iroot, inode->i_ino, new_ie);
+       xa_store(&gc_list->iroot, inode->i_ino, new_ie,
+                       GFP_NOFS | __GFP_NOFAIL);
        list_add_tail(&new_ie->list, &gc_list->ilist);
 }
 
@@ -467,7 +468,7 @@ static void put_gc_inode(struct gc_inode_list *gc_list)
 {
        struct inode_entry *ie, *next_ie;
        list_for_each_entry_safe(ie, next_ie, &gc_list->ilist, list) {
-               radix_tree_delete(&gc_list->iroot, ie->inode->i_ino);
+               xa_erase(&gc_list->iroot, ie->inode->i_ino);
                iput(ie->inode);
                list_del(&ie->list);
                kmem_cache_free(f2fs_inode_entry_slab, ie);
@@ -1236,7 +1237,7 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
        unsigned int init_segno = segno;
        struct gc_inode_list gc_list = {
                .ilist = LIST_HEAD_INIT(gc_list.ilist),
-               .iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS),
+               .iroot = XARRAY_INIT(&gc_list.iroot, 0),
        };
        unsigned long long last_skipped = sbi->skipped_atomic_files[FG_GC];
        unsigned long long first_skipped;
@@ -1375,7 +1376,7 @@ static int free_segment_range(struct f2fs_sb_info *sbi, unsigned int start,
        for (segno = start; segno <= end; segno += sbi->segs_per_sec) {
                struct gc_inode_list gc_list = {
                        .ilist = LIST_HEAD_INIT(gc_list.ilist),
-                       .iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS),
+                       .iroot = XARRAY_INIT(gc_list.iroot, 0),
                };
 
                mutex_lock(&sbi->gc_mutex);
index bbac9d3787bd35e4bbdfb1a2ea65853148d1e6a2..ba5929f4bb26bc119166d8c2c56b323c7d60deb1 100644 (file)
@@ -38,7 +38,7 @@ struct f2fs_gc_kthread {
 
 struct gc_inode_list {
        struct list_head ilist;
-       struct radix_tree_root iroot;
+       struct xarray iroot;
 };
 
 /*