f2fs: fix wrong pointer access during try_to_free_nids
authorJaegeuk Kim <jaegeuk@kernel.org>
Sat, 22 Aug 2015 06:37:18 +0000 (23:37 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 24 Aug 2015 16:37:42 +0000 (09:37 -0700)
If we release the lock in list_for_each_entry_safe, we can lose the tmp
pointer by alloc_nid.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/node.c

index 777066d29fa80e619fe5ca21960af01b81b5f4e1..0867325e288fcea5daa27f2f1d3238c879f4262b 100644 (file)
@@ -1664,11 +1664,9 @@ int try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
                if (i->state == NID_ALLOC)
                        continue;
                __del_from_free_nid_list(nm_i, i);
-               nm_i->fcnt--;
-               spin_unlock(&nm_i->free_nid_list_lock);
                kmem_cache_free(free_nid_slab, i);
+               nm_i->fcnt--;
                nr_shrink--;
-               spin_lock(&nm_i->free_nid_list_lock);
        }
        spin_unlock(&nm_i->free_nid_list_lock);
        mutex_unlock(&nm_i->build_lock);
This page took 0.029651 seconds and 5 git commands to generate.