f2fs: move extent_node list operations being coupled with rbtree operation

This patch moves extent_node list operations to be handled together with
its rbtree operations.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c
index ecb1f99..995a7b1 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -360,10 +360,16 @@
 		en = next_ex;
 	}
 
-	if (en) {
-		__try_update_largest_extent(et, en);
-		et->cached_en = en;
-	}
+	if (!en)
+		return NULL;
+
+	__try_update_largest_extent(et, en);
+	et->cached_en = en;
+
+	spin_lock(&sbi->extent_lock);
+	if (!list_empty(&en->list))
+		list_move_tail(&en->list, &sbi->extent_list);
+	spin_unlock(&sbi->extent_lock);
 	return en;
 }
 
@@ -400,6 +406,11 @@
 
 	__try_update_largest_extent(et, en);
 	et->cached_en = en;
+
+	/* update in global extent list */
+	spin_lock(&sbi->extent_lock);
+	list_add_tail(&en->list, &sbi->extent_list);
+	spin_unlock(&sbi->extent_lock);
 	return en;
 }
 
@@ -498,13 +509,6 @@
 			insert_p = NULL;
 			insert_parent = NULL;
 		}
-
-		/* update in global extent list */
-		spin_lock(&sbi->extent_lock);
-		if (en1)
-			list_add_tail(&en1->list, &sbi->extent_list);
-		spin_unlock(&sbi->extent_lock);
-
 		en = next_en;
 	}
 
@@ -512,9 +516,8 @@
 	if (blkaddr) {
 
 		set_extent_info(&ei, fofs, blkaddr, len);
-		en1 = __try_merge_extent_node(sbi, et, &ei, prev_en, next_en);
-		if (!en1)
-			en1 = __insert_extent_tree(sbi, et, &ei,
+		if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
+			__insert_extent_tree(sbi, et, &ei,
 						insert_p, insert_parent);
 
 		/* give up extent_cache, if split and small updates happen */
@@ -524,15 +527,6 @@
 			et->largest.len = 0;
 			set_inode_flag(F2FS_I(inode), FI_NO_EXTENT);
 		}
-
-		spin_lock(&sbi->extent_lock);
-		if (en1) {
-			if (list_empty(&en1->list))
-				list_add_tail(&en1->list, &sbi->extent_list);
-			else
-				list_move_tail(&en1->list, &sbi->extent_list);
-		}
-		spin_unlock(&sbi->extent_lock);
 	}
 
 	if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT))