mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
btrfs: don't print relocation messages from auto reclaim
When BTRFS is doing automatic block-group reclaim, it is spamming the kernel log messages a lot. Add a 'verbose' parameter to btrfs_relocate_chunk() and btrfs_relocate_block_group() to control the verbosity of these log message. This way the old behaviour of printing log messages on a user-space initiated balance operation can be kept while excessive log spamming due to auto reclaim is mitigated. Reviewed-by: Boris Burkov <boris@bur.io> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
a507904090
commit
5ae011bcbb
5 changed files with 21 additions and 13 deletions
|
@ -1953,7 +1953,7 @@ void btrfs_reclaim_bgs_work(struct work_struct *work)
|
||||||
spin_unlock(&bg->lock);
|
spin_unlock(&bg->lock);
|
||||||
|
|
||||||
trace_btrfs_reclaim_block_group(bg);
|
trace_btrfs_reclaim_block_group(bg);
|
||||||
ret = btrfs_relocate_chunk(fs_info, bg->start);
|
ret = btrfs_relocate_chunk(fs_info, bg->start, false);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
btrfs_dec_block_group_ro(bg);
|
btrfs_dec_block_group_ro(bg);
|
||||||
btrfs_err(fs_info, "error relocating chunk %llu",
|
btrfs_err(fs_info, "error relocating chunk %llu",
|
||||||
|
|
|
@ -3908,7 +3908,8 @@ static const char *stage_to_string(enum reloc_stage stage)
|
||||||
/*
|
/*
|
||||||
* function to relocate all extents in a block group.
|
* function to relocate all extents in a block group.
|
||||||
*/
|
*/
|
||||||
int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start)
|
int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start,
|
||||||
|
bool verbose)
|
||||||
{
|
{
|
||||||
struct btrfs_block_group *bg;
|
struct btrfs_block_group *bg;
|
||||||
struct btrfs_root *extent_root = btrfs_extent_root(fs_info, group_start);
|
struct btrfs_root *extent_root = btrfs_extent_root(fs_info, group_start);
|
||||||
|
@ -4000,7 +4001,8 @@ int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe_relocation(rc->block_group);
|
if (verbose)
|
||||||
|
describe_relocation(rc->block_group);
|
||||||
|
|
||||||
btrfs_wait_block_group_reservations(rc->block_group);
|
btrfs_wait_block_group_reservations(rc->block_group);
|
||||||
btrfs_wait_nocow_writers(rc->block_group);
|
btrfs_wait_nocow_writers(rc->block_group);
|
||||||
|
@ -4044,8 +4046,10 @@ int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start)
|
||||||
if (rc->extents_found == 0)
|
if (rc->extents_found == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
btrfs_info(fs_info, "found %llu extents, stage: %s",
|
if (verbose)
|
||||||
rc->extents_found, stage_to_string(finishes_stage));
|
btrfs_info(fs_info, "found %llu extents, stage: %s",
|
||||||
|
rc->extents_found,
|
||||||
|
stage_to_string(finishes_stage));
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN_ON(rc->block_group->pinned > 0);
|
WARN_ON(rc->block_group->pinned > 0);
|
||||||
|
|
|
@ -12,7 +12,8 @@ struct btrfs_trans_handle;
|
||||||
struct btrfs_ordered_extent;
|
struct btrfs_ordered_extent;
|
||||||
struct btrfs_pending_snapshot;
|
struct btrfs_pending_snapshot;
|
||||||
|
|
||||||
int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start);
|
int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start,
|
||||||
|
bool verbose);
|
||||||
int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, struct btrfs_root *root);
|
int btrfs_init_reloc_root(struct btrfs_trans_handle *trans, struct btrfs_root *root);
|
||||||
int btrfs_update_reloc_root(struct btrfs_trans_handle *trans,
|
int btrfs_update_reloc_root(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root);
|
struct btrfs_root *root);
|
||||||
|
|
|
@ -3412,7 +3412,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset)
|
int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset,
|
||||||
|
bool verbose)
|
||||||
{
|
{
|
||||||
struct btrfs_root *root = fs_info->chunk_root;
|
struct btrfs_root *root = fs_info->chunk_root;
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
|
@ -3442,7 +3443,7 @@ int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset)
|
||||||
|
|
||||||
/* step one, relocate all the extents inside this chunk */
|
/* step one, relocate all the extents inside this chunk */
|
||||||
btrfs_scrub_pause(fs_info);
|
btrfs_scrub_pause(fs_info);
|
||||||
ret = btrfs_relocate_block_group(fs_info, chunk_offset);
|
ret = btrfs_relocate_block_group(fs_info, chunk_offset, true);
|
||||||
btrfs_scrub_continue(fs_info);
|
btrfs_scrub_continue(fs_info);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
/*
|
/*
|
||||||
|
@ -3552,7 +3553,8 @@ again:
|
||||||
btrfs_release_path(path);
|
btrfs_release_path(path);
|
||||||
|
|
||||||
if (chunk_type & BTRFS_BLOCK_GROUP_SYSTEM) {
|
if (chunk_type & BTRFS_BLOCK_GROUP_SYSTEM) {
|
||||||
ret = btrfs_relocate_chunk(fs_info, found_key.offset);
|
ret = btrfs_relocate_chunk(fs_info, found_key.offset,
|
||||||
|
true);
|
||||||
if (ret == -ENOSPC)
|
if (ret == -ENOSPC)
|
||||||
failed++;
|
failed++;
|
||||||
else
|
else
|
||||||
|
@ -4217,7 +4219,7 @@ again:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = btrfs_relocate_chunk(fs_info, found_key.offset);
|
ret = btrfs_relocate_chunk(fs_info, found_key.offset, true);
|
||||||
mutex_unlock(&fs_info->reclaim_bgs_lock);
|
mutex_unlock(&fs_info->reclaim_bgs_lock);
|
||||||
if (ret == -ENOSPC) {
|
if (ret == -ENOSPC) {
|
||||||
enospc_errors++;
|
enospc_errors++;
|
||||||
|
@ -4985,7 +4987,7 @@ again:
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = btrfs_relocate_chunk(fs_info, chunk_offset);
|
ret = btrfs_relocate_chunk(fs_info, chunk_offset, true);
|
||||||
mutex_unlock(&fs_info->reclaim_bgs_lock);
|
mutex_unlock(&fs_info->reclaim_bgs_lock);
|
||||||
if (ret == -ENOSPC) {
|
if (ret == -ENOSPC) {
|
||||||
failed++;
|
failed++;
|
||||||
|
@ -8198,7 +8200,7 @@ static int relocating_repair_kthread(void *data)
|
||||||
btrfs_info(fs_info,
|
btrfs_info(fs_info,
|
||||||
"zoned: relocating block group %llu to repair IO failure",
|
"zoned: relocating block group %llu to repair IO failure",
|
||||||
target);
|
target);
|
||||||
ret = btrfs_relocate_chunk(fs_info, target);
|
ret = btrfs_relocate_chunk(fs_info, target, true);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (cache)
|
if (cache)
|
||||||
|
|
|
@ -763,7 +763,8 @@ void btrfs_describe_block_groups(u64 flags, char *buf, u32 size_buf);
|
||||||
int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info);
|
int btrfs_resume_balance_async(struct btrfs_fs_info *fs_info);
|
||||||
int btrfs_recover_balance(struct btrfs_fs_info *fs_info);
|
int btrfs_recover_balance(struct btrfs_fs_info *fs_info);
|
||||||
int btrfs_pause_balance(struct btrfs_fs_info *fs_info);
|
int btrfs_pause_balance(struct btrfs_fs_info *fs_info);
|
||||||
int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset);
|
int btrfs_relocate_chunk(struct btrfs_fs_info *fs_info, u64 chunk_offset,
|
||||||
|
bool verbose);
|
||||||
int btrfs_cancel_balance(struct btrfs_fs_info *fs_info);
|
int btrfs_cancel_balance(struct btrfs_fs_info *fs_info);
|
||||||
bool btrfs_chunk_writeable(struct btrfs_fs_info *fs_info, u64 chunk_offset);
|
bool btrfs_chunk_writeable(struct btrfs_fs_info *fs_info, u64 chunk_offset);
|
||||||
void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index);
|
void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index);
|
||||||
|
|
Loading…
Add table
Reference in a new issue