Lines Matching refs:dcc
1084 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1090 pend_list = &dcc->pend_list[plist_idx(len)];
1106 atomic_inc(&dcc->discard_cmd_cnt);
1107 dcc->undiscard_blks += len;
1118 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1124 rb_insert_color_cached(&dc->rb_node, &dcc->root, leftmost);
1129 static void __detach_discard_cmd(struct discard_cmd_control *dcc,
1133 atomic_sub(dc->queued, &dcc->queued_discard);
1136 rb_erase_cached(&dc->rb_node, &dcc->root);
1137 dcc->undiscard_blks -= dc->len;
1141 atomic_dec(&dcc->discard_cmd_cnt);
1147 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1169 __detach_discard_cmd(dcc, dc);
1220 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1235 dcc->discard_type = discard_type;
1268 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1270 &(dcc->fstrim_list) : &(dcc->wait_list);
1342 atomic_inc(&dcc->queued_discard);
1354 atomic_inc(&dcc->issued_discard);
1365 dcc->undiscard_blks -= len;
1377 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1388 p = f2fs_lookup_rb_tree_for_insert(sbi, &dcc->root, &parent,
1395 static void __relocate_discard_cmd(struct discard_cmd_control *dcc,
1398 list_move_tail(&dc->list, &dcc->pend_list[plist_idx(dc->len)]);
1404 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1413 dcc->undiscard_blks -= di.len;
1417 dcc->undiscard_blks += dc->len;
1418 __relocate_discard_cmd(dcc, dc);
1432 dcc->undiscard_blks += dc->len;
1433 __relocate_discard_cmd(dcc, dc);
1442 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1452 dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root,
1494 dcc->undiscard_blks += di.len;
1495 __relocate_discard_cmd(dcc, prev_dc);
1508 dcc->undiscard_blks += di.len;
1509 __relocate_discard_cmd(dcc, next_dc);
1554 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1559 unsigned int pos = dcc->next_pos;
1565 mutex_lock(&dcc->cmd_lock);
1567 dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root,
1589 dcc->next_pos = dc->lstart + dc->len;
1604 dcc->next_pos = 0;
1606 mutex_unlock(&dcc->cmd_lock);
1619 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1631 if (unlikely(dcc->rbtree_check)) {
1632 mutex_lock(&dcc->cmd_lock);
1633 f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi, &dcc->root, false));
1634 mutex_unlock(&dcc->cmd_lock);
1655 pend_list = &dcc->pend_list[i];
1657 mutex_lock(&dcc->cmd_lock);
1660 if (unlikely(dcc->rbtree_check))
1662 &dcc->root, false));
1681 mutex_unlock(&dcc->cmd_lock);
1704 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1710 mutex_lock(&dcc->cmd_lock);
1712 pend_list = &dcc->pend_list[i];
1719 mutex_unlock(&dcc->cmd_lock);
1732 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1736 mutex_lock(&dcc->cmd_lock);
1744 mutex_unlock(&dcc->cmd_lock);
1753 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1755 &(dcc->fstrim_list) : &(dcc->wait_list);
1763 mutex_lock(&dcc->cmd_lock);
1780 mutex_unlock(&dcc->cmd_lock);
1811 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1815 mutex_lock(&dcc->cmd_lock);
1816 dc = (struct discard_cmd *)f2fs_lookup_rb_tree(&dcc->root,
1826 mutex_unlock(&dcc->cmd_lock);
1834 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1836 if (dcc && dcc->f2fs_issue_discard) {
1837 struct task_struct *discard_thread = dcc->f2fs_issue_discard;
1839 dcc->f2fs_issue_discard = NULL;
1847 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1858 f2fs_bug_on(sbi, atomic_read(&dcc->discard_cmd_cnt));
1864 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1872 fs_available_blocks - dcc->undiscard_blks >=
1876 fs_available_blocks - dcc->undiscard_blks <
1888 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
1889 wait_queue_head_t *q = &dcc->discard_wait_queue;
1902 dcc->discard_wake,
1905 if (dcc->discard_wake)
1906 dcc->discard_wake = 0;
1909 if (atomic_read(&dcc->queued_discard))
2129 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
2130 struct list_head *head = &dcc->entry_list;
2220 dcc->nr_discards -= total_len;
2229 struct discard_cmd_control *dcc;
2233 dcc = SM_I(sbi)->dcc_info;
2237 dcc = f2fs_kzalloc(sbi, sizeof(struct discard_cmd_control), GFP_KERNEL);
2238 if (!dcc)
2241 dcc->discard_granularity = DISCARD_GRAN_BG;
2242 INIT_LIST_HEAD(&dcc->entry_list);
2244 INIT_LIST_HEAD(&dcc->pend_list[i]);
2245 INIT_LIST_HEAD(&dcc->wait_list);
2246 INIT_LIST_HEAD(&dcc->fstrim_list);
2247 mutex_init(&dcc->cmd_lock);
2248 atomic_set(&dcc->issued_discard, 0);
2249 atomic_set(&dcc->queued_discard, 0);
2250 atomic_set(&dcc->discard_cmd_cnt, 0);
2251 dcc->nr_discards = 0;
2252 dcc->max_discards = MAIN_SEGS(sbi) << sbi->log_blocks_per_seg;
2253 dcc->undiscard_blks = 0;
2254 dcc->next_pos = 0;
2255 dcc->root = RB_ROOT_CACHED;
2256 dcc->rbtree_check = false;
2258 init_waitqueue_head(&dcc->discard_wait_queue);
2259 SM_I(sbi)->dcc_info = dcc;
2261 dcc->f2fs_issue_discard = kthread_run(issue_discard_thread, sbi,
2263 if (IS_ERR(dcc->f2fs_issue_discard)) {
2264 err = PTR_ERR(dcc->f2fs_issue_discard);
2265 kfree(dcc);
2275 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
2277 if (!dcc)
2286 if (unlikely(atomic_read(&dcc->discard_cmd_cnt)))
2289 kfree(dcc);
3155 struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
3166 if (dcc->rbtree_check) {
3167 mutex_lock(&dcc->cmd_lock);
3168 f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi, &dcc->root, false));
3169 mutex_unlock(&dcc->cmd_lock);
3175 mutex_lock(&dcc->cmd_lock);
3176 if (unlikely(dcc->rbtree_check))
3178 &dcc->root, false));
3180 dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root,
3198 list_move_tail(&dc->list, &dcc->fstrim_list);
3211 mutex_unlock(&dcc->cmd_lock);
3227 mutex_unlock(&dcc->cmd_lock);