Lines Matching refs:block_group

72 					  struct btrfs_block_group *block_group)  in get_discard_list()  argument
74 return &discard_ctl->discard_list[block_group->discard_index]; in get_discard_list()
78 struct btrfs_block_group *block_group) in __add_to_discard_list() argument
83 if (list_empty(&block_group->discard_list) || in __add_to_discard_list()
84 block_group->discard_index == BTRFS_DISCARD_INDEX_UNUSED) { in __add_to_discard_list()
85 if (block_group->discard_index == BTRFS_DISCARD_INDEX_UNUSED) in __add_to_discard_list()
86 block_group->discard_index = BTRFS_DISCARD_INDEX_START; in __add_to_discard_list()
87 block_group->discard_eligible_time = (ktime_get_ns() + in __add_to_discard_list()
89 block_group->discard_state = BTRFS_DISCARD_RESET_CURSOR; in __add_to_discard_list()
92 list_move_tail(&block_group->discard_list, in __add_to_discard_list()
93 get_discard_list(discard_ctl, block_group)); in __add_to_discard_list()
97 struct btrfs_block_group *block_group) in add_to_discard_list() argument
99 if (!btrfs_is_block_group_data_only(block_group)) in add_to_discard_list()
103 __add_to_discard_list(discard_ctl, block_group); in add_to_discard_list()
108 struct btrfs_block_group *block_group) in add_to_discard_unused_list() argument
117 list_del_init(&block_group->discard_list); in add_to_discard_unused_list()
119 block_group->discard_index = BTRFS_DISCARD_INDEX_UNUSED; in add_to_discard_unused_list()
120 block_group->discard_eligible_time = (ktime_get_ns() + in add_to_discard_unused_list()
122 block_group->discard_state = BTRFS_DISCARD_RESET_CURSOR; in add_to_discard_unused_list()
123 list_add_tail(&block_group->discard_list, in add_to_discard_unused_list()
130 struct btrfs_block_group *block_group) in remove_from_discard_list() argument
136 if (block_group == discard_ctl->block_group) { in remove_from_discard_list()
138 discard_ctl->block_group = NULL; in remove_from_discard_list()
141 block_group->discard_eligible_time = 0; in remove_from_discard_list()
142 list_del_init(&block_group->discard_list); in remove_from_discard_list()
161 struct btrfs_block_group *ret_block_group = NULL, *block_group; in find_next_block_group() local
168 block_group = list_first_entry(discard_list, in find_next_block_group()
173 ret_block_group = block_group; in find_next_block_group()
179 block_group->discard_eligible_time) in find_next_block_group()
180 ret_block_group = block_group; in find_next_block_group()
204 struct btrfs_block_group *block_group; in peek_discard_list() local
208 block_group = find_next_block_group(discard_ctl, now); in peek_discard_list()
210 if (block_group && now >= block_group->discard_eligible_time) { in peek_discard_list()
211 if (block_group->discard_index == BTRFS_DISCARD_INDEX_UNUSED && in peek_discard_list()
212 block_group->used != 0) { in peek_discard_list()
213 if (btrfs_is_block_group_data_only(block_group)) in peek_discard_list()
214 __add_to_discard_list(discard_ctl, block_group); in peek_discard_list()
216 list_del_init(&block_group->discard_list); in peek_discard_list()
219 if (block_group->discard_state == BTRFS_DISCARD_RESET_CURSOR) { in peek_discard_list()
220 block_group->discard_cursor = block_group->start; in peek_discard_list()
221 block_group->discard_state = BTRFS_DISCARD_EXTENTS; in peek_discard_list()
223 discard_ctl->block_group = block_group; in peek_discard_list()
225 if (block_group) { in peek_discard_list()
226 *discard_state = block_group->discard_state; in peek_discard_list()
227 *discard_index = block_group->discard_index; in peek_discard_list()
231 return block_group; in peek_discard_list()
244 void btrfs_discard_check_filter(struct btrfs_block_group *block_group, in btrfs_discard_check_filter() argument
249 if (!block_group || in btrfs_discard_check_filter()
250 !btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC)) in btrfs_discard_check_filter()
253 discard_ctl = &block_group->fs_info->discard_ctl; in btrfs_discard_check_filter()
255 if (block_group->discard_index > BTRFS_DISCARD_INDEX_START && in btrfs_discard_check_filter()
256 bytes >= discard_minlen[block_group->discard_index - 1]) { in btrfs_discard_check_filter()
259 remove_from_discard_list(discard_ctl, block_group); in btrfs_discard_check_filter()
264 block_group->discard_index = i; in btrfs_discard_check_filter()
265 add_to_discard_list(discard_ctl, block_group); in btrfs_discard_check_filter()
281 struct btrfs_block_group *block_group) in btrfs_update_discard_index() argument
283 block_group->discard_index++; in btrfs_update_discard_index()
284 if (block_group->discard_index == BTRFS_NR_DISCARD_LISTS) { in btrfs_update_discard_index()
285 block_group->discard_index = 1; in btrfs_update_discard_index()
289 add_to_discard_list(discard_ctl, block_group); in btrfs_update_discard_index()
301 struct btrfs_block_group *block_group) in btrfs_discard_cancel_work() argument
303 if (remove_from_discard_list(discard_ctl, block_group)) { in btrfs_discard_cancel_work()
317 struct btrfs_block_group *block_group) in btrfs_discard_queue_work() argument
319 if (!block_group || !btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC)) in btrfs_discard_queue_work()
322 if (block_group->used == 0) in btrfs_discard_queue_work()
323 add_to_discard_unused_list(discard_ctl, block_group); in btrfs_discard_queue_work()
325 add_to_discard_list(discard_ctl, block_group); in btrfs_discard_queue_work()
334 struct btrfs_block_group *block_group; in __btrfs_discard_schedule_work() local
341 block_group = find_next_block_group(discard_ctl, now); in __btrfs_discard_schedule_work()
342 if (block_group) { in __btrfs_discard_schedule_work()
363 if (now < block_group->discard_eligible_time) { in __btrfs_discard_schedule_work()
364 u64 bg_timeout = block_group->discard_eligible_time - now; in __btrfs_discard_schedule_work()
404 struct btrfs_block_group *block_group) in btrfs_finish_discard_pass() argument
406 remove_from_discard_list(discard_ctl, block_group); in btrfs_finish_discard_pass()
408 if (block_group->used == 0) { in btrfs_finish_discard_pass()
409 if (btrfs_is_free_space_trimmed(block_group)) in btrfs_finish_discard_pass()
410 btrfs_mark_bg_unused(block_group); in btrfs_finish_discard_pass()
412 add_to_discard_unused_list(discard_ctl, block_group); in btrfs_finish_discard_pass()
414 btrfs_update_discard_index(discard_ctl, block_group); in btrfs_finish_discard_pass()
429 struct btrfs_block_group *block_group; in btrfs_discard_workfn() local
438 block_group = peek_discard_list(discard_ctl, &discard_state, in btrfs_discard_workfn()
440 if (!block_group || !btrfs_run_discard_work(discard_ctl)) in btrfs_discard_workfn()
442 if (now < block_group->discard_eligible_time) { in btrfs_discard_workfn()
462 btrfs_trim_block_group_bitmaps(block_group, &trimmed, in btrfs_discard_workfn()
463 block_group->discard_cursor, in btrfs_discard_workfn()
464 btrfs_block_group_end(block_group), in btrfs_discard_workfn()
468 btrfs_trim_block_group_extents(block_group, &trimmed, in btrfs_discard_workfn()
469 block_group->discard_cursor, in btrfs_discard_workfn()
470 btrfs_block_group_end(block_group), in btrfs_discard_workfn()
478 if (block_group->discard_cursor >= btrfs_block_group_end(block_group)) { in btrfs_discard_workfn()
480 btrfs_finish_discard_pass(discard_ctl, block_group); in btrfs_discard_workfn()
482 block_group->discard_cursor = block_group->start; in btrfs_discard_workfn()
484 if (block_group->discard_state != in btrfs_discard_workfn()
486 block_group->discard_state = in btrfs_discard_workfn()
493 discard_ctl->block_group = NULL; in btrfs_discard_workfn()
578 void btrfs_discard_update_discardable(struct btrfs_block_group *block_group, in btrfs_discard_update_discardable() argument
585 if (!block_group || in btrfs_discard_update_discardable()
586 !btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC) || in btrfs_discard_update_discardable()
587 !btrfs_is_block_group_data_only(block_group)) in btrfs_discard_update_discardable()
590 discard_ctl = &block_group->fs_info->discard_ctl; in btrfs_discard_update_discardable()
621 struct btrfs_block_group *block_group, *next; in btrfs_discard_punt_unused_bgs_list() local
625 list_for_each_entry_safe(block_group, next, &fs_info->unused_bgs, in btrfs_discard_punt_unused_bgs_list()
627 list_del_init(&block_group->bg_list); in btrfs_discard_punt_unused_bgs_list()
628 btrfs_put_block_group(block_group); in btrfs_discard_punt_unused_bgs_list()
629 btrfs_discard_queue_work(&fs_info->discard_ctl, block_group); in btrfs_discard_punt_unused_bgs_list()
646 struct btrfs_block_group *block_group, *next; in btrfs_discard_purge_list() local
651 list_for_each_entry_safe(block_group, next, in btrfs_discard_purge_list()
654 list_del_init(&block_group->discard_list); in btrfs_discard_purge_list()
656 if (block_group->used == 0) in btrfs_discard_purge_list()
657 btrfs_mark_bg_unused(block_group); in btrfs_discard_purge_list()