Lines Matching refs:dcc
935 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
941 pend_list = &dcc->pend_list[plist_idx(len)];
957 atomic_inc(&dcc->discard_cmd_cnt);
958 dcc->undiscard_blks += len;
966 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
967 struct rb_node *cur = rb_first_cached(&dcc->root), *next;
994 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
995 struct rb_node *node = dcc->root.rb_root.rb_node;
1068 static void __detach_discard_cmd(struct discard_cmd_control *dcc,
1072 atomic_sub(dc->queued, &dcc->queued_discard);
1075 rb_erase_cached(&dc->rb_node, &dcc->root);
1076 dcc->undiscard_blks -= dc->di.len;
1080 atomic_dec(&dcc->discard_cmd_cnt);
1086 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1108 __detach_discard_cmd(dcc, dc);
1159 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1167 dpolicy->max_requests = dcc->max_discard_request;
1168 dpolicy->io_aware_gran = dcc->discard_io_aware_gran;
1172 dpolicy->min_interval = dcc->min_discard_issue_time;
1173 dpolicy->mid_interval = dcc->mid_discard_issue_time;
1174 dpolicy->max_interval = dcc->max_discard_issue_time;
1178 if (utilization(sbi) > dcc->discard_urgent_util) {
1180 if (atomic_read(&dcc->discard_cmd_cnt))
1182 dcc->min_discard_issue_time;
1185 dpolicy->min_interval = dcc->min_discard_issue_time;
1186 dpolicy->mid_interval = dcc->mid_discard_issue_time;
1187 dpolicy->max_interval = dcc->max_discard_issue_time;
1209 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1224 atomic_inc(&dcc->queued_discard);
1236 atomic_inc(&dcc->issued_discard);
1249 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1251 &(dcc->fstrim_list) : &(dcc->wait_list);
1333 atomic_inc(&dcc->queued_discard);
1345 atomic_inc(&dcc->issued_discard);
1356 dcc->undiscard_blks -= len;
1366 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1367 struct rb_node **p = &dcc->root.rb_root.rb_node;
1390 rb_insert_color_cached(&dc->rb_node, &dcc->root, leftmost);
1393 static void __relocate_discard_cmd(struct discard_cmd_control *dcc,
1396 list_move_tail(&dc->list, &dcc->pend_list[plist_idx(dc->di.len)]);
1402 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1411 dcc->undiscard_blks -= di.len;
1415 dcc->undiscard_blks += dc->di.len;
1416 __relocate_discard_cmd(dcc, dc);
1429 dcc->undiscard_blks += dc->di.len;
1430 __relocate_discard_cmd(dcc, dc);
1439 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1448 dc = __lookup_discard_cmd_ret(&dcc->root, lstart,
1487 dcc->undiscard_blks += di.len;
1488 __relocate_discard_cmd(dcc, prev_dc);
1501 dcc->undiscard_blks += di.len;
1502 __relocate_discard_cmd(dcc, next_dc);
1557 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1564 mutex_lock(&dcc->cmd_lock);
1565 dc = __lookup_discard_cmd_ret(&dcc->root, dcc->next_pos,
1584 dcc->next_pos = dc->di.lstart + dc->di.len;
1599 dcc->next_pos = 0;
1601 mutex_unlock(&dcc->cmd_lock);
1612 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1632 if (i + 1 < dcc->max_ordered_discard && dpolicy->ordered) {
1637 pend_list = &dcc->pend_list[i];
1639 mutex_lock(&dcc->cmd_lock);
1642 if (unlikely(dcc->rbtree_check))
1665 mutex_unlock(&dcc->cmd_lock);
1684 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1690 mutex_lock(&dcc->cmd_lock);
1692 pend_list = &dcc->pend_list[i];
1699 mutex_unlock(&dcc->cmd_lock);
1712 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1716 mutex_lock(&dcc->cmd_lock);
1724 mutex_unlock(&dcc->cmd_lock);
1733 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1735 &(dcc->fstrim_list) : &(dcc->wait_list);
1742 mutex_lock(&dcc->cmd_lock);
1760 mutex_unlock(&dcc->cmd_lock);
1791 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1795 mutex_lock(&dcc->cmd_lock);
1802 mutex_unlock(&dcc->cmd_lock);
1810 &dcc->wait_list, NULL);
1812 mutex_unlock(&dcc->cmd_lock);
1827 mutex_unlock(&dcc->cmd_lock);
1835 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1837 if (dcc && dcc->f2fs_issue_discard) {
1838 struct task_struct *discard_thread = dcc->f2fs_issue_discard;
1840 dcc->f2fs_issue_discard = NULL;
1855 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1859 if (!atomic_read(&dcc->discard_cmd_cnt))
1863 dcc->discard_granularity);
1870 f2fs_bug_on(sbi, atomic_read(&dcc->discard_cmd_cnt));
1877 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1878 wait_queue_head_t *q = &dcc->discard_wait_queue;
1880 unsigned int wait_ms = dcc->min_discard_issue_time;
1888 dcc->discard_wake,
1897 dcc->discard_granularity);
1899 if (dcc->discard_wake)
1900 dcc->discard_wake = false;
1903 if (atomic_read(&dcc->queued_discard))
1913 !atomic_read(&dcc->discard_cmd_cnt)) {
1931 if (!atomic_read(&dcc->discard_cmd_cnt))
2134 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
2135 struct list_head *head = &dcc->entry_list;
2234 dcc->nr_discards -= total_len;
2244 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
2250 dcc->f2fs_issue_discard = kthread_run(issue_discard_thread, sbi,
2252 if (IS_ERR(dcc->f2fs_issue_discard)) {
2253 err = PTR_ERR(dcc->f2fs_issue_discard);
2254 dcc->f2fs_issue_discard = NULL;
2262 struct discard_cmd_control *dcc;
2266 dcc = SM_I(sbi)->dcc_info;
2270 dcc = f2fs_kzalloc(sbi, sizeof(struct discard_cmd_control), GFP_KERNEL);
2271 if (!dcc)
2274 dcc->discard_io_aware_gran = MAX_PLIST_NUM;
2275 dcc->discard_granularity = DEFAULT_DISCARD_GRANULARITY;
2276 dcc->max_ordered_discard = DEFAULT_MAX_ORDERED_DISCARD_GRANULARITY;
2278 dcc->discard_granularity = sbi->blocks_per_seg;
2280 dcc->discard_granularity = BLKS_PER_SEC(sbi);
2282 INIT_LIST_HEAD(&dcc->entry_list);
2284 INIT_LIST_HEAD(&dcc->pend_list[i]);
2285 INIT_LIST_HEAD(&dcc->wait_list);
2286 INIT_LIST_HEAD(&dcc->fstrim_list);
2287 mutex_init(&dcc->cmd_lock);
2288 atomic_set(&dcc->issued_discard, 0);
2289 atomic_set(&dcc->queued_discard, 0);
2290 atomic_set(&dcc->discard_cmd_cnt, 0);
2291 dcc->nr_discards = 0;
2292 dcc->max_discards = MAIN_SEGS(sbi) << sbi->log_blocks_per_seg;
2293 dcc->max_discard_request = DEF_MAX_DISCARD_REQUEST;
2294 dcc->min_discard_issue_time = DEF_MIN_DISCARD_ISSUE_TIME;
2295 dcc->mid_discard_issue_time = DEF_MID_DISCARD_ISSUE_TIME;
2296 dcc->max_discard_issue_time = DEF_MAX_DISCARD_ISSUE_TIME;
2297 dcc->discard_urgent_util = DEF_DISCARD_URGENT_UTIL;
2298 dcc->undiscard_blks = 0;
2299 dcc->next_pos = 0;
2300 dcc->root = RB_ROOT_CACHED;
2301 dcc->rbtree_check = false;
2303 init_waitqueue_head(&dcc->discard_wait_queue);
2304 SM_I(sbi)->dcc_info = dcc;
2308 kfree(dcc);
2317 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
2319 if (!dcc)
2330 kfree(dcc);
3145 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
3156 mutex_lock(&dcc->cmd_lock);
3157 if (unlikely(dcc->rbtree_check))
3160 dc = __lookup_discard_cmd_ret(&dcc->root, start,
3175 list_move_tail(&dc->list, &dcc->fstrim_list);
3188 mutex_unlock(&dcc->cmd_lock);
3204 mutex_unlock(&dcc->cmd_lock);