|
@@ -1581,16 +1581,20 @@ static bool add_discard_addrs(struct f2fs_sb_info *sbi, struct cp_control *cpc,
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+static void release_discard_addr(struct discard_entry *entry)
|
|
|
+{
|
|
|
+ list_del(&entry->list);
|
|
|
+ kmem_cache_free(discard_entry_slab, entry);
|
|
|
+}
|
|
|
+
|
|
|
void release_discard_addrs(struct f2fs_sb_info *sbi)
|
|
|
{
|
|
|
struct list_head *head = &(SM_I(sbi)->dcc_info->entry_list);
|
|
|
struct discard_entry *entry, *this;
|
|
|
|
|
|
/* drop caches */
|
|
|
- list_for_each_entry_safe(entry, this, head, list) {
|
|
|
- list_del(&entry->list);
|
|
|
- kmem_cache_free(discard_entry_slab, entry);
|
|
|
- }
|
|
|
+ list_for_each_entry_safe(entry, this, head, list)
|
|
|
+ release_discard_addr(entry);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1690,9 +1694,8 @@ skip:
|
|
|
if (cur_pos < sbi->blocks_per_seg)
|
|
|
goto find_next;
|
|
|
|
|
|
- list_del(&entry->list);
|
|
|
+ release_discard_addr(entry);
|
|
|
dcc->nr_discards -= total_len;
|
|
|
- kmem_cache_free(discard_entry_slab, entry);
|
|
|
}
|
|
|
|
|
|
wake_up_discard_thread(sbi, false);
|