aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/gc.h
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk.kim@samsung.com>2013-02-04 01:11:17 -0500
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-02-11 17:15:02 -0500
commit437275272f9e635673f065300e5d95226a25cb06 (patch)
treebb0b8945d70971c200d098106b8879c1f84e109a /fs/f2fs/gc.h
parentb1f1daf8c72d615b64163e26488d8effeed29b60 (diff)
f2fs: clarify and enhance the f2fs_gc flow
This patch makes clearer the ambiguous f2fs_gc flow as follows. 1. Remove intermediate checkpoint condition during f2fs_gc (i.e., should_do_checkpoint() and GC_BLOCKED) 2. Remove unnecessary return values of f2fs_gc because of #1. (i.e., GC_NODE, GC_OK, etc) 3. Simplify write_checkpoint() because of #2. 4. Clarify the main f2fs_gc flow. o monitor how many freed sections during one iteration of do_garbage_collect(). o do GC more without checkpoints if we can't get enough free sections. o do checkpoint once we've got enough free sections through forground GCs. 5. Adopt thread-logging (Slack-Space-Recycle) scheme more aggressively on data log types. See. get_ssr_segement() Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs/gc.h')
-rw-r--r--fs/f2fs/gc.h16
1 files changed, 0 insertions, 16 deletions
diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h
index c407a75a7daa..30b2db003acd 100644
--- a/fs/f2fs/gc.h
+++ b/fs/f2fs/gc.h
@@ -22,15 +22,6 @@
22/* Search max. number of dirty segments to select a victim segment */ 22/* Search max. number of dirty segments to select a victim segment */
23#define MAX_VICTIM_SEARCH 20 23#define MAX_VICTIM_SEARCH 20
24 24
25enum {
26 GC_NONE = 0,
27 GC_ERROR,
28 GC_OK,
29 GC_NEXT,
30 GC_BLOCKED,
31 GC_DONE,
32};
33
34struct f2fs_gc_kthread { 25struct f2fs_gc_kthread {
35 struct task_struct *f2fs_gc_task; 26 struct task_struct *f2fs_gc_task;
36 wait_queue_head_t gc_wait_queue_head; 27 wait_queue_head_t gc_wait_queue_head;
@@ -103,10 +94,3 @@ static inline int is_idle(struct f2fs_sb_info *sbi)
103 struct request_list *rl = &q->root_rl; 94 struct request_list *rl = &q->root_rl;
104 return !(rl->count[BLK_RW_SYNC]) && !(rl->count[BLK_RW_ASYNC]); 95 return !(rl->count[BLK_RW_SYNC]) && !(rl->count[BLK_RW_ASYNC]);
105} 96}
106
107static inline bool should_do_checkpoint(struct f2fs_sb_info *sbi)
108{
109 int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
110 int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
111 return free_sections(sbi) <= (node_secs + 2 * dent_secs + 2);
112}