f2fs: fix to avoid accessing uninitialized spinlock
[linux-2.6-block.git] / fs / f2fs / gc.c
CommitLineData
7c1a000d 1// SPDX-License-Identifier: GPL-2.0
0a8165d7 2/*
7bc09003
JK
3 * fs/f2fs/gc.c
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
7bc09003
JK
7 */
8#include <linux/fs.h>
9#include <linux/module.h>
7bc09003
JK
10#include <linux/init.h>
11#include <linux/f2fs_fs.h>
12#include <linux/kthread.h>
13#include <linux/delay.h>
14#include <linux/freezer.h>
b4b10061 15#include <linux/sched/signal.h>
6691d940 16#include <linux/random.h>
4034247a 17#include <linux/sched/mm.h>
7bc09003
JK
18
19#include "f2fs.h"
20#include "node.h"
21#include "segment.h"
22#include "gc.h"
52118743 23#include "iostat.h"
8e46b3ed 24#include <trace/events/f2fs.h>
7bc09003 25
093749e2
CY
26static struct kmem_cache *victim_entry_slab;
27
da52f8ad
JQ
28static unsigned int count_bits(const unsigned long *addr,
29 unsigned int offset, unsigned int len);
30
7bc09003
JK
31static int gc_thread_func(void *data)
32{
33 struct f2fs_sb_info *sbi = data;
b59d0bae 34 struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
7bc09003 35 wait_queue_head_t *wq = &sbi->gc_thread->gc_wait_queue_head;
5911d2d1 36 wait_queue_head_t *fggc_wq = &sbi->gc_thread->fggc_wq;
b8c502b8 37 unsigned int wait_ms;
d147ea4a
JK
38 struct f2fs_gc_control gc_control = {
39 .victim_segno = NULL_SEGNO,
c58d7c55
JK
40 .should_migrate_blocks = false,
41 .err_gc_skipped = false };
7bc09003 42
b59d0bae 43 wait_ms = gc_th->min_sleep_time;
7bc09003 44
1d7be270 45 set_freezable();
7bc09003 46 do {
5911d2d1 47 bool sync_mode, foreground = false;
bbbc34fd 48
1d7be270 49 wait_event_interruptible_timeout(*wq,
d9872a69 50 kthread_should_stop() || freezing(current) ||
5911d2d1 51 waitqueue_active(fggc_wq) ||
d9872a69 52 gc_th->gc_wake,
1d7be270
JK
53 msecs_to_jiffies(wait_ms));
54
5911d2d1
CY
55 if (test_opt(sbi, GC_MERGE) && waitqueue_active(fggc_wq))
56 foreground = true;
57
d9872a69
JK
58 /* give it a try one time */
59 if (gc_th->gc_wake)
60 gc_th->gc_wake = 0;
61
274bd9ba
CY
62 if (try_to_freeze()) {
63 stat_other_skip_bggc_count(sbi);
7bc09003 64 continue;
274bd9ba 65 }
7bc09003
JK
66 if (kthread_should_stop())
67 break;
68
d6212a5f 69 if (sbi->sb->s_writers.frozen >= SB_FREEZE_WRITE) {
88dd8934 70 increase_sleep_time(gc_th, &wait_ms);
274bd9ba 71 stat_other_skip_bggc_count(sbi);
d6212a5f
CL
72 continue;
73 }
74
55523519 75 if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
c45d6002 76 f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
a9cfee0e
CY
77 f2fs_stop_checkpoint(sbi, false,
78 STOP_CP_REASON_FAULT_INJECT);
55523519 79 }
0f348028 80
274bd9ba
CY
81 if (!sb_start_write_trylock(sbi->sb)) {
82 stat_other_skip_bggc_count(sbi);
dc6febb6 83 continue;
274bd9ba 84 }
dc6febb6 85
7bc09003
JK
86 /*
87 * [GC triggering condition]
88 * 0. GC is not conducted currently.
89 * 1. There are enough dirty segments.
90 * 2. IO subsystem is idle by checking the # of writeback pages.
91 * 3. IO subsystem is idle by checking the # of requests in
92 * bdev's request list.
93 *
e1c42045 94 * Note) We have to avoid triggering GCs frequently.
7bc09003
JK
95 * Because it is possible that some segments can be
96 * invalidated soon after by user update or deletion.
97 * So, I'd like to wait some time to collect dirty segments.
98 */
d98af5f4
DJ
99 if (sbi->gc_mode == GC_URGENT_HIGH ||
100 sbi->gc_mode == GC_URGENT_MID) {
d9872a69 101 wait_ms = gc_th->urgent_sleep_time;
e4544b63 102 f2fs_down_write(&sbi->gc_lock);
d9872a69
JK
103 goto do_gc;
104 }
105
5911d2d1 106 if (foreground) {
e4544b63 107 f2fs_down_write(&sbi->gc_lock);
5911d2d1 108 goto do_gc;
e4544b63 109 } else if (!f2fs_down_write_trylock(&sbi->gc_lock)) {
274bd9ba 110 stat_other_skip_bggc_count(sbi);
69babac0 111 goto next;
274bd9ba 112 }
69babac0 113
a7d10cf3 114 if (!is_idle(sbi, GC_TIME)) {
88dd8934 115 increase_sleep_time(gc_th, &wait_ms);
e4544b63 116 f2fs_up_write(&sbi->gc_lock);
274bd9ba 117 stat_io_skip_bggc_count(sbi);
dc6febb6 118 goto next;
7bc09003
JK
119 }
120
121 if (has_enough_invalid_blocks(sbi))
88dd8934 122 decrease_sleep_time(gc_th, &wait_ms);
7bc09003 123 else
88dd8934 124 increase_sleep_time(gc_th, &wait_ms);
d9872a69 125do_gc:
5911d2d1
CY
126 if (!foreground)
127 stat_inc_bggc_count(sbi->stat_info);
7bc09003 128
bbbc34fd
CY
129 sync_mode = F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_SYNC;
130
5911d2d1
CY
131 /* foreground GC was been triggered via f2fs_balance_fs() */
132 if (foreground)
133 sync_mode = false;
134
d147ea4a
JK
135 gc_control.init_gc_type = sync_mode ? FG_GC : BG_GC;
136 gc_control.no_bg_gc = foreground;
c81d5bae 137 gc_control.nr_free_secs = foreground ? 1 : 0;
d147ea4a 138
43727527 139 /* if return value is not zero, no victim was selected */
1adaa71e 140 if (f2fs_gc(sbi, &gc_control)) {
141 /* don't bother wait_ms by foreground gc */
142 if (!foreground)
143 wait_ms = gc_th->no_gc_sleep_time;
144 }
81eb8d6e 145
5911d2d1
CY
146 if (foreground)
147 wake_up_all(&gc_th->fggc_wq);
148
84e4214f
JK
149 trace_f2fs_background_gc(sbi->sb, wait_ms,
150 prefree_segments(sbi), free_segments(sbi));
151
4660f9c0 152 /* balancing f2fs's metadata periodically */
7bcd0cfa 153 f2fs_balance_fs_bg(sbi, true);
dc6febb6 154next:
e5a0db6a
YL
155 if (sbi->gc_mode != GC_NORMAL) {
156 spin_lock(&sbi->gc_remaining_trials_lock);
157 if (sbi->gc_remaining_trials) {
158 sbi->gc_remaining_trials--;
159 if (!sbi->gc_remaining_trials)
6359a1aa
YL
160 sbi->gc_mode = GC_NORMAL;
161 }
e5a0db6a 162 spin_unlock(&sbi->gc_remaining_trials_lock);
6359a1aa 163 }
dc6febb6 164 sb_end_write(sbi->sb);
81eb8d6e 165
7bc09003
JK
166 } while (!kthread_should_stop());
167 return 0;
168}
169
4d57b86d 170int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
7bc09003 171{
1042d60f 172 struct f2fs_gc_kthread *gc_th;
ec7b1f2d 173 dev_t dev = sbi->sb->s_bdev->bd_dev;
7bc09003 174
1ecc0c5c 175 gc_th = f2fs_kmalloc(sbi, sizeof(struct f2fs_gc_kthread), GFP_KERNEL);
146dbcbf
YL
176 if (!gc_th)
177 return -ENOMEM;
7bc09003 178
d9872a69 179 gc_th->urgent_sleep_time = DEF_GC_THREAD_URGENT_SLEEP_TIME;
b59d0bae
NJ
180 gc_th->min_sleep_time = DEF_GC_THREAD_MIN_SLEEP_TIME;
181 gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME;
182 gc_th->no_gc_sleep_time = DEF_GC_THREAD_NOGC_SLEEP_TIME;
183
5f029c04 184 gc_th->gc_wake = 0;
d2dc095f 185
7bc09003
JK
186 sbi->gc_thread = gc_th;
187 init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head);
5911d2d1 188 init_waitqueue_head(&sbi->gc_thread->fggc_wq);
7bc09003 189 sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi,
ec7b1f2d 190 "f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
7bc09003 191 if (IS_ERR(gc_th->f2fs_gc_task)) {
146dbcbf
YL
192 int err = PTR_ERR(gc_th->f2fs_gc_task);
193
c8eb7024 194 kfree(gc_th);
25718423 195 sbi->gc_thread = NULL;
146dbcbf 196 return err;
7bc09003 197 }
146dbcbf
YL
198
199 return 0;
7bc09003
JK
200}
201
4d57b86d 202void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi)
7bc09003
JK
203{
204 struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
5f029c04 205
7bc09003
JK
206 if (!gc_th)
207 return;
208 kthread_stop(gc_th->f2fs_gc_task);
5911d2d1 209 wake_up_all(&gc_th->fggc_wq);
c8eb7024 210 kfree(gc_th);
7bc09003
JK
211 sbi->gc_thread = NULL;
212}
213
5b0e9539 214static int select_gc_type(struct f2fs_sb_info *sbi, int gc_type)
7bc09003 215{
093749e2
CY
216 int gc_mode;
217
218 if (gc_type == BG_GC) {
219 if (sbi->am.atgc_enabled)
220 gc_mode = GC_AT;
221 else
222 gc_mode = GC_CB;
223 } else {
224 gc_mode = GC_GREEDY;
225 }
d2dc095f 226
5b0e9539
JK
227 switch (sbi->gc_mode) {
228 case GC_IDLE_CB:
229 gc_mode = GC_CB;
230 break;
231 case GC_IDLE_GREEDY:
0e5e8111 232 case GC_URGENT_HIGH:
b27bc809 233 gc_mode = GC_GREEDY;
5b0e9539 234 break;
093749e2
CY
235 case GC_IDLE_AT:
236 gc_mode = GC_AT;
237 break;
5b0e9539 238 }
093749e2 239
d2dc095f 240 return gc_mode;
7bc09003
JK
241}
242
243static void select_policy(struct f2fs_sb_info *sbi, int gc_type,
244 int type, struct victim_sel_policy *p)
245{
246 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
247
4ebefc44 248 if (p->alloc_mode == SSR) {
7bc09003 249 p->gc_mode = GC_GREEDY;
da52f8ad 250 p->dirty_bitmap = dirty_i->dirty_segmap[type];
a26b7c8a 251 p->max_search = dirty_i->nr_dirty[type];
7bc09003 252 p->ofs_unit = 1;
093749e2
CY
253 } else if (p->alloc_mode == AT_SSR) {
254 p->gc_mode = GC_GREEDY;
255 p->dirty_bitmap = dirty_i->dirty_segmap[type];
256 p->max_search = dirty_i->nr_dirty[type];
257 p->ofs_unit = 1;
7bc09003 258 } else {
5b0e9539 259 p->gc_mode = select_gc_type(sbi, gc_type);
7bc09003 260 p->ofs_unit = sbi->segs_per_sec;
da52f8ad
JQ
261 if (__is_large_section(sbi)) {
262 p->dirty_bitmap = dirty_i->dirty_secmap;
263 p->max_search = count_bits(p->dirty_bitmap,
264 0, MAIN_SECS(sbi));
265 } else {
266 p->dirty_bitmap = dirty_i->dirty_segmap[DIRTY];
267 p->max_search = dirty_i->nr_dirty[DIRTY];
268 }
7bc09003 269 }
a26b7c8a 270
7a88ddb5
CY
271 /*
272 * adjust candidates range, should select all dirty segments for
273 * foreground GC and urgent GC cases.
274 */
b27bc809 275 if (gc_type != FG_GC &&
0e5e8111 276 (sbi->gc_mode != GC_URGENT_HIGH) &&
093749e2 277 (p->gc_mode != GC_AT && p->alloc_mode != AT_SSR) &&
b27bc809 278 p->max_search > sbi->max_victim_search)
b1c57c1c 279 p->max_search = sbi->max_victim_search;
a26b7c8a 280
b94929d9 281 /* let's select beginning hot/small space first in no_heap mode*/
6691d940 282 if (f2fs_need_rand_seg(sbi))
81895a65 283 p->offset = prandom_u32_max(MAIN_SECS(sbi) * sbi->segs_per_sec);
6691d940 284 else if (test_opt(sbi, NOHEAP) &&
b94929d9 285 (type == CURSEG_HOT_DATA || IS_NODESEG(type)))
7a20b8a6
JK
286 p->offset = 0;
287 else
e066b83c 288 p->offset = SIT_I(sbi)->last_victim[p->gc_mode];
7bc09003
JK
289}
290
291static unsigned int get_max_cost(struct f2fs_sb_info *sbi,
292 struct victim_sel_policy *p)
293{
b7250d2d
JK
294 /* SSR allocates in a segment unit */
295 if (p->alloc_mode == SSR)
3519e3f9 296 return sbi->blocks_per_seg;
093749e2
CY
297 else if (p->alloc_mode == AT_SSR)
298 return UINT_MAX;
299
300 /* LFS */
7bc09003 301 if (p->gc_mode == GC_GREEDY)
c541a51b 302 return 2 * sbi->blocks_per_seg * p->ofs_unit;
7bc09003
JK
303 else if (p->gc_mode == GC_CB)
304 return UINT_MAX;
093749e2
CY
305 else if (p->gc_mode == GC_AT)
306 return UINT_MAX;
7bc09003
JK
307 else /* No other gc_mode */
308 return 0;
309}
310
311static unsigned int check_bg_victims(struct f2fs_sb_info *sbi)
312{
313 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
5ec4e49f 314 unsigned int secno;
7bc09003
JK
315
316 /*
317 * If the gc_type is FG_GC, we can select victim segments
318 * selected by background GC before.
319 * Those segments guarantee they have small valid blocks.
320 */
7cd8558b 321 for_each_set_bit(secno, dirty_i->victim_secmap, MAIN_SECS(sbi)) {
5ec4e49f 322 if (sec_usage_check(sbi, secno))
b65ee148 323 continue;
5ec4e49f 324 clear_bit(secno, dirty_i->victim_secmap);
4ddb1a4d 325 return GET_SEG_FROM_SEC(sbi, secno);
7bc09003
JK
326 }
327 return NULL_SEGNO;
328}
329
330static unsigned int get_cb_cost(struct f2fs_sb_info *sbi, unsigned int segno)
331{
332 struct sit_info *sit_i = SIT_I(sbi);
4ddb1a4d
JK
333 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
334 unsigned int start = GET_SEG_FROM_SEC(sbi, secno);
7bc09003
JK
335 unsigned long long mtime = 0;
336 unsigned int vblocks;
337 unsigned char age = 0;
338 unsigned char u;
339 unsigned int i;
de881df9 340 unsigned int usable_segs_per_sec = f2fs_usable_segs_in_sec(sbi, segno);
7bc09003 341
de881df9 342 for (i = 0; i < usable_segs_per_sec; i++)
7bc09003 343 mtime += get_seg_entry(sbi, start + i)->mtime;
302bd348 344 vblocks = get_valid_blocks(sbi, segno, true);
7bc09003 345
de881df9
AR
346 mtime = div_u64(mtime, usable_segs_per_sec);
347 vblocks = div_u64(vblocks, usable_segs_per_sec);
7bc09003
JK
348
349 u = (vblocks * 100) >> sbi->log_blocks_per_seg;
350
e1c42045 351 /* Handle if the system time has changed by the user */
7bc09003
JK
352 if (mtime < sit_i->min_mtime)
353 sit_i->min_mtime = mtime;
354 if (mtime > sit_i->max_mtime)
355 sit_i->max_mtime = mtime;
356 if (sit_i->max_mtime != sit_i->min_mtime)
357 age = 100 - div64_u64(100 * (mtime - sit_i->min_mtime),
358 sit_i->max_mtime - sit_i->min_mtime);
359
360 return UINT_MAX - ((100 * (100 - u) * age) / (100 + u));
361}
362
a57e564d
JX
363static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi,
364 unsigned int segno, struct victim_sel_policy *p)
7bc09003
JK
365{
366 if (p->alloc_mode == SSR)
2afce76a 367 return get_seg_entry(sbi, segno)->ckpt_valid_blocks;
7bc09003
JK
368
369 /* alloc_mode == LFS */
370 if (p->gc_mode == GC_GREEDY)
91f4382b 371 return get_valid_blocks(sbi, segno, true);
093749e2 372 else if (p->gc_mode == GC_CB)
7bc09003 373 return get_cb_cost(sbi, segno);
093749e2
CY
374
375 f2fs_bug_on(sbi, 1);
376 return 0;
7bc09003
JK
377}
378
688159b6
FL
379static unsigned int count_bits(const unsigned long *addr,
380 unsigned int offset, unsigned int len)
381{
382 unsigned int end = offset + len, sum = 0;
383
384 while (offset < end) {
385 if (test_bit(offset++, addr))
386 ++sum;
387 }
388 return sum;
389}
390
093749e2
CY
391static struct victim_entry *attach_victim_entry(struct f2fs_sb_info *sbi,
392 unsigned long long mtime, unsigned int segno,
393 struct rb_node *parent, struct rb_node **p,
394 bool left_most)
395{
396 struct atgc_management *am = &sbi->am;
397 struct victim_entry *ve;
398
32410577
CY
399 ve = f2fs_kmem_cache_alloc(victim_entry_slab,
400 GFP_NOFS, true, NULL);
093749e2
CY
401
402 ve->mtime = mtime;
403 ve->segno = segno;
404
405 rb_link_node(&ve->rb_node, parent, p);
406 rb_insert_color_cached(&ve->rb_node, &am->root, left_most);
407
408 list_add_tail(&ve->list, &am->victim_list);
409
410 am->victim_count++;
411
412 return ve;
413}
414
415static void insert_victim_entry(struct f2fs_sb_info *sbi,
416 unsigned long long mtime, unsigned int segno)
417{
418 struct atgc_management *am = &sbi->am;
419 struct rb_node **p;
420 struct rb_node *parent = NULL;
421 bool left_most = true;
422
423 p = f2fs_lookup_rb_tree_ext(sbi, &am->root, &parent, mtime, &left_most);
424 attach_victim_entry(sbi, mtime, segno, parent, p, left_most);
425}
426
427static void add_victim_entry(struct f2fs_sb_info *sbi,
428 struct victim_sel_policy *p, unsigned int segno)
429{
430 struct sit_info *sit_i = SIT_I(sbi);
431 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
432 unsigned int start = GET_SEG_FROM_SEC(sbi, secno);
433 unsigned long long mtime = 0;
434 unsigned int i;
435
436 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
437 if (p->gc_mode == GC_AT &&
438 get_valid_blocks(sbi, segno, true) == 0)
439 return;
093749e2
CY
440 }
441
442 for (i = 0; i < sbi->segs_per_sec; i++)
443 mtime += get_seg_entry(sbi, start + i)->mtime;
444 mtime = div_u64(mtime, sbi->segs_per_sec);
445
446 /* Handle if the system time has changed by the user */
447 if (mtime < sit_i->min_mtime)
448 sit_i->min_mtime = mtime;
449 if (mtime > sit_i->max_mtime)
450 sit_i->max_mtime = mtime;
451 if (mtime < sit_i->dirty_min_mtime)
452 sit_i->dirty_min_mtime = mtime;
453 if (mtime > sit_i->dirty_max_mtime)
454 sit_i->dirty_max_mtime = mtime;
455
456 /* don't choose young section as candidate */
457 if (sit_i->dirty_max_mtime - mtime < p->age_threshold)
458 return;
459
460 insert_victim_entry(sbi, mtime, segno);
461}
462
463static struct rb_node *lookup_central_victim(struct f2fs_sb_info *sbi,
464 struct victim_sel_policy *p)
465{
466 struct atgc_management *am = &sbi->am;
467 struct rb_node *parent = NULL;
468 bool left_most;
469
470 f2fs_lookup_rb_tree_ext(sbi, &am->root, &parent, p->age, &left_most);
471
472 return parent;
473}
474
475static void atgc_lookup_victim(struct f2fs_sb_info *sbi,
476 struct victim_sel_policy *p)
477{
478 struct sit_info *sit_i = SIT_I(sbi);
479 struct atgc_management *am = &sbi->am;
480 struct rb_root_cached *root = &am->root;
481 struct rb_node *node;
482 struct rb_entry *re;
483 struct victim_entry *ve;
484 unsigned long long total_time;
485 unsigned long long age, u, accu;
486 unsigned long long max_mtime = sit_i->dirty_max_mtime;
487 unsigned long long min_mtime = sit_i->dirty_min_mtime;
074b5ea2 488 unsigned int sec_blocks = CAP_BLKS_PER_SEC(sbi);
093749e2
CY
489 unsigned int vblocks;
490 unsigned int dirty_threshold = max(am->max_candidate_count,
491 am->candidate_ratio *
492 am->victim_count / 100);
493 unsigned int age_weight = am->age_weight;
494 unsigned int cost;
495 unsigned int iter = 0;
496
497 if (max_mtime < min_mtime)
498 return;
499
500 max_mtime += 1;
501 total_time = max_mtime - min_mtime;
502
503 accu = div64_u64(ULLONG_MAX, total_time);
504 accu = min_t(unsigned long long, div_u64(accu, 100),
505 DEFAULT_ACCURACY_CLASS);
506
507 node = rb_first_cached(root);
508next:
509 re = rb_entry_safe(node, struct rb_entry, rb_node);
510 if (!re)
511 return;
512
513 ve = (struct victim_entry *)re;
514
515 if (ve->mtime >= max_mtime || ve->mtime < min_mtime)
516 goto skip;
517
518 /* age = 10000 * x% * 60 */
519 age = div64_u64(accu * (max_mtime - ve->mtime), total_time) *
520 age_weight;
521
522 vblocks = get_valid_blocks(sbi, ve->segno, true);
523 f2fs_bug_on(sbi, !vblocks || vblocks == sec_blocks);
524
525 /* u = 10000 * x% * 40 */
526 u = div64_u64(accu * (sec_blocks - vblocks), sec_blocks) *
527 (100 - age_weight);
528
529 f2fs_bug_on(sbi, age + u >= UINT_MAX);
530
531 cost = UINT_MAX - (age + u);
532 iter++;
533
534 if (cost < p->min_cost ||
535 (cost == p->min_cost && age > p->oldest_age)) {
536 p->min_cost = cost;
537 p->oldest_age = age;
538 p->min_segno = ve->segno;
539 }
540skip:
541 if (iter < dirty_threshold) {
542 node = rb_next(node);
543 goto next;
544 }
545}
546
547/*
548 * select candidates around source section in range of
549 * [target - dirty_threshold, target + dirty_threshold]
550 */
551static void atssr_lookup_victim(struct f2fs_sb_info *sbi,
552 struct victim_sel_policy *p)
553{
554 struct sit_info *sit_i = SIT_I(sbi);
555 struct atgc_management *am = &sbi->am;
556 struct rb_node *node;
557 struct rb_entry *re;
558 struct victim_entry *ve;
559 unsigned long long age;
560 unsigned long long max_mtime = sit_i->dirty_max_mtime;
561 unsigned long long min_mtime = sit_i->dirty_min_mtime;
562 unsigned int seg_blocks = sbi->blocks_per_seg;
563 unsigned int vblocks;
564 unsigned int dirty_threshold = max(am->max_candidate_count,
565 am->candidate_ratio *
566 am->victim_count / 100);
567 unsigned int cost;
568 unsigned int iter = 0;
569 int stage = 0;
570
571 if (max_mtime < min_mtime)
572 return;
573 max_mtime += 1;
574next_stage:
575 node = lookup_central_victim(sbi, p);
576next_node:
577 re = rb_entry_safe(node, struct rb_entry, rb_node);
578 if (!re) {
579 if (stage == 0)
580 goto skip_stage;
581 return;
582 }
583
584 ve = (struct victim_entry *)re;
585
586 if (ve->mtime >= max_mtime || ve->mtime < min_mtime)
587 goto skip_node;
588
589 age = max_mtime - ve->mtime;
590
591 vblocks = get_seg_entry(sbi, ve->segno)->ckpt_valid_blocks;
592 f2fs_bug_on(sbi, !vblocks);
593
594 /* rare case */
595 if (vblocks == seg_blocks)
596 goto skip_node;
597
598 iter++;
599
600 age = max_mtime - abs(p->age - age);
601 cost = UINT_MAX - vblocks;
602
603 if (cost < p->min_cost ||
604 (cost == p->min_cost && age > p->oldest_age)) {
605 p->min_cost = cost;
606 p->oldest_age = age;
607 p->min_segno = ve->segno;
608 }
609skip_node:
610 if (iter < dirty_threshold) {
611 if (stage == 0)
612 node = rb_prev(node);
613 else if (stage == 1)
614 node = rb_next(node);
615 goto next_node;
616 }
617skip_stage:
618 if (stage < 1) {
619 stage++;
620 iter = 0;
621 goto next_stage;
622 }
623}
624static void lookup_victim_by_age(struct f2fs_sb_info *sbi,
625 struct victim_sel_policy *p)
626{
627 f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
628 &sbi->am.root, true));
629
630 if (p->gc_mode == GC_AT)
631 atgc_lookup_victim(sbi, p);
632 else if (p->alloc_mode == AT_SSR)
633 atssr_lookup_victim(sbi, p);
634 else
635 f2fs_bug_on(sbi, 1);
636}
637
638static void release_victim_entry(struct f2fs_sb_info *sbi)
639{
640 struct atgc_management *am = &sbi->am;
641 struct victim_entry *ve, *tmp;
642
643 list_for_each_entry_safe(ve, tmp, &am->victim_list, list) {
644 list_del(&ve->list);
645 kmem_cache_free(victim_entry_slab, ve);
646 am->victim_count--;
647 }
648
649 am->root = RB_ROOT_CACHED;
650
651 f2fs_bug_on(sbi, am->victim_count);
652 f2fs_bug_on(sbi, !list_empty(&am->victim_list));
653}
654
71419129
CY
655static bool f2fs_pin_section(struct f2fs_sb_info *sbi, unsigned int segno)
656{
657 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
658 unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
659
660 if (!dirty_i->enable_pin_section)
661 return false;
662 if (!test_and_set_bit(secno, dirty_i->pinned_secmap))
663 dirty_i->pinned_secmap_cnt++;
664 return true;
665}
666
667static bool f2fs_pinned_section_exists(struct dirty_seglist_info *dirty_i)
668{
669 return dirty_i->pinned_secmap_cnt;
670}
671
672static bool f2fs_section_is_pinned(struct dirty_seglist_info *dirty_i,
673 unsigned int secno)
674{
675 return dirty_i->enable_pin_section &&
676 f2fs_pinned_section_exists(dirty_i) &&
677 test_bit(secno, dirty_i->pinned_secmap);
678}
679
680static void f2fs_unpin_all_sections(struct f2fs_sb_info *sbi, bool enable)
681{
682 unsigned int bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
683
684 if (f2fs_pinned_section_exists(DIRTY_I(sbi))) {
685 memset(DIRTY_I(sbi)->pinned_secmap, 0, bitmap_size);
686 DIRTY_I(sbi)->pinned_secmap_cnt = 0;
687 }
688 DIRTY_I(sbi)->enable_pin_section = enable;
689}
690
691static int f2fs_gc_pinned_control(struct inode *inode, int gc_type,
692 unsigned int segno)
693{
694 if (!f2fs_is_pinned_file(inode))
695 return 0;
696 if (gc_type != FG_GC)
697 return -EBUSY;
698 if (!f2fs_pin_section(F2FS_I_SB(inode), segno))
699 f2fs_pin_file_control(inode, true);
700 return -EAGAIN;
701}
702
0a8165d7 703/*
111d2495 704 * This function is called from two paths.
7bc09003
JK
705 * One is garbage collection and the other is SSR segment selection.
706 * When it is called during GC, it just gets a victim segment
707 * and it does not remove it from dirty seglist.
708 * When it is called from SSR segment selection, it finds a segment
709 * which has minimum valid blocks and removes it from dirty seglist.
710 */
711static int get_victim_by_default(struct f2fs_sb_info *sbi,
093749e2
CY
712 unsigned int *result, int gc_type, int type,
713 char alloc_mode, unsigned long long age)
7bc09003
JK
714{
715 struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
e066b83c 716 struct sit_info *sm = SIT_I(sbi);
7bc09003 717 struct victim_sel_policy p;
3fa56503 718 unsigned int secno, last_victim;
04f0b2ea 719 unsigned int last_segment;
093749e2
CY
720 unsigned int nsearched;
721 bool is_atgc;
97767500 722 int ret = 0;
7bc09003 723
210f41bc 724 mutex_lock(&dirty_i->seglist_lock);
04f0b2ea 725 last_segment = MAIN_SECS(sbi) * sbi->segs_per_sec;
210f41bc 726
7bc09003 727 p.alloc_mode = alloc_mode;
093749e2
CY
728 p.age = age;
729 p.age_threshold = sbi->am.age_threshold;
7bc09003 730
093749e2
CY
731retry:
732 select_policy(sbi, gc_type, type, &p);
7bc09003 733 p.min_segno = NULL_SEGNO;
093749e2 734 p.oldest_age = 0;
3fa56503 735 p.min_cost = get_max_cost(sbi, &p);
7bc09003 736
093749e2
CY
737 is_atgc = (p.gc_mode == GC_AT || p.alloc_mode == AT_SSR);
738 nsearched = 0;
739
740 if (is_atgc)
741 SIT_I(sbi)->dirty_min_mtime = ULLONG_MAX;
742
e066b83c 743 if (*result != NULL_SEGNO) {
97767500
QZ
744 if (!get_valid_blocks(sbi, *result, false)) {
745 ret = -ENODATA;
746 goto out;
747 }
748
749 if (sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
750 ret = -EBUSY;
751 else
e066b83c
JK
752 p.min_segno = *result;
753 goto out;
754 }
755
97767500 756 ret = -ENODATA;
3342bb30
CY
757 if (p.max_search == 0)
758 goto out;
759
e3080b01
CY
760 if (__is_large_section(sbi) && p.alloc_mode == LFS) {
761 if (sbi->next_victim_seg[BG_GC] != NULL_SEGNO) {
762 p.min_segno = sbi->next_victim_seg[BG_GC];
763 *result = p.min_segno;
764 sbi->next_victim_seg[BG_GC] = NULL_SEGNO;
765 goto got_result;
766 }
767 if (gc_type == FG_GC &&
768 sbi->next_victim_seg[FG_GC] != NULL_SEGNO) {
769 p.min_segno = sbi->next_victim_seg[FG_GC];
770 *result = p.min_segno;
771 sbi->next_victim_seg[FG_GC] = NULL_SEGNO;
772 goto got_result;
773 }
774 }
775
e066b83c 776 last_victim = sm->last_victim[p.gc_mode];
7bc09003
JK
777 if (p.alloc_mode == LFS && gc_type == FG_GC) {
778 p.min_segno = check_bg_victims(sbi);
779 if (p.min_segno != NULL_SEGNO)
780 goto got_it;
781 }
782
783 while (1) {
da52f8ad
JQ
784 unsigned long cost, *dirty_bitmap;
785 unsigned int unit_no, segno;
786
787 dirty_bitmap = p.dirty_bitmap;
788 unit_no = find_next_bit(dirty_bitmap,
789 last_segment / p.ofs_unit,
790 p.offset / p.ofs_unit);
791 segno = unit_no * p.ofs_unit;
a43f7ec3 792 if (segno >= last_segment) {
e066b83c
JK
793 if (sm->last_victim[p.gc_mode]) {
794 last_segment =
795 sm->last_victim[p.gc_mode];
796 sm->last_victim[p.gc_mode] = 0;
7bc09003
JK
797 p.offset = 0;
798 continue;
799 }
800 break;
801 }
a57e564d
JX
802
803 p.offset = segno + p.ofs_unit;
da52f8ad 804 nsearched++;
688159b6 805
bbf9f7d9
ST
806#ifdef CONFIG_F2FS_CHECK_FS
807 /*
808 * skip selecting the invalid segno (that is failed due to block
809 * validity check failure during GC) to avoid endless GC loop in
810 * such cases.
811 */
812 if (test_bit(segno, sm->invalid_segmap))
813 goto next;
814#endif
815
4ddb1a4d 816 secno = GET_SEC_FROM_SEG(sbi, segno);
7bc09003 817
5ec4e49f 818 if (sec_usage_check(sbi, secno))
688159b6 819 goto next;
61461fc9 820
4354994f 821 /* Don't touch checkpointed data */
61461fc9
CY
822 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
823 if (p.alloc_mode == LFS) {
824 /*
825 * LFS is set to find source section during GC.
826 * The victim should have no checkpointed data.
827 */
828 if (get_ckpt_valid_blocks(sbi, segno, true))
829 goto next;
830 } else {
831 /*
832 * SSR | AT_SSR are set to find target segment
833 * for writes which can be full by checkpointed
834 * and newly written blocks.
835 */
836 if (!f2fs_segment_has_free_slot(sbi, segno))
837 goto next;
838 }
839 }
840
5ec4e49f 841 if (gc_type == BG_GC && test_bit(secno, dirty_i->victim_secmap))
688159b6 842 goto next;
7bc09003 843
71419129
CY
844 if (gc_type == FG_GC && f2fs_section_is_pinned(dirty_i, secno))
845 goto next;
846
093749e2
CY
847 if (is_atgc) {
848 add_victim_entry(sbi, &p, segno);
849 goto next;
850 }
851
7bc09003
JK
852 cost = get_gc_cost(sbi, segno, &p);
853
854 if (p.min_cost > cost) {
855 p.min_segno = segno;
856 p.min_cost = cost;
a57e564d 857 }
688159b6
FL
858next:
859 if (nsearched >= p.max_search) {
e066b83c 860 if (!sm->last_victim[p.gc_mode] && segno <= last_victim)
da52f8ad
JQ
861 sm->last_victim[p.gc_mode] =
862 last_victim + p.ofs_unit;
4ce53776 863 else
da52f8ad 864 sm->last_victim[p.gc_mode] = segno + p.ofs_unit;
04f0b2ea
QS
865 sm->last_victim[p.gc_mode] %=
866 (MAIN_SECS(sbi) * sbi->segs_per_sec);
7bc09003
JK
867 break;
868 }
869 }
093749e2
CY
870
871 /* get victim for GC_AT/AT_SSR */
872 if (is_atgc) {
873 lookup_victim_by_age(sbi, &p);
874 release_victim_entry(sbi);
875 }
876
877 if (is_atgc && p.min_segno == NULL_SEGNO &&
878 sm->elapsed_time < p.age_threshold) {
879 p.age_threshold = 0;
880 goto retry;
881 }
882
7bc09003 883 if (p.min_segno != NULL_SEGNO) {
b2b3460a 884got_it:
e3080b01
CY
885 *result = (p.min_segno / p.ofs_unit) * p.ofs_unit;
886got_result:
7bc09003 887 if (p.alloc_mode == LFS) {
4ddb1a4d 888 secno = GET_SEC_FROM_SEG(sbi, p.min_segno);
5ec4e49f
JK
889 if (gc_type == FG_GC)
890 sbi->cur_victim_sec = secno;
891 else
892 set_bit(secno, dirty_i->victim_secmap);
7bc09003 893 }
97767500 894 ret = 0;
8e46b3ed 895
e3c59108
ST
896 }
897out:
898 if (p.min_segno != NULL_SEGNO)
8e46b3ed
NJ
899 trace_f2fs_get_victim(sbi->sb, type, gc_type, &p,
900 sbi->cur_victim_sec,
901 prefree_segments(sbi), free_segments(sbi));
7bc09003
JK
902 mutex_unlock(&dirty_i->seglist_lock);
903
97767500 904 return ret;
7bc09003
JK
905}
906
907static const struct victim_selection default_v_ops = {
908 .get_victim = get_victim_by_default,
909};
910
7dda2af8 911static struct inode *find_gc_inode(struct gc_inode_list *gc_list, nid_t ino)
7bc09003 912{
7bc09003
JK
913 struct inode_entry *ie;
914
7dda2af8
CL
915 ie = radix_tree_lookup(&gc_list->iroot, ino);
916 if (ie)
917 return ie->inode;
7bc09003
JK
918 return NULL;
919}
920
7dda2af8 921static void add_gc_inode(struct gc_inode_list *gc_list, struct inode *inode)
7bc09003 922{
6cc4af56
GZ
923 struct inode_entry *new_ie;
924
7dda2af8 925 if (inode == find_gc_inode(gc_list, inode->i_ino)) {
6cc4af56
GZ
926 iput(inode);
927 return;
7bc09003 928 }
32410577
CY
929 new_ie = f2fs_kmem_cache_alloc(f2fs_inode_entry_slab,
930 GFP_NOFS, true, NULL);
7bc09003 931 new_ie->inode = inode;
f28e5034
CY
932
933 f2fs_radix_tree_insert(&gc_list->iroot, inode->i_ino, new_ie);
7dda2af8 934 list_add_tail(&new_ie->list, &gc_list->ilist);
7bc09003
JK
935}
936
7dda2af8 937static void put_gc_inode(struct gc_inode_list *gc_list)
7bc09003
JK
938{
939 struct inode_entry *ie, *next_ie;
5f029c04 940
7dda2af8
CL
941 list_for_each_entry_safe(ie, next_ie, &gc_list->ilist, list) {
942 radix_tree_delete(&gc_list->iroot, ie->inode->i_ino);
7bc09003
JK
943 iput(ie->inode);
944 list_del(&ie->list);
4d57b86d 945 kmem_cache_free(f2fs_inode_entry_slab, ie);
7bc09003
JK
946 }
947}
948
949static int check_valid_map(struct f2fs_sb_info *sbi,
950 unsigned int segno, int offset)
951{
952 struct sit_info *sit_i = SIT_I(sbi);
953 struct seg_entry *sentry;
954 int ret;
955
3d26fa6b 956 down_read(&sit_i->sentry_lock);
7bc09003
JK
957 sentry = get_seg_entry(sbi, segno);
958 ret = f2fs_test_bit(offset, sentry->cur_valid_map);
3d26fa6b 959 up_read(&sit_i->sentry_lock);
43727527 960 return ret;
7bc09003
JK
961}
962
0a8165d7 963/*
7bc09003
JK
964 * This function compares node address got in summary with that in NAT.
965 * On validity, copy that node with cold status, otherwise (invalid node)
966 * ignore that.
967 */
48018b4c 968static int gc_node_segment(struct f2fs_sb_info *sbi,
7bc09003
JK
969 struct f2fs_summary *sum, unsigned int segno, int gc_type)
970{
7bc09003 971 struct f2fs_summary *entry;
26d58599 972 block_t start_addr;
7bc09003 973 int off;
7ea984b0 974 int phase = 0;
c29fd0c0 975 bool fggc = (gc_type == FG_GC);
48018b4c 976 int submitted = 0;
de881df9 977 unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
7bc09003 978
26d58599
JK
979 start_addr = START_BLOCK(sbi, segno);
980
7bc09003
JK
981next_step:
982 entry = sum;
c718379b 983
c29fd0c0
CY
984 if (fggc && phase == 2)
985 atomic_inc(&sbi->wb_sync_req[NODE]);
986
de881df9 987 for (off = 0; off < usable_blks_in_seg; off++, entry++) {
7bc09003
JK
988 nid_t nid = le32_to_cpu(entry->nid);
989 struct page *node_page;
26d58599 990 struct node_info ni;
48018b4c 991 int err;
7bc09003 992
43727527 993 /* stop BG_GC if there is not enough free sections. */
7f3037a5 994 if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0))
48018b4c 995 return submitted;
7bc09003 996
43727527 997 if (check_valid_map(sbi, segno, off) == 0)
7bc09003
JK
998 continue;
999
7ea984b0 1000 if (phase == 0) {
4d57b86d 1001 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), 1,
7ea984b0
CY
1002 META_NAT, true);
1003 continue;
1004 }
1005
1006 if (phase == 1) {
4d57b86d 1007 f2fs_ra_node_page(sbi, nid);
7bc09003
JK
1008 continue;
1009 }
7ea984b0
CY
1010
1011 /* phase == 2 */
4d57b86d 1012 node_page = f2fs_get_node_page(sbi, nid);
7bc09003
JK
1013 if (IS_ERR(node_page))
1014 continue;
1015
4d57b86d 1016 /* block may become invalid during f2fs_get_node_page */
9a01b56b
HY
1017 if (check_valid_map(sbi, segno, off) == 0) {
1018 f2fs_put_page(node_page, 1);
1019 continue;
26d58599
JK
1020 }
1021
a9419b63 1022 if (f2fs_get_node_info(sbi, nid, &ni, false)) {
7735730d
CY
1023 f2fs_put_page(node_page, 1);
1024 continue;
1025 }
1026
26d58599
JK
1027 if (ni.blk_addr != start_addr + off) {
1028 f2fs_put_page(node_page, 1);
1029 continue;
9a01b56b
HY
1030 }
1031
48018b4c
CY
1032 err = f2fs_move_node_page(node_page, gc_type);
1033 if (!err && gc_type == FG_GC)
1034 submitted++;
e1235983 1035 stat_inc_node_blk_count(sbi, 1, gc_type);
7bc09003 1036 }
c718379b 1037
7ea984b0 1038 if (++phase < 3)
7bc09003 1039 goto next_step;
c29fd0c0
CY
1040
1041 if (fggc)
1042 atomic_dec(&sbi->wb_sync_req[NODE]);
48018b4c 1043 return submitted;
7bc09003
JK
1044}
1045
0a8165d7 1046/*
9af45ef5
JK
1047 * Calculate start block index indicating the given node offset.
1048 * Be careful, caller should give this node offset only indicating direct node
1049 * blocks. If any node offsets, which point the other types of node blocks such
1050 * as indirect or double indirect node blocks, are given, it must be a caller's
1051 * bug.
7bc09003 1052 */
4d57b86d 1053block_t f2fs_start_bidx_of_node(unsigned int node_ofs, struct inode *inode)
7bc09003 1054{
ce19a5d4
JK
1055 unsigned int indirect_blks = 2 * NIDS_PER_BLOCK + 4;
1056 unsigned int bidx;
7bc09003 1057
ce19a5d4
JK
1058 if (node_ofs == 0)
1059 return 0;
7bc09003 1060
ce19a5d4 1061 if (node_ofs <= 2) {
7bc09003
JK
1062 bidx = node_ofs - 1;
1063 } else if (node_ofs <= indirect_blks) {
ce19a5d4 1064 int dec = (node_ofs - 4) / (NIDS_PER_BLOCK + 1);
5f029c04 1065
7bc09003
JK
1066 bidx = node_ofs - 2 - dec;
1067 } else {
ce19a5d4 1068 int dec = (node_ofs - indirect_blks - 3) / (NIDS_PER_BLOCK + 1);
5f029c04 1069
7bc09003
JK
1070 bidx = node_ofs - 5 - dec;
1071 }
d02a6e61 1072 return bidx * ADDRS_PER_BLOCK(inode) + ADDRS_PER_INODE(inode);
7bc09003
JK
1073}
1074
c1079892 1075static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
7bc09003
JK
1076 struct node_info *dni, block_t blkaddr, unsigned int *nofs)
1077{
1078 struct page *node_page;
1079 nid_t nid;
c6ad7fd1 1080 unsigned int ofs_in_node, max_addrs;
7bc09003
JK
1081 block_t source_blkaddr;
1082
1083 nid = le32_to_cpu(sum->nid);
1084 ofs_in_node = le16_to_cpu(sum->ofs_in_node);
1085
4d57b86d 1086 node_page = f2fs_get_node_page(sbi, nid);
7bc09003 1087 if (IS_ERR(node_page))
c1079892 1088 return false;
7bc09003 1089
a9419b63 1090 if (f2fs_get_node_info(sbi, nid, dni, false)) {
7735730d
CY
1091 f2fs_put_page(node_page, 1);
1092 return false;
1093 }
7bc09003
JK
1094
1095 if (sum->version != dni->version) {
dcbb4c10
JP
1096 f2fs_warn(sbi, "%s: valid data with mismatched node version.",
1097 __func__);
c13ff37e 1098 set_sbi_flag(sbi, SBI_NEED_FSCK);
7bc09003
JK
1099 }
1100
6d18762e
CY
1101 if (f2fs_check_nid_range(sbi, dni->ino)) {
1102 f2fs_put_page(node_page, 1);
77900c45 1103 return false;
6d18762e 1104 }
77900c45 1105
c6ad7fd1
CY
1106 max_addrs = IS_INODE(node_page) ? DEF_ADDRS_PER_INODE :
1107 DEF_ADDRS_PER_BLOCK;
1108 if (ofs_in_node >= max_addrs) {
1109 f2fs_err(sbi, "Inconsistent ofs_in_node:%u in summary, ino:%u, nid:%u, max:%u",
1110 ofs_in_node, dni->ino, dni->nid, max_addrs);
c3db3c2f 1111 f2fs_put_page(node_page, 1);
c6ad7fd1
CY
1112 return false;
1113 }
1114
7bc09003 1115 *nofs = ofs_of_node(node_page);
a2ced1ce 1116 source_blkaddr = data_blkaddr(NULL, node_page, ofs_in_node);
7bc09003
JK
1117 f2fs_put_page(node_page, 1);
1118
bbf9f7d9
ST
1119 if (source_blkaddr != blkaddr) {
1120#ifdef CONFIG_F2FS_CHECK_FS
1121 unsigned int segno = GET_SEGNO(sbi, blkaddr);
1122 unsigned long offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
1123
1124 if (unlikely(check_valid_map(sbi, segno, offset))) {
1125 if (!test_and_set_bit(segno, SIT_I(sbi)->invalid_segmap)) {
833dcd35
JP
1126 f2fs_err(sbi, "mismatched blkaddr %u (source_blkaddr %u) in seg %u",
1127 blkaddr, source_blkaddr, segno);
f6db4307 1128 set_sbi_flag(sbi, SBI_NEED_FSCK);
bbf9f7d9
ST
1129 }
1130 }
1131#endif
c1079892 1132 return false;
bbf9f7d9 1133 }
c1079892 1134 return true;
7bc09003
JK
1135}
1136
6aa58d8a
CY
1137static int ra_data_block(struct inode *inode, pgoff_t index)
1138{
1139 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1140 struct address_space *mapping = inode->i_mapping;
1141 struct dnode_of_data dn;
1142 struct page *page;
1143 struct extent_info ei = {0, 0, 0};
1144 struct f2fs_io_info fio = {
1145 .sbi = sbi,
1146 .ino = inode->i_ino,
1147 .type = DATA,
1148 .temp = COLD,
1149 .op = REQ_OP_READ,
1150 .op_flags = 0,
1151 .encrypted_page = NULL,
1152 .in_list = false,
1153 .retry = false,
1154 };
1155 int err;
1156
1157 page = f2fs_grab_cache_page(mapping, index, true);
1158 if (!page)
1159 return -ENOMEM;
1160
1161 if (f2fs_lookup_extent_cache(inode, index, &ei)) {
1162 dn.data_blkaddr = ei.blk + index - ei.fofs;
93770ab7
CY
1163 if (unlikely(!f2fs_is_valid_blkaddr(sbi, dn.data_blkaddr,
1164 DATA_GENERIC_ENHANCE_READ))) {
10f966bb 1165 err = -EFSCORRUPTED;
95fa90c9 1166 f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR);
93770ab7
CY
1167 goto put_page;
1168 }
6aa58d8a
CY
1169 goto got_it;
1170 }
1171
1172 set_new_dnode(&dn, inode, NULL, NULL, 0);
1173 err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
1174 if (err)
1175 goto put_page;
1176 f2fs_put_dnode(&dn);
1177
93770ab7
CY
1178 if (!__is_valid_data_blkaddr(dn.data_blkaddr)) {
1179 err = -ENOENT;
1180 goto put_page;
1181 }
6aa58d8a 1182 if (unlikely(!f2fs_is_valid_blkaddr(sbi, dn.data_blkaddr,
93770ab7 1183 DATA_GENERIC_ENHANCE))) {
10f966bb 1184 err = -EFSCORRUPTED;
95fa90c9 1185 f2fs_handle_error(sbi, ERROR_INVALID_BLKADDR);
6aa58d8a
CY
1186 goto put_page;
1187 }
1188got_it:
1189 /* read page */
1190 fio.page = page;
1191 fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
1192
9bf1a3f7
YS
1193 /*
1194 * don't cache encrypted data into meta inode until previous dirty
1195 * data were writebacked to avoid racing between GC and flush.
1196 */
bae0ee7a 1197 f2fs_wait_on_page_writeback(page, DATA, true, true);
9bf1a3f7
YS
1198
1199 f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
1200
6aa58d8a
CY
1201 fio.encrypted_page = f2fs_pagecache_get_page(META_MAPPING(sbi),
1202 dn.data_blkaddr,
1203 FGP_LOCK | FGP_CREAT, GFP_NOFS);
1204 if (!fio.encrypted_page) {
1205 err = -ENOMEM;
1206 goto put_page;
1207 }
1208
1209 err = f2fs_submit_page_bio(&fio);
1210 if (err)
1211 goto put_encrypted_page;
1212 f2fs_put_page(fio.encrypted_page, 0);
1213 f2fs_put_page(page, 1);
8b83ac81 1214
34a23525
CY
1215 f2fs_update_iostat(sbi, inode, FS_DATA_READ_IO, F2FS_BLKSIZE);
1216 f2fs_update_iostat(sbi, NULL, FS_GDATA_READ_IO, F2FS_BLKSIZE);
8b83ac81 1217
6aa58d8a
CY
1218 return 0;
1219put_encrypted_page:
1220 f2fs_put_page(fio.encrypted_page, 1);
1221put_page:
1222 f2fs_put_page(page, 1);
1223 return err;
1224}
1225
d4c759ee
JK
1226/*
1227 * Move data block via META_MAPPING while keeping locked data page.
1228 * This can be used to move blocks, aka LBAs, directly on disk.
1229 */
48018b4c 1230static int move_data_block(struct inode *inode, block_t bidx,
2ef79ecb 1231 int gc_type, unsigned int segno, int off)
4375a336
JK
1232{
1233 struct f2fs_io_info fio = {
1234 .sbi = F2FS_I_SB(inode),
39d787be 1235 .ino = inode->i_ino,
4375a336 1236 .type = DATA,
a912b54d 1237 .temp = COLD,
04d328de 1238 .op = REQ_OP_READ,
70fd7614 1239 .op_flags = 0,
4375a336 1240 .encrypted_page = NULL,
fb830fc5 1241 .in_list = false,
fe16efe6 1242 .retry = false,
4375a336
JK
1243 };
1244 struct dnode_of_data dn;
1245 struct f2fs_summary sum;
1246 struct node_info ni;
6aa58d8a 1247 struct page *page, *mpage;
4356e48e 1248 block_t newaddr;
48018b4c 1249 int err = 0;
b0332a0f 1250 bool lfs_mode = f2fs_lfs_mode(fio.sbi);
ac2d750b
WG
1251 int type = fio.sbi->am.atgc_enabled && (gc_type == BG_GC) &&
1252 (fio.sbi->gc_mode != GC_URGENT_HIGH) ?
093749e2 1253 CURSEG_ALL_DATA_ATGC : CURSEG_COLD_DATA;
4375a336
JK
1254
1255 /* do not read out */
a56c7c6f 1256 page = f2fs_grab_cache_page(inode->i_mapping, bidx, false);
4375a336 1257 if (!page)
48018b4c 1258 return -ENOMEM;
4375a336 1259
48018b4c
CY
1260 if (!check_valid_map(F2FS_I_SB(inode), segno, off)) {
1261 err = -ENOENT;
20614711 1262 goto out;
48018b4c 1263 }
20614711 1264
71419129
CY
1265 err = f2fs_gc_pinned_control(inode, gc_type, segno);
1266 if (err)
1ad71a27 1267 goto out;
1ad71a27 1268
4375a336 1269 set_new_dnode(&dn, inode, NULL, NULL, 0);
4d57b86d 1270 err = f2fs_get_dnode_of_data(&dn, bidx, LOOKUP_NODE);
4375a336
JK
1271 if (err)
1272 goto out;
1273
08b39fbd
CY
1274 if (unlikely(dn.data_blkaddr == NULL_ADDR)) {
1275 ClearPageUptodate(page);
48018b4c 1276 err = -ENOENT;
4375a336 1277 goto put_out;
08b39fbd
CY
1278 }
1279
1280 /*
1281 * don't cache encrypted data into meta inode until previous dirty
1282 * data were writebacked to avoid racing between GC and flush.
1283 */
bae0ee7a 1284 f2fs_wait_on_page_writeback(page, DATA, true, true);
4375a336 1285
9bf1a3f7
YS
1286 f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
1287
a9419b63 1288 err = f2fs_get_node_info(fio.sbi, dn.nid, &ni, false);
7735730d
CY
1289 if (err)
1290 goto put_out;
1291
4375a336
JK
1292 /* read page */
1293 fio.page = page;
7a9d7548 1294 fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
4375a336 1295
107a805d 1296 if (lfs_mode)
e4544b63 1297 f2fs_down_write(&fio.sbi->io_order_lock);
107a805d 1298
543b8c46
JK
1299 mpage = f2fs_grab_cache_page(META_MAPPING(fio.sbi),
1300 fio.old_blkaddr, false);
d7cd3702
CY
1301 if (!mpage) {
1302 err = -ENOMEM;
543b8c46 1303 goto up_out;
d7cd3702 1304 }
543b8c46
JK
1305
1306 fio.encrypted_page = mpage;
1307
1308 /* read source block in mpage */
1309 if (!PageUptodate(mpage)) {
1310 err = f2fs_submit_page_bio(&fio);
1311 if (err) {
1312 f2fs_put_page(mpage, 1);
1313 goto up_out;
1314 }
8b83ac81 1315
34a23525
CY
1316 f2fs_update_iostat(fio.sbi, inode, FS_DATA_READ_IO,
1317 F2FS_BLKSIZE);
1318 f2fs_update_iostat(fio.sbi, NULL, FS_GDATA_READ_IO,
1319 F2FS_BLKSIZE);
8b83ac81 1320
543b8c46
JK
1321 lock_page(mpage);
1322 if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
1323 !PageUptodate(mpage))) {
1324 err = -EIO;
1325 f2fs_put_page(mpage, 1);
1326 goto up_out;
1327 }
1328 }
1329
cf740403
CY
1330 set_summary(&sum, dn.nid, dn.ofs_in_node, ni.version);
1331
1332 /* allocate block address */
4d57b86d 1333 f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
093749e2 1334 &sum, type, NULL);
4356e48e 1335
01eccef7
CY
1336 fio.encrypted_page = f2fs_pagecache_get_page(META_MAPPING(fio.sbi),
1337 newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
4356e48e
CY
1338 if (!fio.encrypted_page) {
1339 err = -ENOMEM;
6aa58d8a 1340 f2fs_put_page(mpage, 1);
543b8c46 1341 goto recover_block;
4356e48e 1342 }
548aedac 1343
543b8c46 1344 /* write target block */
bae0ee7a 1345 f2fs_wait_on_page_writeback(fio.encrypted_page, DATA, true, true);
543b8c46
JK
1346 memcpy(page_address(fio.encrypted_page),
1347 page_address(mpage), PAGE_SIZE);
1348 f2fs_put_page(mpage, 1);
1349 invalidate_mapping_pages(META_MAPPING(fio.sbi),
1350 fio.old_blkaddr, fio.old_blkaddr);
6ce19aff 1351 f2fs_invalidate_compress_page(fio.sbi, fio.old_blkaddr);
543b8c46 1352
8d64d365 1353 set_page_dirty(fio.encrypted_page);
6282adbf
JK
1354 if (clear_page_dirty_for_io(fio.encrypted_page))
1355 dec_page_count(fio.sbi, F2FS_DIRTY_META);
1356
548aedac 1357 set_page_writeback(fio.encrypted_page);
17c50035 1358 ClearPageError(page);
4375a336 1359
04d328de 1360 fio.op = REQ_OP_WRITE;
70fd7614 1361 fio.op_flags = REQ_SYNC;
4356e48e 1362 fio.new_blkaddr = newaddr;
fe16efe6
CY
1363 f2fs_submit_page_write(&fio);
1364 if (fio.retry) {
48018b4c 1365 err = -EAGAIN;
a9d572c7
SY
1366 if (PageWriteback(fio.encrypted_page))
1367 end_page_writeback(fio.encrypted_page);
1368 goto put_page_out;
1369 }
4375a336 1370
34a23525 1371 f2fs_update_iostat(fio.sbi, NULL, FS_GC_DATA_IO, F2FS_BLKSIZE);
b0af6d49 1372
f28b3434 1373 f2fs_update_data_blkaddr(&dn, newaddr);
91942321 1374 set_inode_flag(inode, FI_APPEND_WRITE);
4375a336 1375 if (page->index == 0)
91942321 1376 set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN);
548aedac 1377put_page_out:
4375a336 1378 f2fs_put_page(fio.encrypted_page, 1);
4356e48e
CY
1379recover_block:
1380 if (err)
4d57b86d 1381 f2fs_do_replace_block(fio.sbi, &sum, newaddr, fio.old_blkaddr,
c5d02785 1382 true, true, true);
543b8c46
JK
1383up_out:
1384 if (lfs_mode)
e4544b63 1385 f2fs_up_write(&fio.sbi->io_order_lock);
4375a336
JK
1386put_out:
1387 f2fs_put_dnode(&dn);
1388out:
1389 f2fs_put_page(page, 1);
48018b4c 1390 return err;
4375a336
JK
1391}
1392
48018b4c 1393static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
20614711 1394 unsigned int segno, int off)
7bc09003 1395{
c879f90d 1396 struct page *page;
48018b4c 1397 int err = 0;
c879f90d 1398
4d57b86d 1399 page = f2fs_get_lock_data_page(inode, bidx, true);
c879f90d 1400 if (IS_ERR(page))
48018b4c 1401 return PTR_ERR(page);
63a0b7cb 1402
48018b4c
CY
1403 if (!check_valid_map(F2FS_I_SB(inode), segno, off)) {
1404 err = -ENOENT;
20614711 1405 goto out;
48018b4c 1406 }
20614711 1407
71419129
CY
1408 err = f2fs_gc_pinned_control(inode, gc_type, segno);
1409 if (err)
1ad71a27 1410 goto out;
5fe45743 1411
7bc09003 1412 if (gc_type == BG_GC) {
48018b4c
CY
1413 if (PageWriteback(page)) {
1414 err = -EAGAIN;
4ebefc44 1415 goto out;
48018b4c 1416 }
7bc09003 1417 set_page_dirty(page);
b763f3be 1418 set_page_private_gcing(page);
7bc09003 1419 } else {
c879f90d
JK
1420 struct f2fs_io_info fio = {
1421 .sbi = F2FS_I_SB(inode),
39d787be 1422 .ino = inode->i_ino,
c879f90d 1423 .type = DATA,
a912b54d 1424 .temp = COLD,
04d328de 1425 .op = REQ_OP_WRITE,
70fd7614 1426 .op_flags = REQ_SYNC,
e959c8f5 1427 .old_blkaddr = NULL_ADDR,
c879f90d 1428 .page = page,
4375a336 1429 .encrypted_page = NULL,
cc15620b 1430 .need_lock = LOCK_REQ,
b0af6d49 1431 .io_type = FS_GC_DATA_IO,
c879f90d 1432 };
72e1c797 1433 bool is_dirty = PageDirty(page);
72e1c797
CY
1434
1435retry:
bae0ee7a 1436 f2fs_wait_on_page_writeback(page, DATA, true, true);
8d64d365
CY
1437
1438 set_page_dirty(page);
933439c8 1439 if (clear_page_dirty_for_io(page)) {
a7ffdbe2 1440 inode_dec_dirty_pages(inode);
4d57b86d 1441 f2fs_remove_dirty_inode(inode);
933439c8 1442 }
72e1c797 1443
b763f3be 1444 set_page_private_gcing(page);
72e1c797 1445
4d57b86d 1446 err = f2fs_do_write_data_page(&fio);
14a28559 1447 if (err) {
b763f3be 1448 clear_page_private_gcing(page);
14a28559 1449 if (err == -ENOMEM) {
4034247a 1450 memalloc_retry_wait(GFP_NOFS);
14a28559
CY
1451 goto retry;
1452 }
1453 if (is_dirty)
1454 set_page_dirty(page);
72e1c797 1455 }
7bc09003
JK
1456 }
1457out:
1458 f2fs_put_page(page, 1);
48018b4c 1459 return err;
7bc09003
JK
1460}
1461
0a8165d7 1462/*
7bc09003
JK
1463 * This function tries to get parent node of victim data block, and identifies
1464 * data block validity. If the block is valid, copy that with cold status and
1465 * modify parent node.
1466 * If the parent node is not valid or the data block address is different,
1467 * the victim data block is ignored.
1468 */
48018b4c 1469static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
7dede886
CY
1470 struct gc_inode_list *gc_list, unsigned int segno, int gc_type,
1471 bool force_migrate)
7bc09003
JK
1472{
1473 struct super_block *sb = sbi->sb;
1474 struct f2fs_summary *entry;
1475 block_t start_addr;
43727527 1476 int off;
7bc09003 1477 int phase = 0;
48018b4c 1478 int submitted = 0;
de881df9 1479 unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
7bc09003
JK
1480
1481 start_addr = START_BLOCK(sbi, segno);
1482
1483next_step:
1484 entry = sum;
c718379b 1485
de881df9 1486 for (off = 0; off < usable_blks_in_seg; off++, entry++) {
7bc09003
JK
1487 struct page *data_page;
1488 struct inode *inode;
1489 struct node_info dni; /* dnode info for the data */
1490 unsigned int ofs_in_node, nofs;
1491 block_t start_bidx;
7ea984b0 1492 nid_t nid = le32_to_cpu(entry->nid);
7bc09003 1493
803e74be
JK
1494 /*
1495 * stop BG_GC if there is not enough free sections.
1496 * Or, stop GC if the segment becomes fully valid caused by
1497 * race condition along with SSR block allocation.
1498 */
1499 if ((gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) ||
7dede886 1500 (!force_migrate && get_valid_blocks(sbi, segno, true) ==
074b5ea2 1501 CAP_BLKS_PER_SEC(sbi)))
48018b4c 1502 return submitted;
7bc09003 1503
43727527 1504 if (check_valid_map(sbi, segno, off) == 0)
7bc09003
JK
1505 continue;
1506
1507 if (phase == 0) {
4d57b86d 1508 f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), 1,
7ea984b0
CY
1509 META_NAT, true);
1510 continue;
1511 }
1512
1513 if (phase == 1) {
4d57b86d 1514 f2fs_ra_node_page(sbi, nid);
7bc09003
JK
1515 continue;
1516 }
1517
1518 /* Get an inode by ino with checking validity */
c1079892 1519 if (!is_alive(sbi, entry, &dni, start_addr + off, &nofs))
7bc09003
JK
1520 continue;
1521
7ea984b0 1522 if (phase == 2) {
4d57b86d 1523 f2fs_ra_node_page(sbi, dni.ino);
7bc09003
JK
1524 continue;
1525 }
1526
7bc09003
JK
1527 ofs_in_node = le16_to_cpu(entry->ofs_in_node);
1528
7ea984b0 1529 if (phase == 3) {
71419129
CY
1530 int err;
1531
d4686d56 1532 inode = f2fs_iget(sb, dni.ino);
9056d648
CY
1533 if (IS_ERR(inode) || is_bad_inode(inode) ||
1534 special_file(inode->i_mode))
7bc09003
JK
1535 continue;
1536
71419129
CY
1537 err = f2fs_gc_pinned_control(inode, gc_type, segno);
1538 if (err == -EAGAIN) {
a22bb552
CY
1539 iput(inode);
1540 return submitted;
1541 }
1542
e4544b63 1543 if (!f2fs_down_write_trylock(
b2532c69 1544 &F2FS_I(inode)->i_gc_rwsem[WRITE])) {
bb06664a 1545 iput(inode);
6f8d4455 1546 sbi->skipped_gc_rwsem++;
bb06664a
CY
1547 continue;
1548 }
1549
6aa58d8a
CY
1550 start_bidx = f2fs_start_bidx_of_node(nofs, inode) +
1551 ofs_in_node;
1552
1553 if (f2fs_post_read_required(inode)) {
1554 int err = ra_data_block(inode, start_bidx);
1555
e4544b63 1556 f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
6aa58d8a
CY
1557 if (err) {
1558 iput(inode);
1559 continue;
1560 }
1561 add_gc_inode(gc_list, inode);
1562 continue;
1563 }
1564
4d57b86d 1565 data_page = f2fs_get_read_data_page(inode,
6aa58d8a 1566 start_bidx, REQ_RAHEAD, true);
e4544b63 1567 f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
31a32688
CL
1568 if (IS_ERR(data_page)) {
1569 iput(inode);
1570 continue;
1571 }
7bc09003
JK
1572
1573 f2fs_put_page(data_page, 0);
7dda2af8 1574 add_gc_inode(gc_list, inode);
31a32688
CL
1575 continue;
1576 }
1577
7ea984b0 1578 /* phase 4 */
7dda2af8 1579 inode = find_gc_inode(gc_list, dni.ino);
31a32688 1580 if (inode) {
82e0a5aa
CY
1581 struct f2fs_inode_info *fi = F2FS_I(inode);
1582 bool locked = false;
48018b4c 1583 int err;
82e0a5aa
CY
1584
1585 if (S_ISREG(inode->i_mode)) {
e4544b63 1586 if (!f2fs_down_write_trylock(&fi->i_gc_rwsem[READ])) {
ad126ebd 1587 sbi->skipped_gc_rwsem++;
82e0a5aa 1588 continue;
ad126ebd 1589 }
e4544b63 1590 if (!f2fs_down_write_trylock(
b2532c69 1591 &fi->i_gc_rwsem[WRITE])) {
6f8d4455 1592 sbi->skipped_gc_rwsem++;
e4544b63 1593 f2fs_up_write(&fi->i_gc_rwsem[READ]);
82e0a5aa
CY
1594 continue;
1595 }
1596 locked = true;
73ac2f4e
CY
1597
1598 /* wait for all inflight aio data */
1599 inode_dio_wait(inode);
82e0a5aa
CY
1600 }
1601
4d57b86d 1602 start_bidx = f2fs_start_bidx_of_node(nofs, inode)
c879f90d 1603 + ofs_in_node;
6dbb1796 1604 if (f2fs_post_read_required(inode))
48018b4c
CY
1605 err = move_data_block(inode, start_bidx,
1606 gc_type, segno, off);
4375a336 1607 else
48018b4c 1608 err = move_data_page(inode, start_bidx, gc_type,
d4c759ee 1609 segno, off);
82e0a5aa 1610
48018b4c
CY
1611 if (!err && (gc_type == FG_GC ||
1612 f2fs_post_read_required(inode)))
1613 submitted++;
1614
82e0a5aa 1615 if (locked) {
e4544b63
TM
1616 f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
1617 f2fs_up_write(&fi->i_gc_rwsem[READ]);
82e0a5aa
CY
1618 }
1619
e1235983 1620 stat_inc_data_blk_count(sbi, 1, gc_type);
7bc09003 1621 }
7bc09003 1622 }
c718379b 1623
7ea984b0 1624 if (++phase < 5)
7bc09003 1625 goto next_step;
48018b4c
CY
1626
1627 return submitted;
7bc09003
JK
1628}
1629
1630static int __get_victim(struct f2fs_sb_info *sbi, unsigned int *victim,
8a2d0ace 1631 int gc_type)
7bc09003
JK
1632{
1633 struct sit_info *sit_i = SIT_I(sbi);
1634 int ret;
8a2d0ace 1635
3d26fa6b 1636 down_write(&sit_i->sentry_lock);
8a2d0ace 1637 ret = DIRTY_I(sbi)->v_ops->get_victim(sbi, victim, gc_type,
093749e2 1638 NO_CHECK_TYPE, LFS, 0);
3d26fa6b 1639 up_write(&sit_i->sentry_lock);
7bc09003
JK
1640 return ret;
1641}
1642
718e53fa
CY
1643static int do_garbage_collect(struct f2fs_sb_info *sbi,
1644 unsigned int start_segno,
7dede886
CY
1645 struct gc_inode_list *gc_list, int gc_type,
1646 bool force_migrate)
7bc09003
JK
1647{
1648 struct page *sum_page;
1649 struct f2fs_summary_block *sum;
c718379b 1650 struct blk_plug plug;
718e53fa
CY
1651 unsigned int segno = start_segno;
1652 unsigned int end_segno = start_segno + sbi->segs_per_sec;
e3080b01 1653 int seg_freed = 0, migrated = 0;
718e53fa
CY
1654 unsigned char type = IS_DATASEG(get_seg_entry(sbi, segno)->type) ?
1655 SUM_TYPE_DATA : SUM_TYPE_NODE;
48018b4c 1656 int submitted = 0;
7bc09003 1657
e3080b01
CY
1658 if (__is_large_section(sbi))
1659 end_segno = rounddown(end_segno, sbi->segs_per_sec);
1660
de881df9
AR
1661 /*
1662 * zone-capacity can be less than zone-size in zoned devices,
1663 * resulting in less than expected usable segments in the zone,
1664 * calculate the end segno in the zone which can be garbage collected
1665 */
1666 if (f2fs_sb_has_blkzoned(sbi))
1667 end_segno -= sbi->segs_per_sec -
1668 f2fs_usable_segs_in_sec(sbi, segno);
1669
093749e2
CY
1670 sanity_check_seg_type(sbi, get_seg_entry(sbi, segno)->type);
1671
718e53fa 1672 /* readahead multi ssa blocks those have contiguous address */
2c70c5e3 1673 if (__is_large_section(sbi))
4d57b86d 1674 f2fs_ra_meta_pages(sbi, GET_SUM_BLOCK(sbi, segno),
e3080b01 1675 end_segno - segno, META_SSA, true);
718e53fa
CY
1676
1677 /* reference all summary page */
1678 while (segno < end_segno) {
4d57b86d 1679 sum_page = f2fs_get_sum_page(sbi, segno++);
edc55aaf
JK
1680 if (IS_ERR(sum_page)) {
1681 int err = PTR_ERR(sum_page);
1682
1683 end_segno = segno - 1;
1684 for (segno = start_segno; segno < end_segno; segno++) {
1685 sum_page = find_get_page(META_MAPPING(sbi),
1686 GET_SUM_BLOCK(sbi, segno));
1687 f2fs_put_page(sum_page, 0);
1688 f2fs_put_page(sum_page, 0);
1689 }
1690 return err;
1691 }
718e53fa
CY
1692 unlock_page(sum_page);
1693 }
7bc09003 1694
c718379b
JK
1695 blk_start_plug(&plug);
1696
718e53fa 1697 for (segno = start_segno; segno < end_segno; segno++) {
aa987273 1698
718e53fa
CY
1699 /* find segment summary of victim */
1700 sum_page = find_get_page(META_MAPPING(sbi),
1701 GET_SUM_BLOCK(sbi, segno));
718e53fa 1702 f2fs_put_page(sum_page, 0);
7bc09003 1703
d6c66cd1
YS
1704 if (get_valid_blocks(sbi, segno, false) == 0)
1705 goto freed;
dabfbbc8 1706 if (gc_type == BG_GC && __is_large_section(sbi) &&
e3080b01
CY
1707 migrated >= sbi->migration_granularity)
1708 goto skip;
d6c66cd1 1709 if (!PageUptodate(sum_page) || unlikely(f2fs_cp_error(sbi)))
e3080b01 1710 goto skip;
de0dcc40 1711
718e53fa 1712 sum = page_address(sum_page);
10d255c3 1713 if (type != GET_SUM_TYPE((&sum->footer))) {
dcbb4c10
JP
1714 f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
1715 segno, type, GET_SUM_TYPE((&sum->footer)));
10d255c3 1716 set_sbi_flag(sbi, SBI_NEED_FSCK);
a9cfee0e
CY
1717 f2fs_stop_checkpoint(sbi, false,
1718 STOP_CP_REASON_CORRUPTED_SUMMARY);
e3080b01 1719 goto skip;
10d255c3 1720 }
718e53fa
CY
1721
1722 /*
1723 * this is to avoid deadlock:
1724 * - lock_page(sum_page) - f2fs_replace_block
3d26fa6b
CY
1725 * - check_valid_map() - down_write(sentry_lock)
1726 * - down_read(sentry_lock) - change_curseg()
718e53fa
CY
1727 * - lock_page(sum_page)
1728 */
718e53fa 1729 if (type == SUM_TYPE_NODE)
48018b4c 1730 submitted += gc_node_segment(sbi, sum->entries, segno,
718e53fa 1731 gc_type);
48018b4c
CY
1732 else
1733 submitted += gc_data_segment(sbi, sum->entries, gc_list,
7dede886
CY
1734 segno, gc_type,
1735 force_migrate);
718e53fa
CY
1736
1737 stat_inc_seg_count(sbi, type, gc_type);
07c6b593 1738 sbi->gc_reclaimed_segs[sbi->gc_mode]++;
8c7b9ac1 1739 migrated++;
c56f16da 1740
d6c66cd1 1741freed:
c56f16da
CY
1742 if (gc_type == FG_GC &&
1743 get_valid_blocks(sbi, segno, false) == 0)
1744 seg_freed++;
e3080b01
CY
1745
1746 if (__is_large_section(sbi) && segno + 1 < end_segno)
1747 sbi->next_victim_seg[gc_type] = segno + 1;
1748skip:
718e53fa
CY
1749 f2fs_put_page(sum_page, 0);
1750 }
1751
48018b4c 1752 if (submitted)
b9109b0e
JK
1753 f2fs_submit_merged_write(sbi,
1754 (type == SUM_TYPE_NODE) ? NODE : DATA);
c718379b 1755
718e53fa 1756 blk_finish_plug(&plug);
7bc09003 1757
17d899df
CY
1758 stat_inc_call_count(sbi->stat_info);
1759
c56f16da 1760 return seg_freed;
7bc09003
JK
1761}
1762
d147ea4a 1763int f2fs_gc(struct f2fs_sb_info *sbi, struct f2fs_gc_control *gc_control)
7bc09003 1764{
d147ea4a
JK
1765 int gc_type = gc_control->init_gc_type;
1766 unsigned int segno = gc_control->victim_segno;
c56f16da
CY
1767 int sec_freed = 0, seg_freed = 0, total_freed = 0;
1768 int ret = 0;
d5053a34 1769 struct cp_control cpc;
7dda2af8
CL
1770 struct gc_inode_list gc_list = {
1771 .ilist = LIST_HEAD_INIT(gc_list.ilist),
f6bb2a2c 1772 .iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS),
7dda2af8 1773 };
2ef79ecb 1774 unsigned int skipped_round = 0, round = 0;
d5053a34 1775
d147ea4a 1776 trace_f2fs_gc_begin(sbi->sb, gc_type, gc_control->no_bg_gc,
c81d5bae 1777 gc_control->nr_free_secs,
c56f16da
CY
1778 get_pages(sbi, F2FS_DIRTY_NODES),
1779 get_pages(sbi, F2FS_DIRTY_DENTS),
1780 get_pages(sbi, F2FS_DIRTY_IMETA),
1781 free_sections(sbi),
1782 free_segments(sbi),
1783 reserved_segments(sbi),
1784 prefree_segments(sbi));
1785
119ee914 1786 cpc.reason = __get_cp_reason(sbi);
6f8d4455 1787 sbi->skipped_gc_rwsem = 0;
7bc09003 1788gc_more:
1751e8a6 1789 if (unlikely(!(sbi->sb->s_flags & SB_ACTIVE))) {
e5dbd956 1790 ret = -EINVAL;
408e9375 1791 goto stop;
e5dbd956 1792 }
6d5a1495
CY
1793 if (unlikely(f2fs_cp_error(sbi))) {
1794 ret = -EIO;
203681f6 1795 goto stop;
6d5a1495 1796 }
7bc09003 1797
19f4e688 1798 if (gc_type == BG_GC && has_not_enough_free_secs(sbi, 0, 0)) {
6e17bfbc 1799 /*
19f4e688
HP
1800 * For example, if there are many prefree_segments below given
1801 * threshold, we can make them free by checkpoint. Then, we
1802 * secure free segments which doesn't need fggc any more.
6e17bfbc 1803 */
d147ea4a 1804 if (prefree_segments(sbi)) {
4d57b86d 1805 ret = f2fs_write_checkpoint(sbi, &cpc);
8fd5a37e
JK
1806 if (ret)
1807 goto stop;
1808 }
19f4e688
HP
1809 if (has_not_enough_free_secs(sbi, 0, 0))
1810 gc_type = FG_GC;
d64f8047 1811 }
7bc09003 1812
19f4e688 1813 /* f2fs_balance_fs doesn't need to do BG_GC in critical path. */
d147ea4a 1814 if (gc_type == BG_GC && gc_control->no_bg_gc) {
c56f16da 1815 ret = -EINVAL;
19f4e688 1816 goto stop;
c56f16da 1817 }
71419129 1818retry:
97767500 1819 ret = __get_victim(sbi, &segno, gc_type);
71419129
CY
1820 if (ret) {
1821 /* allow to search victim from sections has pinned data */
1822 if (ret == -ENODATA && gc_type == FG_GC &&
1823 f2fs_pinned_section_exists(DIRTY_I(sbi))) {
1824 f2fs_unpin_all_sections(sbi, false);
1825 goto retry;
1826 }
408e9375 1827 goto stop;
71419129 1828 }
7bc09003 1829
d147ea4a
JK
1830 seg_freed = do_garbage_collect(sbi, segno, &gc_list, gc_type,
1831 gc_control->should_migrate_blocks);
c56f16da 1832 total_freed += seg_freed;
43727527 1833
d147ea4a
JK
1834 if (seg_freed == f2fs_usable_segs_in_sec(sbi, segno))
1835 sec_freed++;
2ef79ecb 1836
10d0786b 1837 if (gc_type == FG_GC)
5ec4e49f 1838 sbi->cur_victim_sec = NULL_SEGNO;
43727527 1839
c81d5bae
JK
1840 if (gc_control->init_gc_type == FG_GC ||
1841 !has_not_enough_free_secs(sbi,
1842 (gc_type == FG_GC) ? sec_freed : 0, 0)) {
1843 if (gc_type == FG_GC && sec_freed < gc_control->nr_free_secs)
1844 goto go_gc_more;
a9163b94 1845 goto stop;
c81d5bae 1846 }
43727527 1847
d147ea4a
JK
1848 /* FG_GC stops GC by skip_count */
1849 if (gc_type == FG_GC) {
1850 if (sbi->skipped_gc_rwsem)
1851 skipped_round++;
1852 round++;
1853 if (skipped_round > MAX_SKIP_GC_COUNT &&
1854 skipped_round * 2 >= round) {
4d57b86d 1855 ret = f2fs_write_checkpoint(sbi, &cpc);
d147ea4a 1856 goto stop;
a9163b94 1857 }
a9163b94 1858 }
d147ea4a
JK
1859
1860 /* Write checkpoint to reclaim prefree segments */
1861 if (free_sections(sbi) < NR_CURSEG_PERSIST_TYPE &&
1862 prefree_segments(sbi)) {
a9163b94 1863 ret = f2fs_write_checkpoint(sbi, &cpc);
d147ea4a
JK
1864 if (ret)
1865 goto stop;
1866 }
c81d5bae 1867go_gc_more:
d147ea4a
JK
1868 segno = NULL_SEGNO;
1869 goto gc_more;
1870
408e9375 1871stop:
e066b83c 1872 SIT_I(sbi)->last_victim[ALLOC_NEXT] = 0;
d147ea4a 1873 SIT_I(sbi)->last_victim[FLUSH_DEVICE] = gc_control->victim_segno;
c56f16da 1874
71419129
CY
1875 if (gc_type == FG_GC)
1876 f2fs_unpin_all_sections(sbi, true);
1877
c56f16da
CY
1878 trace_f2fs_gc_end(sbi->sb, ret, total_freed, sec_freed,
1879 get_pages(sbi, F2FS_DIRTY_NODES),
1880 get_pages(sbi, F2FS_DIRTY_DENTS),
1881 get_pages(sbi, F2FS_DIRTY_IMETA),
1882 free_sections(sbi),
1883 free_segments(sbi),
1884 reserved_segments(sbi),
1885 prefree_segments(sbi));
1886
e4544b63 1887 f2fs_up_write(&sbi->gc_lock);
7bc09003 1888
7dda2af8 1889 put_gc_inode(&gc_list);
d530d4d8 1890
d147ea4a 1891 if (gc_control->err_gc_skipped && !ret)
d530d4d8 1892 ret = sec_freed ? 0 : -EAGAIN;
43727527 1893 return ret;
7bc09003
JK
1894}
1895
093749e2
CY
1896int __init f2fs_create_garbage_collection_cache(void)
1897{
1898 victim_entry_slab = f2fs_kmem_cache_create("f2fs_victim_entry",
1899 sizeof(struct victim_entry));
1900 if (!victim_entry_slab)
1901 return -ENOMEM;
1902 return 0;
1903}
1904
1905void f2fs_destroy_garbage_collection_cache(void)
1906{
1907 kmem_cache_destroy(victim_entry_slab);
1908}
1909
1910static void init_atgc_management(struct f2fs_sb_info *sbi)
1911{
1912 struct atgc_management *am = &sbi->am;
1913
1914 if (test_opt(sbi, ATGC) &&
1915 SIT_I(sbi)->elapsed_time >= DEF_GC_THREAD_AGE_THRESHOLD)
1916 am->atgc_enabled = true;
1917
1918 am->root = RB_ROOT_CACHED;
1919 INIT_LIST_HEAD(&am->victim_list);
1920 am->victim_count = 0;
1921
1922 am->candidate_ratio = DEF_GC_THREAD_CANDIDATE_RATIO;
1923 am->max_candidate_count = DEF_GC_THREAD_MAX_CANDIDATE_COUNT;
1924 am->age_weight = DEF_GC_THREAD_AGE_WEIGHT;
89e53ff1 1925 am->age_threshold = DEF_GC_THREAD_AGE_THRESHOLD;
093749e2
CY
1926}
1927
4d57b86d 1928void f2fs_build_gc_manager(struct f2fs_sb_info *sbi)
7bc09003
JK
1929{
1930 DIRTY_I(sbi)->v_ops = &default_v_ops;
e93b9865 1931
1ad71a27 1932 sbi->gc_pin_file_threshold = DEF_GC_FAILED_PINNED_FILES;
d5793249
JK
1933
1934 /* give warm/cold data area from slower device */
0916878d 1935 if (f2fs_is_multi_device(sbi) && !__is_large_section(sbi))
d5793249
JK
1936 SIT_I(sbi)->last_victim[ALLOC_NEXT] =
1937 GET_SEGNO(sbi, FDEV(0).end_blk) + 1;
093749e2
CY
1938
1939 init_atgc_management(sbi);
7bc09003 1940}
04f0b2ea 1941
b4b10061
JK
1942static int free_segment_range(struct f2fs_sb_info *sbi,
1943 unsigned int secs, bool gc_only)
04f0b2ea 1944{
b4b10061
JK
1945 unsigned int segno, next_inuse, start, end;
1946 struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
1947 int gc_mode, gc_type;
04f0b2ea 1948 int err = 0;
b4b10061
JK
1949 int type;
1950
1951 /* Force block allocation for GC */
1952 MAIN_SECS(sbi) -= secs;
1953 start = MAIN_SECS(sbi) * sbi->segs_per_sec;
1954 end = MAIN_SEGS(sbi) - 1;
1955
1956 mutex_lock(&DIRTY_I(sbi)->seglist_lock);
1957 for (gc_mode = 0; gc_mode < MAX_GC_POLICY; gc_mode++)
1958 if (SIT_I(sbi)->last_victim[gc_mode] >= start)
1959 SIT_I(sbi)->last_victim[gc_mode] = 0;
1960
1961 for (gc_type = BG_GC; gc_type <= FG_GC; gc_type++)
1962 if (sbi->next_victim_seg[gc_type] >= start)
1963 sbi->next_victim_seg[gc_type] = NULL_SEGNO;
1964 mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
04f0b2ea
QS
1965
1966 /* Move out cursegs from the target range */
d0b9e42a 1967 for (type = CURSEG_HOT_DATA; type < NR_CURSEG_PERSIST_TYPE; type++)
0ef81833 1968 f2fs_allocate_segment_for_resize(sbi, type, start, end);
04f0b2ea
QS
1969
1970 /* do GC to move out valid blocks in the range */
1971 for (segno = start; segno <= end; segno += sbi->segs_per_sec) {
1972 struct gc_inode_list gc_list = {
1973 .ilist = LIST_HEAD_INIT(gc_list.ilist),
1974 .iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS),
1975 };
1976
7dede886 1977 do_garbage_collect(sbi, segno, &gc_list, FG_GC, true);
04f0b2ea
QS
1978 put_gc_inode(&gc_list);
1979
b4b10061
JK
1980 if (!gc_only && get_valid_blocks(sbi, segno, true)) {
1981 err = -EAGAIN;
1982 goto out;
1983 }
1984 if (fatal_signal_pending(current)) {
1985 err = -ERESTARTSYS;
1986 goto out;
1987 }
04f0b2ea 1988 }
b4b10061
JK
1989 if (gc_only)
1990 goto out;
04f0b2ea 1991
b4b10061 1992 err = f2fs_write_checkpoint(sbi, &cpc);
04f0b2ea 1993 if (err)
b4b10061 1994 goto out;
04f0b2ea
QS
1995
1996 next_inuse = find_next_inuse(FREE_I(sbi), end + 1, start);
1997 if (next_inuse <= end) {
dcbb4c10
JP
1998 f2fs_err(sbi, "segno %u should be free but still inuse!",
1999 next_inuse);
04f0b2ea
QS
2000 f2fs_bug_on(sbi, 1);
2001 }
b4b10061
JK
2002out:
2003 MAIN_SECS(sbi) += secs;
04f0b2ea
QS
2004 return err;
2005}
2006
2007static void update_sb_metadata(struct f2fs_sb_info *sbi, int secs)
2008{
2009 struct f2fs_super_block *raw_sb = F2FS_RAW_SUPER(sbi);
a4ba5dfc
CY
2010 int section_count;
2011 int segment_count;
2012 int segment_count_main;
2013 long long block_count;
04f0b2ea
QS
2014 int segs = secs * sbi->segs_per_sec;
2015
e4544b63 2016 f2fs_down_write(&sbi->sb_lock);
a4ba5dfc
CY
2017
2018 section_count = le32_to_cpu(raw_sb->section_count);
2019 segment_count = le32_to_cpu(raw_sb->segment_count);
2020 segment_count_main = le32_to_cpu(raw_sb->segment_count_main);
2021 block_count = le64_to_cpu(raw_sb->block_count);
2022
04f0b2ea
QS
2023 raw_sb->section_count = cpu_to_le32(section_count + secs);
2024 raw_sb->segment_count = cpu_to_le32(segment_count + segs);
2025 raw_sb->segment_count_main = cpu_to_le32(segment_count_main + segs);
2026 raw_sb->block_count = cpu_to_le64(block_count +
2027 (long long)segs * sbi->blocks_per_seg);
46d9ce19
QS
2028 if (f2fs_is_multi_device(sbi)) {
2029 int last_dev = sbi->s_ndevs - 1;
2030 int dev_segs =
2031 le32_to_cpu(raw_sb->devs[last_dev].total_segments);
2032
2033 raw_sb->devs[last_dev].total_segments =
2034 cpu_to_le32(dev_segs + segs);
2035 }
a4ba5dfc 2036
e4544b63 2037 f2fs_up_write(&sbi->sb_lock);
04f0b2ea
QS
2038}
2039
2040static void update_fs_metadata(struct f2fs_sb_info *sbi, int secs)
2041{
2042 int segs = secs * sbi->segs_per_sec;
46d9ce19 2043 long long blks = (long long)segs * sbi->blocks_per_seg;
04f0b2ea
QS
2044 long long user_block_count =
2045 le64_to_cpu(F2FS_CKPT(sbi)->user_block_count);
2046
2047 SM_I(sbi)->segment_count = (int)SM_I(sbi)->segment_count + segs;
2048 MAIN_SEGS(sbi) = (int)MAIN_SEGS(sbi) + segs;
b4b10061 2049 MAIN_SECS(sbi) += secs;
04f0b2ea
QS
2050 FREE_I(sbi)->free_sections = (int)FREE_I(sbi)->free_sections + secs;
2051 FREE_I(sbi)->free_segments = (int)FREE_I(sbi)->free_segments + segs;
46d9ce19
QS
2052 F2FS_CKPT(sbi)->user_block_count = cpu_to_le64(user_block_count + blks);
2053
2054 if (f2fs_is_multi_device(sbi)) {
2055 int last_dev = sbi->s_ndevs - 1;
2056
2057 FDEV(last_dev).total_segments =
2058 (int)FDEV(last_dev).total_segments + segs;
2059 FDEV(last_dev).end_blk =
2060 (long long)FDEV(last_dev).end_blk + blks;
2061#ifdef CONFIG_BLK_DEV_ZONED
2062 FDEV(last_dev).nr_blkz = (int)FDEV(last_dev).nr_blkz +
2063 (int)(blks >> sbi->log_blocks_per_blkz);
2064#endif
2065 }
04f0b2ea
QS
2066}
2067
2068int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
2069{
2070 __u64 old_block_count, shrunk_blocks;
b4b10061 2071 struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
04f0b2ea 2072 unsigned int secs;
04f0b2ea
QS
2073 int err = 0;
2074 __u32 rem;
2075
2076 old_block_count = le64_to_cpu(F2FS_RAW_SUPER(sbi)->block_count);
2077 if (block_count > old_block_count)
2078 return -EINVAL;
2079
46d9ce19
QS
2080 if (f2fs_is_multi_device(sbi)) {
2081 int last_dev = sbi->s_ndevs - 1;
2082 __u64 last_segs = FDEV(last_dev).total_segments;
2083
2084 if (block_count + last_segs * sbi->blocks_per_seg <=
2085 old_block_count)
2086 return -EINVAL;
2087 }
2088
04f0b2ea
QS
2089 /* new fs size should align to section size */
2090 div_u64_rem(block_count, BLKS_PER_SEC(sbi), &rem);
2091 if (rem)
2092 return -EINVAL;
2093
2094 if (block_count == old_block_count)
2095 return 0;
2096
2097 if (is_sbi_flag_set(sbi, SBI_NEED_FSCK)) {
dcbb4c10 2098 f2fs_err(sbi, "Should run fsck to repair first.");
10f966bb 2099 return -EFSCORRUPTED;
04f0b2ea
QS
2100 }
2101
2102 if (test_opt(sbi, DISABLE_CHECKPOINT)) {
dcbb4c10 2103 f2fs_err(sbi, "Checkpoint should be enabled.");
04f0b2ea
QS
2104 return -EINVAL;
2105 }
2106
04f0b2ea
QS
2107 shrunk_blocks = old_block_count - block_count;
2108 secs = div_u64(shrunk_blocks, BLKS_PER_SEC(sbi));
b4b10061
JK
2109
2110 /* stop other GC */
e4544b63 2111 if (!f2fs_down_write_trylock(&sbi->gc_lock))
b4b10061
JK
2112 return -EAGAIN;
2113
2114 /* stop CP to protect MAIN_SEC in free_segment_range */
2115 f2fs_lock_op(sbi);
3ab0598e
CY
2116
2117 spin_lock(&sbi->stat_lock);
2118 if (shrunk_blocks + valid_user_blocks(sbi) +
2119 sbi->current_reserved_blocks + sbi->unusable_block_count +
2120 F2FS_OPTION(sbi).root_reserved_blocks > sbi->user_block_count)
2121 err = -ENOSPC;
2122 spin_unlock(&sbi->stat_lock);
2123
2124 if (err)
2125 goto out_unlock;
2126
b4b10061 2127 err = free_segment_range(sbi, secs, true);
3ab0598e
CY
2128
2129out_unlock:
b4b10061 2130 f2fs_unlock_op(sbi);
e4544b63 2131 f2fs_up_write(&sbi->gc_lock);
b4b10061
JK
2132 if (err)
2133 return err;
2134
b4b10061 2135 freeze_super(sbi->sb);
e4544b63
TM
2136 f2fs_down_write(&sbi->gc_lock);
2137 f2fs_down_write(&sbi->cp_global_sem);
b4b10061 2138
04f0b2ea
QS
2139 spin_lock(&sbi->stat_lock);
2140 if (shrunk_blocks + valid_user_blocks(sbi) +
2141 sbi->current_reserved_blocks + sbi->unusable_block_count +
2142 F2FS_OPTION(sbi).root_reserved_blocks > sbi->user_block_count)
2143 err = -ENOSPC;
2144 else
2145 sbi->user_block_count -= shrunk_blocks;
2146 spin_unlock(&sbi->stat_lock);
b4b10061
JK
2147 if (err)
2148 goto out_err;
04f0b2ea 2149
28fc4e90 2150 set_sbi_flag(sbi, SBI_IS_RESIZEFS);
b4b10061 2151 err = free_segment_range(sbi, secs, false);
04f0b2ea 2152 if (err)
b4b10061 2153 goto recover_out;
04f0b2ea
QS
2154
2155 update_sb_metadata(sbi, -secs);
2156
2157 err = f2fs_commit_super(sbi, false);
2158 if (err) {
2159 update_sb_metadata(sbi, secs);
b4b10061 2160 goto recover_out;
04f0b2ea
QS
2161 }
2162
2163 update_fs_metadata(sbi, -secs);
2164 clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
68275682 2165 set_sbi_flag(sbi, SBI_IS_DIRTY);
68275682 2166
b4b10061 2167 err = f2fs_write_checkpoint(sbi, &cpc);
04f0b2ea
QS
2168 if (err) {
2169 update_fs_metadata(sbi, secs);
2170 update_sb_metadata(sbi, secs);
2171 f2fs_commit_super(sbi, false);
2172 }
b4b10061 2173recover_out:
28fc4e90 2174 clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
04f0b2ea
QS
2175 if (err) {
2176 set_sbi_flag(sbi, SBI_NEED_FSCK);
dcbb4c10 2177 f2fs_err(sbi, "resize_fs failed, should run fsck to repair!");
04f0b2ea 2178
04f0b2ea
QS
2179 spin_lock(&sbi->stat_lock);
2180 sbi->user_block_count += shrunk_blocks;
2181 spin_unlock(&sbi->stat_lock);
2182 }
b4b10061 2183out_err:
e4544b63
TM
2184 f2fs_up_write(&sbi->cp_global_sem);
2185 f2fs_up_write(&sbi->gc_lock);
b4b10061 2186 thaw_super(sbi->sb);
04f0b2ea
QS
2187 return err;
2188}