diff options
| author | Tsutomu Itoh <t-itoh@jp.fujitsu.com> | 2013-03-21 00:32:32 -0400 |
|---|---|---|
| committer | Chris Mason <chris.mason@fusionio.com> | 2013-03-21 19:31:52 -0400 |
| commit | 1dd05682b3ef6e70409e130bfd83e91770801589 (patch) | |
| tree | 778cbfa572ad33981b6ba077b99861675e476fc9 | |
| parent | d9abbf1c3131b679379762700201ae69367f3f62 (diff) | |
Btrfs: fix memory leak in btrfs_create_tree()
We should free leaf and root before returning from the error
handling code.
Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
| -rw-r--r-- | fs/btrfs/disk-io.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 127b23e8323b..6d19a0a554aa 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
| @@ -1291,6 +1291,7 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans, | |||
| 1291 | 0, objectid, NULL, 0, 0, 0); | 1291 | 0, objectid, NULL, 0, 0, 0); |
| 1292 | if (IS_ERR(leaf)) { | 1292 | if (IS_ERR(leaf)) { |
| 1293 | ret = PTR_ERR(leaf); | 1293 | ret = PTR_ERR(leaf); |
| 1294 | leaf = NULL; | ||
| 1294 | goto fail; | 1295 | goto fail; |
| 1295 | } | 1296 | } |
| 1296 | 1297 | ||
| @@ -1334,11 +1335,16 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans, | |||
| 1334 | 1335 | ||
| 1335 | btrfs_tree_unlock(leaf); | 1336 | btrfs_tree_unlock(leaf); |
| 1336 | 1337 | ||
| 1338 | return root; | ||
| 1339 | |||
| 1337 | fail: | 1340 | fail: |
| 1338 | if (ret) | 1341 | if (leaf) { |
| 1339 | return ERR_PTR(ret); | 1342 | btrfs_tree_unlock(leaf); |
| 1343 | free_extent_buffer(leaf); | ||
| 1344 | } | ||
| 1345 | kfree(root); | ||
| 1340 | 1346 | ||
| 1341 | return root; | 1347 | return ERR_PTR(ret); |
| 1342 | } | 1348 | } |
| 1343 | 1349 | ||
| 1344 | static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans, | 1350 | static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans, |
