
Throttle the maximum size of a discard so that we can provide an upper bound for the rate of async discard. While the block layer is able to split discards into the appropriate sized discards, we want to be able to account more accurately the rate at which we are consuming NCQ slots as well as limit the upper bound of work for a discard. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Dennis Zhou <dennis@kernel.org> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
37 lines
1.2 KiB
C
37 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#ifndef BTRFS_DISCARD_H
|
|
#define BTRFS_DISCARD_H
|
|
|
|
#include <linux/sizes.h>
|
|
|
|
struct btrfs_fs_info;
|
|
struct btrfs_discard_ctl;
|
|
struct btrfs_block_group;
|
|
|
|
/* Discard size limits */
|
|
#define BTRFS_ASYNC_DISCARD_MAX_SIZE (SZ_64M)
|
|
|
|
/* Work operations */
|
|
void btrfs_discard_cancel_work(struct btrfs_discard_ctl *discard_ctl,
|
|
struct btrfs_block_group *block_group);
|
|
void btrfs_discard_queue_work(struct btrfs_discard_ctl *discard_ctl,
|
|
struct btrfs_block_group *block_group);
|
|
void btrfs_discard_schedule_work(struct btrfs_discard_ctl *discard_ctl,
|
|
bool override);
|
|
bool btrfs_run_discard_work(struct btrfs_discard_ctl *discard_ctl);
|
|
|
|
/* Update operations */
|
|
void btrfs_discard_calc_delay(struct btrfs_discard_ctl *discard_ctl);
|
|
void btrfs_discard_update_discardable(struct btrfs_block_group *block_group,
|
|
struct btrfs_free_space_ctl *ctl);
|
|
|
|
/* Setup/cleanup operations */
|
|
void btrfs_discard_punt_unused_bgs_list(struct btrfs_fs_info *fs_info);
|
|
void btrfs_discard_resume(struct btrfs_fs_info *fs_info);
|
|
void btrfs_discard_stop(struct btrfs_fs_info *fs_info);
|
|
void btrfs_discard_init(struct btrfs_fs_info *fs_info);
|
|
void btrfs_discard_cleanup(struct btrfs_fs_info *fs_info);
|
|
|
|
#endif
|