Merge branch 'for-linus-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
Pull btrfs fixes from Chris Mason: "These are bug fixes, including a really old fsync bug, and a few trace points to help us track down problems in the quota code" * 'for-linus-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: Btrfs: fix file/data loss caused by fsync after rename and new inode btrfs: Reset IO error counters before start of device replacing btrfs: Add qgroup tracing Btrfs: don't use src fd for printk btrfs: fallback to vmalloc in btrfs_compare_tree btrfs: handle non-fatal errors in btrfs_qgroup_inherit() btrfs: Output more info for enospc_debug mount option Btrfs: fix invalid reference in replace_path Btrfs: Improve FL_KEEP_SIZE handling in fallocate
This commit is contained in:
@@ -9386,15 +9386,23 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
|
||||
u64 dev_min = 1;
|
||||
u64 dev_nr = 0;
|
||||
u64 target;
|
||||
int debug;
|
||||
int index;
|
||||
int full = 0;
|
||||
int ret = 0;
|
||||
|
||||
debug = btrfs_test_opt(root, ENOSPC_DEBUG);
|
||||
|
||||
block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
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
|
||||
* 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;
|
||||
}
|
||||
|
||||
index = get_block_group_index(block_group);
|
||||
}
|
||||
@@ -9496,6 +9509,10 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
|
||||
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);
|
||||
btrfs_end_transaction(trans, root);
|
||||
out:
|
||||
|
Reference in New Issue
Block a user