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

Commit 0305bc27 authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba
Browse files

btrfs: Output more info for enospc_debug mount option



As one user in mail list report reproducible balance ENOSPC error, it's
better to add more debug info for enospc_debug mount option.

Reported-by: default avatarMarc Haber <mh+linux-btrfs@zugschlus.de>
Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 264813ac
Loading
Loading
Loading
Loading
+19 −2
Original line number Original line Diff line number Diff line
@@ -9386,15 +9386,23 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
	u64 dev_min = 1;
	u64 dev_min = 1;
	u64 dev_nr = 0;
	u64 dev_nr = 0;
	u64 target;
	u64 target;
	int debug;
	int index;
	int index;
	int full = 0;
	int full = 0;
	int ret = 0;
	int ret = 0;


	debug = btrfs_test_opt(root, ENOSPC_DEBUG);

	block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
	block_group = btrfs_lookup_block_group(root->fs_info, bytenr);


	/* odd, couldn't find the block group, leave it alone */
	/* odd, couldn't find the block group, leave it alone */
	if (!block_group)
	if (!block_group) {
		if (debug)
			btrfs_warn(root->fs_info,
				   "can't find block group for bytenr %llu",
				   bytenr);
		return -1;
		return -1;
	}


	min_free = btrfs_block_group_used(&block_group->item);
	min_free = btrfs_block_group_used(&block_group->item);


@@ -9448,8 +9456,13 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
		 * this is just a balance, so if we were marked as full
		 * this is just a balance, so if we were marked as full
		 * we know there is no space for a new chunk
		 * we know there is no space for a new chunk
		 */
		 */
		if (full)
		if (full) {
			if (debug)
				btrfs_warn(root->fs_info,
					"no space to alloc new chunk for block group %llu",
					block_group->key.objectid);
			goto out;
			goto out;
		}


		index = get_block_group_index(block_group);
		index = get_block_group_index(block_group);
	}
	}
@@ -9496,6 +9509,10 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
			ret = -1;
			ret = -1;
		}
		}
	}
	}
	if (debug && ret == -1)
		btrfs_warn(root->fs_info,
			"no space to allocate a new chunk for block group %llu",
			block_group->key.objectid);
	mutex_unlock(&root->fs_info->chunk_mutex);
	mutex_unlock(&root->fs_info->chunk_mutex);
	btrfs_end_transaction(trans, root);
	btrfs_end_transaction(trans, root);
out:
out: