18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci#ifndef BTRFS_DISCARD_H
48c2ecf20Sopenharmony_ci#define BTRFS_DISCARD_H
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/sizes.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cistruct btrfs_fs_info;
98c2ecf20Sopenharmony_cistruct btrfs_discard_ctl;
108c2ecf20Sopenharmony_cistruct btrfs_block_group;
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci/* Discard size limits */
138c2ecf20Sopenharmony_ci#define BTRFS_ASYNC_DISCARD_DEFAULT_MAX_SIZE		(SZ_64M)
148c2ecf20Sopenharmony_ci#define BTRFS_ASYNC_DISCARD_MAX_FILTER			(SZ_1M)
158c2ecf20Sopenharmony_ci#define BTRFS_ASYNC_DISCARD_MIN_FILTER			(SZ_32K)
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/* List operations */
188c2ecf20Sopenharmony_civoid btrfs_discard_check_filter(struct btrfs_block_group *block_group, u64 bytes);
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci/* Work operations */
218c2ecf20Sopenharmony_civoid btrfs_discard_cancel_work(struct btrfs_discard_ctl *discard_ctl,
228c2ecf20Sopenharmony_ci			       struct btrfs_block_group *block_group);
238c2ecf20Sopenharmony_civoid btrfs_discard_queue_work(struct btrfs_discard_ctl *discard_ctl,
248c2ecf20Sopenharmony_ci			      struct btrfs_block_group *block_group);
258c2ecf20Sopenharmony_civoid btrfs_discard_schedule_work(struct btrfs_discard_ctl *discard_ctl,
268c2ecf20Sopenharmony_ci				 bool override);
278c2ecf20Sopenharmony_cibool btrfs_run_discard_work(struct btrfs_discard_ctl *discard_ctl);
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci/* Update operations */
308c2ecf20Sopenharmony_civoid btrfs_discard_calc_delay(struct btrfs_discard_ctl *discard_ctl);
318c2ecf20Sopenharmony_civoid btrfs_discard_update_discardable(struct btrfs_block_group *block_group,
328c2ecf20Sopenharmony_ci				      struct btrfs_free_space_ctl *ctl);
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci/* Setup/cleanup operations */
358c2ecf20Sopenharmony_civoid btrfs_discard_punt_unused_bgs_list(struct btrfs_fs_info *fs_info);
368c2ecf20Sopenharmony_civoid btrfs_discard_resume(struct btrfs_fs_info *fs_info);
378c2ecf20Sopenharmony_civoid btrfs_discard_stop(struct btrfs_fs_info *fs_info);
388c2ecf20Sopenharmony_civoid btrfs_discard_init(struct btrfs_fs_info *fs_info);
398c2ecf20Sopenharmony_civoid btrfs_discard_cleanup(struct btrfs_fs_info *fs_info);
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci#endif
42