aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-defrag.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/tree-defrag.c')
-rw-r--r--fs/btrfs/tree-defrag.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/fs/btrfs/tree-defrag.c b/fs/btrfs/tree-defrag.c
index b10eacdb1620..992ab425599d 100644
--- a/fs/btrfs/tree-defrag.c
+++ b/fs/btrfs/tree-defrag.c
@@ -36,7 +36,6 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
36 int ret = 0; 36 int ret = 0;
37 int wret; 37 int wret;
38 int level; 38 int level;
39 int orig_level;
40 int is_extent = 0; 39 int is_extent = 0;
41 int next_key_ret = 0; 40 int next_key_ret = 0;
42 u64 last_ret = 0; 41 u64 last_ret = 0;
@@ -64,7 +63,6 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
64 return -ENOMEM; 63 return -ENOMEM;
65 64
66 level = btrfs_header_level(root->node); 65 level = btrfs_header_level(root->node);
67 orig_level = level;
68 66
69 if (level == 0) 67 if (level == 0)
70 goto out; 68 goto out;
@@ -117,13 +115,14 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
117 path->nodes[1], 0, 115 path->nodes[1], 0,
118 cache_only, &last_ret, 116 cache_only, &last_ret,
119 &root->defrag_progress); 117 &root->defrag_progress);
120 WARN_ON(ret && ret != -EAGAIN); 118 if (ret) {
119 WARN_ON(ret == -EAGAIN);
120 goto out;
121 }
121 if (next_key_ret == 0) { 122 if (next_key_ret == 0) {
122 memcpy(&root->defrag_progress, &key, sizeof(key)); 123 memcpy(&root->defrag_progress, &key, sizeof(key));
123 ret = -EAGAIN; 124 ret = -EAGAIN;
124 } 125 }
125
126 btrfs_release_path(root, path);
127out: 126out:
128 if (path) 127 if (path)
129 btrfs_free_path(path); 128 btrfs_free_path(path);