Commit 98d5dc13 authored by Tsutomu Itoh's avatar Tsutomu Itoh Committed by Chris Mason

btrfs: fix return value check of btrfs_start_transaction()

The error check of btrfs_start_transaction() is added, and the mistake
of the error check on several places is corrected.
Signed-off-by: default avatarTsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 5df67083
...@@ -6271,6 +6271,8 @@ int btrfs_drop_snapshot(struct btrfs_root *root, ...@@ -6271,6 +6271,8 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
BUG_ON(!wc); BUG_ON(!wc);
trans = btrfs_start_transaction(tree_root, 0); trans = btrfs_start_transaction(tree_root, 0);
BUG_ON(IS_ERR(trans));
if (block_rsv) if (block_rsv)
trans->block_rsv = block_rsv; trans->block_rsv = block_rsv;
...@@ -6368,6 +6370,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root, ...@@ -6368,6 +6370,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
btrfs_end_transaction_throttle(trans, tree_root); btrfs_end_transaction_throttle(trans, tree_root);
trans = btrfs_start_transaction(tree_root, 0); trans = btrfs_start_transaction(tree_root, 0);
BUG_ON(IS_ERR(trans));
if (block_rsv) if (block_rsv)
trans->block_rsv = block_rsv; trans->block_rsv = block_rsv;
} }
...@@ -7587,7 +7590,7 @@ int btrfs_cleanup_reloc_trees(struct btrfs_root *root) ...@@ -7587,7 +7590,7 @@ int btrfs_cleanup_reloc_trees(struct btrfs_root *root)
if (found) { if (found) {
trans = btrfs_start_transaction(root, 1); trans = btrfs_start_transaction(root, 1);
BUG_ON(!trans); BUG_ON(IS_ERR(trans));
ret = btrfs_commit_transaction(trans, root); ret = btrfs_commit_transaction(trans, root);
BUG_ON(ret); BUG_ON(ret);
} }
...@@ -7831,7 +7834,7 @@ static noinline int relocate_one_extent(struct btrfs_root *extent_root, ...@@ -7831,7 +7834,7 @@ static noinline int relocate_one_extent(struct btrfs_root *extent_root,
trans = btrfs_start_transaction(extent_root, 1); trans = btrfs_start_transaction(extent_root, 1);
BUG_ON(!trans); BUG_ON(IS_ERR(trans));
if (extent_key->objectid == 0) { if (extent_key->objectid == 0) {
ret = del_extent_zero(trans, extent_root, path, extent_key); ret = del_extent_zero(trans, extent_root, path, extent_key);
......
...@@ -2357,6 +2357,7 @@ void btrfs_orphan_cleanup(struct btrfs_root *root) ...@@ -2357,6 +2357,7 @@ void btrfs_orphan_cleanup(struct btrfs_root *root)
*/ */
if (is_bad_inode(inode)) { if (is_bad_inode(inode)) {
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
BUG_ON(IS_ERR(trans));
btrfs_orphan_del(trans, inode); btrfs_orphan_del(trans, inode);
btrfs_end_transaction(trans, root); btrfs_end_transaction(trans, root);
iput(inode); iput(inode);
......
...@@ -907,6 +907,10 @@ static noinline int btrfs_ioctl_resize(struct btrfs_root *root, ...@@ -907,6 +907,10 @@ static noinline int btrfs_ioctl_resize(struct btrfs_root *root,
if (new_size > old_size) { if (new_size > old_size) {
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) {
ret = PTR_ERR(trans);
goto out_unlock;
}
ret = btrfs_grow_device(trans, device, new_size); ret = btrfs_grow_device(trans, device, new_size);
btrfs_commit_transaction(trans, root); btrfs_commit_transaction(trans, root);
} else { } else {
...@@ -2141,9 +2145,9 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp) ...@@ -2141,9 +2145,9 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp)
path->leave_spinning = 1; path->leave_spinning = 1;
trans = btrfs_start_transaction(root, 1); trans = btrfs_start_transaction(root, 1);
if (!trans) { if (IS_ERR(trans)) {
btrfs_free_path(path); btrfs_free_path(path);
return -ENOMEM; return PTR_ERR(trans);
} }
dir_id = btrfs_super_root_dir(&root->fs_info->super_copy); dir_id = btrfs_super_root_dir(&root->fs_info->super_copy);
...@@ -2337,6 +2341,8 @@ static noinline long btrfs_ioctl_start_sync(struct file *file, void __user *argp ...@@ -2337,6 +2341,8 @@ static noinline long btrfs_ioctl_start_sync(struct file *file, void __user *argp
u64 transid; u64 transid;
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans))
return PTR_ERR(trans);
transid = trans->transid; transid = trans->transid;
btrfs_commit_transaction_async(trans, root, 0); btrfs_commit_transaction_async(trans, root, 0);
......
...@@ -2028,6 +2028,7 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, ...@@ -2028,6 +2028,7 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc,
while (1) { while (1) {
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
BUG_ON(IS_ERR(trans));
trans->block_rsv = rc->block_rsv; trans->block_rsv = rc->block_rsv;
ret = btrfs_block_rsv_check(trans, root, rc->block_rsv, ret = btrfs_block_rsv_check(trans, root, rc->block_rsv,
...@@ -3665,6 +3666,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) ...@@ -3665,6 +3666,7 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc)
while (1) { while (1) {
trans = btrfs_start_transaction(rc->extent_root, 0); trans = btrfs_start_transaction(rc->extent_root, 0);
BUG_ON(IS_ERR(trans));
if (update_backref_cache(trans, &rc->backref_cache)) { if (update_backref_cache(trans, &rc->backref_cache)) {
btrfs_end_transaction(trans, rc->extent_root); btrfs_end_transaction(trans, rc->extent_root);
...@@ -4033,6 +4035,7 @@ static noinline_for_stack int mark_garbage_root(struct btrfs_root *root) ...@@ -4033,6 +4035,7 @@ static noinline_for_stack int mark_garbage_root(struct btrfs_root *root)
int ret; int ret;
trans = btrfs_start_transaction(root->fs_info->tree_root, 0); trans = btrfs_start_transaction(root->fs_info->tree_root, 0);
BUG_ON(IS_ERR(trans));
memset(&root->root_item.drop_progress, 0, memset(&root->root_item.drop_progress, 0,
sizeof(root->root_item.drop_progress)); sizeof(root->root_item.drop_progress));
......
...@@ -623,6 +623,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait) ...@@ -623,6 +623,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
btrfs_wait_ordered_extents(root, 0, 0); btrfs_wait_ordered_extents(root, 0, 0);
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans))
return PTR_ERR(trans);
ret = btrfs_commit_transaction(trans, root); ret = btrfs_commit_transaction(trans, root);
return ret; return ret;
} }
......
...@@ -3112,6 +3112,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree) ...@@ -3112,6 +3112,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
BUG_ON(!path); BUG_ON(!path);
trans = btrfs_start_transaction(fs_info->tree_root, 0); trans = btrfs_start_transaction(fs_info->tree_root, 0);
BUG_ON(IS_ERR(trans));
wc.trans = trans; wc.trans = trans;
wc.pin = 1; wc.pin = 1;
......
...@@ -1212,6 +1212,10 @@ static int btrfs_rm_dev_item(struct btrfs_root *root, ...@@ -1212,6 +1212,10 @@ static int btrfs_rm_dev_item(struct btrfs_root *root,
return -ENOMEM; return -ENOMEM;
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) {
btrfs_free_path(path);
return PTR_ERR(trans);
}
key.objectid = BTRFS_DEV_ITEMS_OBJECTID; key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
key.type = BTRFS_DEV_ITEM_KEY; key.type = BTRFS_DEV_ITEM_KEY;
key.offset = device->devid; key.offset = device->devid;
...@@ -1604,6 +1608,12 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path) ...@@ -1604,6 +1608,12 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
} }
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) {
kfree(device);
ret = PTR_ERR(trans);
goto error;
}
lock_chunks(root); lock_chunks(root);
device->barriers = 1; device->barriers = 1;
...@@ -1872,7 +1882,7 @@ static int btrfs_relocate_chunk(struct btrfs_root *root, ...@@ -1872,7 +1882,7 @@ static int btrfs_relocate_chunk(struct btrfs_root *root,
return ret; return ret;
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
BUG_ON(!trans); BUG_ON(IS_ERR(trans));
lock_chunks(root); lock_chunks(root);
...@@ -2046,7 +2056,7 @@ int btrfs_balance(struct btrfs_root *dev_root) ...@@ -2046,7 +2056,7 @@ int btrfs_balance(struct btrfs_root *dev_root)
BUG_ON(ret); BUG_ON(ret);
trans = btrfs_start_transaction(dev_root, 0); trans = btrfs_start_transaction(dev_root, 0);
BUG_ON(!trans); BUG_ON(IS_ERR(trans));
ret = btrfs_grow_device(trans, device, old_size); ret = btrfs_grow_device(trans, device, old_size);
BUG_ON(ret); BUG_ON(ret);
...@@ -2212,6 +2222,11 @@ int btrfs_shrink_device(struct btrfs_device *device, u64 new_size) ...@@ -2212,6 +2222,11 @@ int btrfs_shrink_device(struct btrfs_device *device, u64 new_size)
/* Shrinking succeeded, else we would be at "done". */ /* Shrinking succeeded, else we would be at "done". */
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) {
ret = PTR_ERR(trans);
goto done;
}
lock_chunks(root); lock_chunks(root);
device->disk_total_bytes = new_size; device->disk_total_bytes = new_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment