Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8926bb3 authored by Mark Fasheh's avatar Mark Fasheh
Browse files

btrfs: don't BUG_ON btrfs_alloc_path() errors



This patch fixes many callers of btrfs_alloc_path() which BUG_ON allocation
failure. All the sites that are fixed in this patch were checked by me to
be fairly trivial to fix because of at least one of two criteria:

 - Callers of the function catch errors from it already so bubbling the
   error up will be handled.
 - Callers of the function might BUG_ON any nonzero return code in which
   case there is no behavior changed (but we still got to remove a BUG_ON)

The following functions were updated:

btrfs_lookup_extent, alloc_reserved_tree_block, btrfs_remove_block_group,
btrfs_lookup_csums_range, btrfs_csum_file_blocks, btrfs_mark_extent_written,
btrfs_inode_by_name, btrfs_new_inode, btrfs_symlink,
insert_reserved_file_extent, and run_delalloc_nocow

Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
parent 8d86e5f9
Loading
Loading
Loading
Loading
+9 −3
Original line number Original line Diff line number Diff line
@@ -667,7 +667,9 @@ int btrfs_lookup_extent(struct btrfs_root *root, u64 start, u64 len)
	struct btrfs_path *path;
	struct btrfs_path *path;


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;

	key.objectid = start;
	key.objectid = start;
	key.offset = len;
	key.offset = len;
	btrfs_set_key_type(&key, BTRFS_EXTENT_ITEM_KEY);
	btrfs_set_key_type(&key, BTRFS_EXTENT_ITEM_KEY);
@@ -5494,7 +5496,8 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
	u32 size = sizeof(*extent_item) + sizeof(*block_info) + sizeof(*iref);
	u32 size = sizeof(*extent_item) + sizeof(*block_info) + sizeof(*iref);


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;


	path->leave_spinning = 1;
	path->leave_spinning = 1;
	ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
	ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
@@ -7162,7 +7165,10 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
	spin_unlock(&cluster->refill_lock);
	spin_unlock(&cluster->refill_lock);


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path) {
		ret = -ENOMEM;
		goto out;
	}


	inode = lookup_free_space_inode(root, block_group, path);
	inode = lookup_free_space_inode(root, block_group, path);
	if (!IS_ERR(inode)) {
	if (!IS_ERR(inode)) {
+5 −2
Original line number Original line Diff line number Diff line
@@ -282,7 +282,8 @@ int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,
	u16 csum_size = btrfs_super_csum_size(&root->fs_info->super_copy);
	u16 csum_size = btrfs_super_csum_size(&root->fs_info->super_copy);


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;


	if (search_commit) {
	if (search_commit) {
		path->skip_locking = 1;
		path->skip_locking = 1;
@@ -672,7 +673,9 @@ int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans,
		btrfs_super_csum_size(&root->fs_info->super_copy);
		btrfs_super_csum_size(&root->fs_info->super_copy);


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;

	sector_sum = sums->sums;
	sector_sum = sums->sums;
again:
again:
	next_offset = (u64)-1;
	next_offset = (u64)-1;
+2 −1
Original line number Original line Diff line number Diff line
@@ -855,7 +855,8 @@ int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
	btrfs_drop_extent_cache(inode, start, end - 1, 0);
	btrfs_drop_extent_cache(inode, start, end - 1, 0);


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;
again:
again:
	recow = 0;
	recow = 0;
	split = start;
	split = start;
+13 −5
Original line number Original line Diff line number Diff line
@@ -1070,7 +1070,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
	u64 ino = btrfs_ino(inode);
	u64 ino = btrfs_ino(inode);


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;


	nolock = is_free_space_inode(root, inode);
	nolock = is_free_space_inode(root, inode);


@@ -1644,7 +1645,8 @@ static int insert_reserved_file_extent(struct btrfs_trans_handle *trans,
	int ret;
	int ret;


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;


	path->leave_spinning = 1;
	path->leave_spinning = 1;


@@ -3713,7 +3715,8 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
	int ret = 0;
	int ret = 0;


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return -ENOMEM;


	di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(dir), name,
	di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(dir), name,
				    namelen, 0);
				    namelen, 0);
@@ -4438,7 +4441,8 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
	int owner;
	int owner;


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path)
		return ERR_PTR(-ENOMEM);


	inode = new_inode(root->fs_info->sb);
	inode = new_inode(root->fs_info->sb);
	if (!inode) {
	if (!inode) {
@@ -7194,7 +7198,11 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
		goto out_unlock;
		goto out_unlock;


	path = btrfs_alloc_path();
	path = btrfs_alloc_path();
	BUG_ON(!path);
	if (!path) {
		err = -ENOMEM;
		drop_inode = 1;
		goto out_unlock;
	}
	key.objectid = btrfs_ino(inode);
	key.objectid = btrfs_ino(inode);
	key.offset = 0;
	key.offset = 0;
	btrfs_set_key_type(&key, BTRFS_EXTENT_DATA_KEY);
	btrfs_set_key_type(&key, BTRFS_EXTENT_DATA_KEY);