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);
|
||||
|
||||
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) {
|
||||
btrfs_dec_block_group_ro(bg);
|
||||
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.
|
||||
*/
|
||||
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_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;
|
||||
}
|
||||
|
||||
describe_relocation(rc->block_group);
|
||||
if (verbose)
|
||||
describe_relocation(rc->block_group);
|
||||
|
||||
btrfs_wait_block_group_reservations(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)
|
||||
break;
|
||||
|
||||
btrfs_info(fs_info, "found %llu extents, stage: %s",
|
||||
rc->extents_found, stage_to_string(finishes_stage));
|
||||
if (verbose)
|
||||
btrfs_info(fs_info, "found %llu extents, stage: %s",
|
||||
rc->extents_found,
|
||||
stage_to_string(finishes_stage));
|
||||
}
|
||||
|
||||
WARN_ON(rc->block_group->pinned > 0);
|
||||
|
|
|
@ -12,7 +12,8 @@ struct btrfs_trans_handle;
|
|||
struct btrfs_ordered_extent;
|
||||
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_update_reloc_root(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_root *root);
|
||||
|
|
|
@ -3412,7 +3412,8 @@ out:
|
|||
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_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 */
|
||||
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);
|
||||
if (ret) {
|
||||
/*
|
||||
|
@ -3552,7 +3553,8 @@ again:
|
|||
btrfs_release_path(path);
|
||||
|
||||
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)
|
||||
failed++;
|
||||
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);
|
||||
if (ret == -ENOSPC) {
|
||||
enospc_errors++;
|
||||
|
@ -4985,7 +4987,7 @@ again:
|
|||
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);
|
||||
if (ret == -ENOSPC) {
|
||||
failed++;
|
||||
|
@ -8198,7 +8200,7 @@ static int relocating_repair_kthread(void *data)
|
|||
btrfs_info(fs_info,
|
||||
"zoned: relocating block group %llu to repair IO failure",
|
||||
target);
|
||||
ret = btrfs_relocate_chunk(fs_info, target);
|
||||
ret = btrfs_relocate_chunk(fs_info, target, true);
|
||||
|
||||
out:
|
||||
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_recover_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);
|
||||
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);
|
||||
|
|
Loading…
Add table
Reference in a new issue