Lines Matching refs:dcc
925 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __create_discard_cmd() local
931 pend_list = &dcc->pend_list[plist_idx(len)]; in __create_discard_cmd()
947 atomic_inc(&dcc->discard_cmd_cnt); in __create_discard_cmd()
948 dcc->undiscard_blks += len; in __create_discard_cmd()
959 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __attach_discard_cmd() local
965 rb_insert_color_cached(&dc->rb_node, &dcc->root, leftmost); in __attach_discard_cmd()
970 static void __detach_discard_cmd(struct discard_cmd_control *dcc, in __detach_discard_cmd() argument
974 atomic_sub(dc->queued, &dcc->queued_discard); in __detach_discard_cmd()
977 rb_erase_cached(&dc->rb_node, &dcc->root); in __detach_discard_cmd()
978 dcc->undiscard_blks -= dc->len; in __detach_discard_cmd()
982 atomic_dec(&dcc->discard_cmd_cnt); in __detach_discard_cmd()
988 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __remove_discard_cmd() local
1010 __detach_discard_cmd(dcc, dc); in __remove_discard_cmd()
1061 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __init_discard_policy() local
1069 dpolicy->max_requests = dcc->max_discard_request; in __init_discard_policy()
1070 dpolicy->io_aware_gran = dcc->discard_io_aware_gran; in __init_discard_policy()
1074 dpolicy->min_interval = dcc->min_discard_issue_time; in __init_discard_policy()
1075 dpolicy->mid_interval = dcc->mid_discard_issue_time; in __init_discard_policy()
1076 dpolicy->max_interval = dcc->max_discard_issue_time; in __init_discard_policy()
1080 if (utilization(sbi) > dcc->discard_urgent_util) { in __init_discard_policy()
1082 if (atomic_read(&dcc->discard_cmd_cnt)) in __init_discard_policy()
1084 dcc->min_discard_issue_time; in __init_discard_policy()
1087 dpolicy->min_interval = dcc->min_discard_issue_time; in __init_discard_policy()
1088 dpolicy->mid_interval = dcc->mid_discard_issue_time; in __init_discard_policy()
1089 dpolicy->max_interval = dcc->max_discard_issue_time; in __init_discard_policy()
1112 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __submit_discard_cmd() local
1114 &(dcc->fstrim_list) : &(dcc->wait_list); in __submit_discard_cmd()
1181 atomic_inc(&dcc->queued_discard); in __submit_discard_cmd()
1193 atomic_inc(&dcc->issued_discard); in __submit_discard_cmd()
1204 dcc->undiscard_blks -= len; in __submit_discard_cmd()
1216 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __insert_discard_tree() local
1227 p = f2fs_lookup_rb_tree_for_insert(sbi, &dcc->root, &parent, in __insert_discard_tree()
1234 static void __relocate_discard_cmd(struct discard_cmd_control *dcc, in __relocate_discard_cmd() argument
1237 list_move_tail(&dc->list, &dcc->pend_list[plist_idx(dc->len)]); in __relocate_discard_cmd()
1243 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __punch_discard_cmd() local
1252 dcc->undiscard_blks -= di.len; in __punch_discard_cmd()
1256 dcc->undiscard_blks += dc->len; in __punch_discard_cmd()
1257 __relocate_discard_cmd(dcc, dc); in __punch_discard_cmd()
1271 dcc->undiscard_blks += dc->len; in __punch_discard_cmd()
1272 __relocate_discard_cmd(dcc, dc); in __punch_discard_cmd()
1281 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __update_discard_tree_range() local
1290 dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root, in __update_discard_tree_range()
1332 dcc->undiscard_blks += di.len; in __update_discard_tree_range()
1333 __relocate_discard_cmd(dcc, prev_dc); in __update_discard_tree_range()
1346 dcc->undiscard_blks += di.len; in __update_discard_tree_range()
1347 __relocate_discard_cmd(dcc, next_dc); in __update_discard_tree_range()
1390 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __issue_discard_cmd_orderly() local
1395 unsigned int pos = dcc->next_pos; in __issue_discard_cmd_orderly()
1398 mutex_lock(&dcc->cmd_lock); in __issue_discard_cmd_orderly()
1399 dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root, in __issue_discard_cmd_orderly()
1421 dcc->next_pos = dc->lstart + dc->len; in __issue_discard_cmd_orderly()
1436 dcc->next_pos = 0; in __issue_discard_cmd_orderly()
1438 mutex_unlock(&dcc->cmd_lock); in __issue_discard_cmd_orderly()
1449 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __issue_discard_cmd() local
1469 if (i + 1 < dcc->max_ordered_discard && dpolicy->ordered) { in __issue_discard_cmd()
1474 pend_list = &dcc->pend_list[i]; in __issue_discard_cmd()
1476 mutex_lock(&dcc->cmd_lock); in __issue_discard_cmd()
1479 if (unlikely(dcc->rbtree_check)) in __issue_discard_cmd()
1481 &dcc->root, false)); in __issue_discard_cmd()
1503 mutex_unlock(&dcc->cmd_lock); in __issue_discard_cmd()
1522 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __drop_discard_cmd() local
1528 mutex_lock(&dcc->cmd_lock); in __drop_discard_cmd()
1530 pend_list = &dcc->pend_list[i]; in __drop_discard_cmd()
1537 mutex_unlock(&dcc->cmd_lock); in __drop_discard_cmd()
1550 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __wait_one_discard_bio() local
1554 mutex_lock(&dcc->cmd_lock); in __wait_one_discard_bio()
1562 mutex_unlock(&dcc->cmd_lock); in __wait_one_discard_bio()
1571 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __wait_discard_cmd_range() local
1573 &(dcc->fstrim_list) : &(dcc->wait_list); in __wait_discard_cmd_range()
1580 mutex_lock(&dcc->cmd_lock); in __wait_discard_cmd_range()
1597 mutex_unlock(&dcc->cmd_lock); in __wait_discard_cmd_range()
1628 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in f2fs_wait_discard_bio() local
1632 mutex_lock(&dcc->cmd_lock); in f2fs_wait_discard_bio()
1633 dc = (struct discard_cmd *)f2fs_lookup_rb_tree(&dcc->root, in f2fs_wait_discard_bio()
1643 mutex_unlock(&dcc->cmd_lock); in f2fs_wait_discard_bio()
1651 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in f2fs_stop_discard_thread() local
1653 if (dcc && dcc->f2fs_issue_discard) { in f2fs_stop_discard_thread()
1654 struct task_struct *discard_thread = dcc->f2fs_issue_discard; in f2fs_stop_discard_thread()
1656 dcc->f2fs_issue_discard = NULL; in f2fs_stop_discard_thread()
1671 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in f2fs_issue_discard_timeout() local
1675 if (!atomic_read(&dcc->discard_cmd_cnt)) in f2fs_issue_discard_timeout()
1679 dcc->discard_granularity); in f2fs_issue_discard_timeout()
1686 f2fs_bug_on(sbi, atomic_read(&dcc->discard_cmd_cnt)); in f2fs_issue_discard_timeout()
1693 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in issue_discard_thread() local
1694 wait_queue_head_t *q = &dcc->discard_wait_queue; in issue_discard_thread()
1696 unsigned int wait_ms = dcc->min_discard_issue_time; in issue_discard_thread()
1704 dcc->discard_wake, in issue_discard_thread()
1713 dcc->discard_granularity); in issue_discard_thread()
1715 if (dcc->discard_wake) in issue_discard_thread()
1716 dcc->discard_wake = false; in issue_discard_thread()
1719 if (atomic_read(&dcc->queued_discard)) in issue_discard_thread()
1729 !atomic_read(&dcc->discard_cmd_cnt)) { in issue_discard_thread()
1747 if (!atomic_read(&dcc->discard_cmd_cnt)) in issue_discard_thread()
1943 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in f2fs_clear_prefree_segments() local
1944 struct list_head *head = &dcc->entry_list; in f2fs_clear_prefree_segments()
2041 dcc->nr_discards -= total_len; in f2fs_clear_prefree_segments()
2051 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in f2fs_start_discard_thread() local
2057 dcc->f2fs_issue_discard = kthread_run(issue_discard_thread, sbi, in f2fs_start_discard_thread()
2059 if (IS_ERR(dcc->f2fs_issue_discard)) { in f2fs_start_discard_thread()
2060 err = PTR_ERR(dcc->f2fs_issue_discard); in f2fs_start_discard_thread()
2061 dcc->f2fs_issue_discard = NULL; in f2fs_start_discard_thread()
2069 struct discard_cmd_control *dcc; in create_discard_cmd_control() local
2073 dcc = SM_I(sbi)->dcc_info; in create_discard_cmd_control()
2077 dcc = f2fs_kzalloc(sbi, sizeof(struct discard_cmd_control), GFP_KERNEL); in create_discard_cmd_control()
2078 if (!dcc) in create_discard_cmd_control()
2081 dcc->discard_io_aware_gran = MAX_PLIST_NUM; in create_discard_cmd_control()
2082 dcc->discard_granularity = DEFAULT_DISCARD_GRANULARITY; in create_discard_cmd_control()
2083 dcc->max_ordered_discard = DEFAULT_MAX_ORDERED_DISCARD_GRANULARITY; in create_discard_cmd_control()
2085 dcc->discard_granularity = sbi->blocks_per_seg; in create_discard_cmd_control()
2087 dcc->discard_granularity = BLKS_PER_SEC(sbi); in create_discard_cmd_control()
2089 INIT_LIST_HEAD(&dcc->entry_list); in create_discard_cmd_control()
2091 INIT_LIST_HEAD(&dcc->pend_list[i]); in create_discard_cmd_control()
2092 INIT_LIST_HEAD(&dcc->wait_list); in create_discard_cmd_control()
2093 INIT_LIST_HEAD(&dcc->fstrim_list); in create_discard_cmd_control()
2094 mutex_init(&dcc->cmd_lock); in create_discard_cmd_control()
2095 atomic_set(&dcc->issued_discard, 0); in create_discard_cmd_control()
2096 atomic_set(&dcc->queued_discard, 0); in create_discard_cmd_control()
2097 atomic_set(&dcc->discard_cmd_cnt, 0); in create_discard_cmd_control()
2098 dcc->nr_discards = 0; in create_discard_cmd_control()
2099 dcc->max_discards = MAIN_SEGS(sbi) << sbi->log_blocks_per_seg; in create_discard_cmd_control()
2100 dcc->max_discard_request = DEF_MAX_DISCARD_REQUEST; in create_discard_cmd_control()
2101 dcc->min_discard_issue_time = DEF_MIN_DISCARD_ISSUE_TIME; in create_discard_cmd_control()
2102 dcc->mid_discard_issue_time = DEF_MID_DISCARD_ISSUE_TIME; in create_discard_cmd_control()
2103 dcc->max_discard_issue_time = DEF_MAX_DISCARD_ISSUE_TIME; in create_discard_cmd_control()
2104 dcc->discard_urgent_util = DEF_DISCARD_URGENT_UTIL; in create_discard_cmd_control()
2105 dcc->undiscard_blks = 0; in create_discard_cmd_control()
2106 dcc->next_pos = 0; in create_discard_cmd_control()
2107 dcc->root = RB_ROOT_CACHED; in create_discard_cmd_control()
2108 dcc->rbtree_check = false; in create_discard_cmd_control()
2110 init_waitqueue_head(&dcc->discard_wait_queue); in create_discard_cmd_control()
2111 SM_I(sbi)->dcc_info = dcc; in create_discard_cmd_control()
2115 kfree(dcc); in create_discard_cmd_control()
2124 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in destroy_discard_cmd_control() local
2126 if (!dcc) in destroy_discard_cmd_control()
2137 kfree(dcc); in destroy_discard_cmd_control()
2954 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info; in __issue_discard_cmd_range() local
2965 mutex_lock(&dcc->cmd_lock); in __issue_discard_cmd_range()
2966 if (unlikely(dcc->rbtree_check)) in __issue_discard_cmd_range()
2968 &dcc->root, false)); in __issue_discard_cmd_range()
2970 dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root, in __issue_discard_cmd_range()
2988 list_move_tail(&dc->list, &dcc->fstrim_list); in __issue_discard_cmd_range()
3001 mutex_unlock(&dcc->cmd_lock); in __issue_discard_cmd_range()
3017 mutex_unlock(&dcc->cmd_lock); in __issue_discard_cmd_range()