瀏覽代碼

Btrfs: check return value of commit when recovering log

We need to check the return value of the commit in case something goes wrong,
otherwise we could end up going down the line and doing more stuff (like orphan
cleanup) before we notice we should have errored out.  We need to do this before
we free up the log_tree_root since the caller will handle all of that.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Josef Bacik 12 年之前
父節點
當前提交
abefa55ac1
共有 1 個文件被更改,包括 6 次插入5 次删除
  1. 6 5
      fs/btrfs/tree-log.c

+ 6 - 5
fs/btrfs/tree-log.c

@@ -4012,16 +4012,17 @@ again:
 
 
 	btrfs_free_path(path);
 	btrfs_free_path(path);
 
 
+	/* step 4: commit the transaction, which also unpins the blocks */
+	ret = btrfs_commit_transaction(trans, fs_info->tree_root);
+	if (ret)
+		return ret;
+
 	free_extent_buffer(log_root_tree->node);
 	free_extent_buffer(log_root_tree->node);
 	log_root_tree->log_root = NULL;
 	log_root_tree->log_root = NULL;
 	fs_info->log_root_recovering = 0;
 	fs_info->log_root_recovering = 0;
-
-	/* step 4: commit the transaction, which also unpins the blocks */
-	btrfs_commit_transaction(trans, fs_info->tree_root);
-
 	kfree(log_root_tree);
 	kfree(log_root_tree);
-	return 0;
 
 
+	return 0;
 error:
 error:
 	btrfs_free_path(path);
 	btrfs_free_path(path);
 	return ret;
 	return ret;