Btrfs: check return value of btrfs_cow_block()
authorJan Schmidt <list.btrfs@jan-o-sch.net>
Fri, 23 Mar 2012 16:24:19 +0000 (17:24 +0100)
committerJan Schmidt <list.btrfs@jan-o-sch.net>
Tue, 27 Mar 2012 12:51:20 +0000 (14:51 +0200)
The two helper functions commit_cowonly_roots() and
create_pending_snapshot() failed to check the return value from
btrfs_cow_block(), which could at least in theory fail with -ENOSPC from
btrfs_alloc_free_block(). This commit adds the missing checks.

Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
fs/btrfs/transaction.c

index 04b77e3ceb7a9783332c33c4ceca006ac9c14482..cd220f2836383f114a97d89e32a5ecf360ae96e7 100644 (file)
@@ -718,7 +718,8 @@ static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans,
        BUG_ON(ret);
 
        eb = btrfs_lock_root_node(fs_info->tree_root);
-       btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 0, &eb);
+       ret = btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 0, &eb);
+       BUG_ON(ret);
        btrfs_tree_unlock(eb);
        free_extent_buffer(eb);
 
@@ -949,7 +950,8 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
        btrfs_set_root_flags(new_root_item, root_flags);
 
        old = btrfs_lock_root_node(root);
-       btrfs_cow_block(trans, root, old, NULL, 0, &old);
+       ret = btrfs_cow_block(trans, root, old, NULL, 0, &old);
+       BUG_ON(ret);
        btrfs_set_lock_blocking(old);
 
        btrfs_copy_root(trans, root, old, &tmp, objectid);