blob: 3eee62022b9b98324ab9cac747cc3ef915bea855 [file] [log] [blame]
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001/*
2 * fs/f2fs/checkpoint.c
3 *
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com/
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11#include <linux/fs.h>
12#include <linux/bio.h>
13#include <linux/mpage.h>
14#include <linux/writeback.h>
15#include <linux/blkdev.h>
16#include <linux/f2fs_fs.h>
17#include <linux/pagevec.h>
18#include <linux/swap.h>
19
20#include "f2fs.h"
21#include "node.h"
22#include "segment.h"
23#include "trace.h"
24#include <trace/events/f2fs.h>
25
26static struct kmem_cache *ino_entry_slab;
27struct kmem_cache *inode_entry_slab;
28
Jaegeuk Kim107bbe62016-05-18 14:07:56 -070029void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io)
30{
31 set_ckpt_flags(sbi->ckpt, CP_ERROR_FLAG);
32 sbi->sb->s_flags |= MS_RDONLY;
33 if (!end_io)
34 f2fs_flush_merged_bios(sbi);
35}
36
Jaegeuk Kim315f4552015-11-29 09:25:08 -080037/*
38 * We guarantee no failure on the returned page.
39 */
40struct page *grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
41{
42 struct address_space *mapping = META_MAPPING(sbi);
43 struct page *page = NULL;
44repeat:
Jaegeuk Kim5b305dc2016-04-29 16:11:53 -070045 page = f2fs_grab_cache_page(mapping, index, false);
Jaegeuk Kim315f4552015-11-29 09:25:08 -080046 if (!page) {
47 cond_resched();
48 goto repeat;
49 }
Jaegeuk Kim3e0b2f42016-01-20 23:43:51 +080050 f2fs_wait_on_page_writeback(page, META, true);
Jaegeuk Kimb1cf93a2016-06-30 18:49:15 -070051 if (!PageUptodate(page))
52 SetPageUptodate(page);
Jaegeuk Kim315f4552015-11-29 09:25:08 -080053 return page;
54}
55
56/*
57 * We guarantee no failure on the returned page.
58 */
59static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
60 bool is_meta)
61{
62 struct address_space *mapping = META_MAPPING(sbi);
63 struct page *page;
64 struct f2fs_io_info fio = {
65 .sbi = sbi,
66 .type = META,
67 .rw = READ_SYNC | REQ_META | REQ_PRIO,
Chao Yua83a52c2016-02-22 18:36:38 +080068 .old_blkaddr = index,
69 .new_blkaddr = index,
Jaegeuk Kim315f4552015-11-29 09:25:08 -080070 .encrypted_page = NULL,
71 };
72
73 if (unlikely(!is_meta))
74 fio.rw &= ~REQ_META;
75repeat:
Jaegeuk Kim5b305dc2016-04-29 16:11:53 -070076 page = f2fs_grab_cache_page(mapping, index, false);
Jaegeuk Kim315f4552015-11-29 09:25:08 -080077 if (!page) {
78 cond_resched();
79 goto repeat;
80 }
81 if (PageUptodate(page))
82 goto out;
83
84 fio.page = page;
85
86 if (f2fs_submit_page_bio(&fio)) {
87 f2fs_put_page(page, 1);
88 goto repeat;
89 }
90
91 lock_page(page);
92 if (unlikely(page->mapping != mapping)) {
93 f2fs_put_page(page, 1);
94 goto repeat;
95 }
96
97 /*
98 * if there is any IO error when accessing device, make our filesystem
99 * readonly and make sure do not write checkpoint with non-uptodate
100 * meta page.
101 */
102 if (unlikely(!PageUptodate(page)))
Jaegeuk Kim107bbe62016-05-18 14:07:56 -0700103 f2fs_stop_checkpoint(sbi, false);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800104out:
105 mark_page_accessed(page);
106 return page;
107}
108
109struct page *get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
110{
111 return __get_meta_page(sbi, index, true);
112}
113
114/* for POR only */
115struct page *get_tmp_page(struct f2fs_sb_info *sbi, pgoff_t index)
116{
117 return __get_meta_page(sbi, index, false);
118}
119
120bool is_valid_blkaddr(struct f2fs_sb_info *sbi, block_t blkaddr, int type)
121{
122 switch (type) {
123 case META_NAT:
124 break;
125 case META_SIT:
126 if (unlikely(blkaddr >= SIT_BLK_CNT(sbi)))
127 return false;
128 break;
129 case META_SSA:
130 if (unlikely(blkaddr >= MAIN_BLKADDR(sbi) ||
131 blkaddr < SM_I(sbi)->ssa_blkaddr))
132 return false;
133 break;
134 case META_CP:
135 if (unlikely(blkaddr >= SIT_I(sbi)->sit_base_addr ||
136 blkaddr < __start_cp_addr(sbi)))
137 return false;
138 break;
139 case META_POR:
140 if (unlikely(blkaddr >= MAX_BLKADDR(sbi) ||
141 blkaddr < MAIN_BLKADDR(sbi)))
142 return false;
143 break;
144 default:
145 BUG();
146 }
147
148 return true;
149}
150
151/*
152 * Readahead CP/NAT/SIT/SSA pages
153 */
154int ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
155 int type, bool sync)
156{
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800157 struct page *page;
158 block_t blkno = start;
159 struct f2fs_io_info fio = {
160 .sbi = sbi,
161 .type = META,
162 .rw = sync ? (READ_SYNC | REQ_META | REQ_PRIO) : READA,
163 .encrypted_page = NULL,
164 };
Chao Yu8be7c502016-02-14 18:54:33 +0800165 struct blk_plug plug;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800166
167 if (unlikely(type == META_POR))
168 fio.rw &= ~REQ_META;
169
Chao Yu8be7c502016-02-14 18:54:33 +0800170 blk_start_plug(&plug);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800171 for (; nrpages-- > 0; blkno++) {
172
173 if (!is_valid_blkaddr(sbi, blkno, type))
174 goto out;
175
176 switch (type) {
177 case META_NAT:
178 if (unlikely(blkno >=
179 NAT_BLOCK_OFFSET(NM_I(sbi)->max_nid)))
180 blkno = 0;
181 /* get nat block addr */
Chao Yua83a52c2016-02-22 18:36:38 +0800182 fio.new_blkaddr = current_nat_addr(sbi,
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800183 blkno * NAT_ENTRY_PER_BLOCK);
184 break;
185 case META_SIT:
186 /* get sit block addr */
Chao Yua83a52c2016-02-22 18:36:38 +0800187 fio.new_blkaddr = current_sit_addr(sbi,
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800188 blkno * SIT_ENTRY_PER_BLOCK);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800189 break;
190 case META_SSA:
191 case META_CP:
192 case META_POR:
Chao Yua83a52c2016-02-22 18:36:38 +0800193 fio.new_blkaddr = blkno;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800194 break;
195 default:
196 BUG();
197 }
198
Jaegeuk Kim5b305dc2016-04-29 16:11:53 -0700199 page = f2fs_grab_cache_page(META_MAPPING(sbi),
200 fio.new_blkaddr, false);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800201 if (!page)
202 continue;
203 if (PageUptodate(page)) {
204 f2fs_put_page(page, 1);
205 continue;
206 }
207
208 fio.page = page;
Chao Yua83a52c2016-02-22 18:36:38 +0800209 fio.old_blkaddr = fio.new_blkaddr;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800210 f2fs_submit_page_mbio(&fio);
211 f2fs_put_page(page, 0);
212 }
213out:
214 f2fs_submit_merged_bio(sbi, META, READ);
Chao Yu8be7c502016-02-14 18:54:33 +0800215 blk_finish_plug(&plug);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800216 return blkno - start;
217}
218
219void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
220{
221 struct page *page;
222 bool readahead = false;
223
224 page = find_get_page(META_MAPPING(sbi), index);
Jaegeuk Kimc7167a92016-04-06 11:27:03 -0700225 if (!page || !PageUptodate(page))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800226 readahead = true;
227 f2fs_put_page(page, 0);
228
229 if (readahead)
230 ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR, true);
231}
232
233static int f2fs_write_meta_page(struct page *page,
234 struct writeback_control *wbc)
235{
236 struct f2fs_sb_info *sbi = F2FS_P_SB(page);
237
238 trace_f2fs_writepage(page, META);
239
240 if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
241 goto redirty_out;
242 if (wbc->for_reclaim && page->index < GET_SUM_BLOCK(sbi, 0))
243 goto redirty_out;
244 if (unlikely(f2fs_cp_error(sbi)))
245 goto redirty_out;
246
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800247 write_meta_page(sbi, page);
248 dec_page_count(sbi, F2FS_DIRTY_META);
Chao Yufd2bbb12016-01-18 18:28:11 +0800249
250 if (wbc->for_reclaim)
251 f2fs_submit_merged_bio_cond(sbi, NULL, page, 0, META, WRITE);
252
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800253 unlock_page(page);
254
Chao Yufd2bbb12016-01-18 18:28:11 +0800255 if (unlikely(f2fs_cp_error(sbi)))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800256 f2fs_submit_merged_bio(sbi, META, WRITE);
Chao Yufd2bbb12016-01-18 18:28:11 +0800257
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800258 return 0;
259
260redirty_out:
261 redirty_page_for_writepage(wbc, page);
262 return AOP_WRITEPAGE_ACTIVATE;
263}
264
265static int f2fs_write_meta_pages(struct address_space *mapping,
266 struct writeback_control *wbc)
267{
268 struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
Jaegeuk Kima6550b42016-07-13 19:33:19 -0700269 struct blk_plug plug;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800270 long diff, written;
271
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800272 /* collect a number of dirty meta pages and write together */
273 if (wbc->for_kupdate ||
274 get_pages(sbi, F2FS_DIRTY_META) < nr_pages_to_skip(sbi, META))
275 goto skip_write;
276
Yunlei He4dcaaa22016-02-04 16:14:00 +0800277 trace_f2fs_writepages(mapping->host, wbc, META);
278
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800279 /* if mounting is failed, skip writing node pages */
280 mutex_lock(&sbi->cp_mutex);
281 diff = nr_pages_to_write(sbi, META, wbc);
Jaegeuk Kima6550b42016-07-13 19:33:19 -0700282 blk_start_plug(&plug);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800283 written = sync_meta_pages(sbi, META, wbc->nr_to_write);
Jaegeuk Kima6550b42016-07-13 19:33:19 -0700284 blk_finish_plug(&plug);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800285 mutex_unlock(&sbi->cp_mutex);
286 wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff);
287 return 0;
288
289skip_write:
290 wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_META);
Yunlei He4dcaaa22016-02-04 16:14:00 +0800291 trace_f2fs_writepages(mapping->host, wbc, META);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800292 return 0;
293}
294
295long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
296 long nr_to_write)
297{
298 struct address_space *mapping = META_MAPPING(sbi);
Chao Yufab3b542016-02-24 17:20:44 +0800299 pgoff_t index = 0, end = ULONG_MAX, prev = ULONG_MAX;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800300 struct pagevec pvec;
301 long nwritten = 0;
302 struct writeback_control wbc = {
303 .for_reclaim = 0,
304 };
Chao Yu8be7c502016-02-14 18:54:33 +0800305 struct blk_plug plug;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800306
307 pagevec_init(&pvec, 0);
308
Chao Yu8be7c502016-02-14 18:54:33 +0800309 blk_start_plug(&plug);
310
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800311 while (index <= end) {
312 int i, nr_pages;
313 nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
314 PAGECACHE_TAG_DIRTY,
315 min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
316 if (unlikely(nr_pages == 0))
317 break;
318
319 for (i = 0; i < nr_pages; i++) {
320 struct page *page = pvec.pages[i];
321
Chao Yufab3b542016-02-24 17:20:44 +0800322 if (prev == ULONG_MAX)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800323 prev = page->index - 1;
324 if (nr_to_write != LONG_MAX && page->index != prev + 1) {
325 pagevec_release(&pvec);
326 goto stop;
327 }
328
329 lock_page(page);
330
331 if (unlikely(page->mapping != mapping)) {
332continue_unlock:
333 unlock_page(page);
334 continue;
335 }
336 if (!PageDirty(page)) {
337 /* someone wrote it for us */
338 goto continue_unlock;
339 }
340
Jaegeuk Kimdeed9ad2016-01-28 11:48:52 -0800341 f2fs_wait_on_page_writeback(page, META, true);
342
343 BUG_ON(PageWriteback(page));
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800344 if (!clear_page_dirty_for_io(page))
345 goto continue_unlock;
346
347 if (mapping->a_ops->writepage(page, &wbc)) {
348 unlock_page(page);
349 break;
350 }
351 nwritten++;
352 prev = page->index;
353 if (unlikely(nwritten >= nr_to_write))
354 break;
355 }
356 pagevec_release(&pvec);
357 cond_resched();
358 }
359stop:
360 if (nwritten)
361 f2fs_submit_merged_bio(sbi, type, WRITE);
362
Chao Yu8be7c502016-02-14 18:54:33 +0800363 blk_finish_plug(&plug);
364
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800365 return nwritten;
366}
367
368static int f2fs_set_meta_page_dirty(struct page *page)
369{
370 trace_f2fs_set_page_dirty(page, META);
371
Jaegeuk Kimb1cf93a2016-06-30 18:49:15 -0700372 if (!PageUptodate(page))
373 SetPageUptodate(page);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800374 if (!PageDirty(page)) {
Jaegeuk Kim4b149902016-06-30 18:40:10 -0700375 f2fs_set_page_dirty_nobuffers(page);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800376 inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_META);
377 SetPagePrivate(page);
378 f2fs_trace_pid(page);
379 return 1;
380 }
381 return 0;
382}
383
384const struct address_space_operations f2fs_meta_aops = {
385 .writepage = f2fs_write_meta_page,
386 .writepages = f2fs_write_meta_pages,
387 .set_page_dirty = f2fs_set_meta_page_dirty,
388 .invalidatepage = f2fs_invalidate_page,
389 .releasepage = f2fs_release_page,
390};
391
392static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
393{
394 struct inode_management *im = &sbi->im[type];
395 struct ino_entry *e, *tmp;
396
397 tmp = f2fs_kmem_cache_alloc(ino_entry_slab, GFP_NOFS);
398retry:
399 radix_tree_preload(GFP_NOFS | __GFP_NOFAIL);
400
401 spin_lock(&im->ino_lock);
402 e = radix_tree_lookup(&im->ino_root, ino);
403 if (!e) {
404 e = tmp;
405 if (radix_tree_insert(&im->ino_root, ino, e)) {
406 spin_unlock(&im->ino_lock);
407 radix_tree_preload_end();
408 goto retry;
409 }
410 memset(e, 0, sizeof(struct ino_entry));
411 e->ino = ino;
412
413 list_add_tail(&e->list, &im->ino_list);
414 if (type != ORPHAN_INO)
415 im->ino_num++;
416 }
417 spin_unlock(&im->ino_lock);
418 radix_tree_preload_end();
419
420 if (e != tmp)
421 kmem_cache_free(ino_entry_slab, tmp);
422}
423
424static void __remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
425{
426 struct inode_management *im = &sbi->im[type];
427 struct ino_entry *e;
428
429 spin_lock(&im->ino_lock);
430 e = radix_tree_lookup(&im->ino_root, ino);
431 if (e) {
432 list_del(&e->list);
433 radix_tree_delete(&im->ino_root, ino);
434 im->ino_num--;
435 spin_unlock(&im->ino_lock);
436 kmem_cache_free(ino_entry_slab, e);
437 return;
438 }
439 spin_unlock(&im->ino_lock);
440}
441
Chao Yudbc32c22015-12-15 13:29:47 +0800442void add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800443{
444 /* add new dirty ino entry into list */
445 __add_ino_entry(sbi, ino, type);
446}
447
Chao Yudbc32c22015-12-15 13:29:47 +0800448void remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800449{
450 /* remove dirty ino entry from list */
451 __remove_ino_entry(sbi, ino, type);
452}
453
454/* mode should be APPEND_INO or UPDATE_INO */
455bool exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode)
456{
457 struct inode_management *im = &sbi->im[mode];
458 struct ino_entry *e;
459
460 spin_lock(&im->ino_lock);
461 e = radix_tree_lookup(&im->ino_root, ino);
462 spin_unlock(&im->ino_lock);
463 return e ? true : false;
464}
465
Jaegeuk Kim75c407b2016-05-02 22:09:56 -0700466void release_ino_entry(struct f2fs_sb_info *sbi, bool all)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800467{
468 struct ino_entry *e, *tmp;
469 int i;
470
Jaegeuk Kim75c407b2016-05-02 22:09:56 -0700471 for (i = all ? ORPHAN_INO: APPEND_INO; i <= UPDATE_INO; i++) {
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800472 struct inode_management *im = &sbi->im[i];
473
474 spin_lock(&im->ino_lock);
475 list_for_each_entry_safe(e, tmp, &im->ino_list, list) {
476 list_del(&e->list);
477 radix_tree_delete(&im->ino_root, e->ino);
478 kmem_cache_free(ino_entry_slab, e);
479 im->ino_num--;
480 }
481 spin_unlock(&im->ino_lock);
482 }
483}
484
485int acquire_orphan_inode(struct f2fs_sb_info *sbi)
486{
487 struct inode_management *im = &sbi->im[ORPHAN_INO];
488 int err = 0;
489
490 spin_lock(&im->ino_lock);
Jaegeuk Kim98ffffd2016-04-29 16:29:22 -0700491
492#ifdef CONFIG_F2FS_FAULT_INJECTION
493 if (time_to_inject(FAULT_ORPHAN)) {
494 spin_unlock(&im->ino_lock);
495 return -ENOSPC;
496 }
497#endif
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800498 if (unlikely(im->ino_num >= sbi->max_orphans))
499 err = -ENOSPC;
500 else
501 im->ino_num++;
502 spin_unlock(&im->ino_lock);
503
504 return err;
505}
506
507void release_orphan_inode(struct f2fs_sb_info *sbi)
508{
509 struct inode_management *im = &sbi->im[ORPHAN_INO];
510
511 spin_lock(&im->ino_lock);
512 f2fs_bug_on(sbi, im->ino_num == 0);
513 im->ino_num--;
514 spin_unlock(&im->ino_lock);
515}
516
Jaegeuk Kim642e1e22016-06-13 18:27:02 -0700517void add_orphan_inode(struct inode *inode)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800518{
519 /* add new orphan ino entry into list */
Jaegeuk Kim642e1e22016-06-13 18:27:02 -0700520 __add_ino_entry(F2FS_I_SB(inode), inode->i_ino, ORPHAN_INO);
521 update_inode_page(inode);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800522}
523
524void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
525{
526 /* remove orphan entry from orphan list */
527 __remove_ino_entry(sbi, ino, ORPHAN_INO);
528}
529
530static int recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
531{
532 struct inode *inode;
533
534 inode = f2fs_iget(sbi->sb, ino);
535 if (IS_ERR(inode)) {
536 /*
537 * there should be a bug that we can't find the entry
538 * to orphan inode.
539 */
540 f2fs_bug_on(sbi, PTR_ERR(inode) == -ENOENT);
541 return PTR_ERR(inode);
542 }
543
544 clear_nlink(inode);
545
546 /* truncate all the data during iput */
547 iput(inode);
548 return 0;
549}
550
551int recover_orphan_inodes(struct f2fs_sb_info *sbi)
552{
553 block_t start_blk, orphan_blocks, i, j;
554 int err;
555
556 if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG))
557 return 0;
558
559 start_blk = __start_cp_addr(sbi) + 1 + __cp_payload(sbi);
560 orphan_blocks = __start_sum_addr(sbi) - 1 - __cp_payload(sbi);
561
562 ra_meta_pages(sbi, start_blk, orphan_blocks, META_CP, true);
563
564 for (i = 0; i < orphan_blocks; i++) {
565 struct page *page = get_meta_page(sbi, start_blk + i);
566 struct f2fs_orphan_block *orphan_blk;
567
568 orphan_blk = (struct f2fs_orphan_block *)page_address(page);
569 for (j = 0; j < le32_to_cpu(orphan_blk->entry_count); j++) {
570 nid_t ino = le32_to_cpu(orphan_blk->ino[j]);
571 err = recover_orphan_inode(sbi, ino);
572 if (err) {
573 f2fs_put_page(page, 1);
574 return err;
575 }
576 }
577 f2fs_put_page(page, 1);
578 }
579 /* clear Orphan Flag */
580 clear_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG);
581 return 0;
582}
583
584static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
585{
586 struct list_head *head;
587 struct f2fs_orphan_block *orphan_blk = NULL;
588 unsigned int nentries = 0;
589 unsigned short index = 1;
590 unsigned short orphan_blocks;
591 struct page *page = NULL;
592 struct ino_entry *orphan = NULL;
593 struct inode_management *im = &sbi->im[ORPHAN_INO];
594
595 orphan_blocks = GET_ORPHAN_BLOCKS(im->ino_num);
596
597 /*
598 * we don't need to do spin_lock(&im->ino_lock) here, since all the
599 * orphan inode operations are covered under f2fs_lock_op().
600 * And, spin_lock should be avoided due to page operations below.
601 */
602 head = &im->ino_list;
603
604 /* loop for each orphan inode entry and write them in Jornal block */
605 list_for_each_entry(orphan, head, list) {
606 if (!page) {
607 page = grab_meta_page(sbi, start_blk++);
608 orphan_blk =
609 (struct f2fs_orphan_block *)page_address(page);
610 memset(orphan_blk, 0, sizeof(*orphan_blk));
611 }
612
613 orphan_blk->ino[nentries++] = cpu_to_le32(orphan->ino);
614
615 if (nentries == F2FS_ORPHANS_PER_BLOCK) {
616 /*
617 * an orphan block is full of 1020 entries,
618 * then we need to flush current orphan blocks
619 * and bring another one in memory
620 */
621 orphan_blk->blk_addr = cpu_to_le16(index);
622 orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
623 orphan_blk->entry_count = cpu_to_le32(nentries);
624 set_page_dirty(page);
625 f2fs_put_page(page, 1);
626 index++;
627 nentries = 0;
628 page = NULL;
629 }
630 }
631
632 if (page) {
633 orphan_blk->blk_addr = cpu_to_le16(index);
634 orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
635 orphan_blk->entry_count = cpu_to_le32(nentries);
636 set_page_dirty(page);
637 f2fs_put_page(page, 1);
638 }
639}
640
641static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
642 block_t cp_addr, unsigned long long *version)
643{
644 struct page *cp_page_1, *cp_page_2 = NULL;
645 unsigned long blk_size = sbi->blocksize;
646 struct f2fs_checkpoint *cp_block;
647 unsigned long long cur_version = 0, pre_version = 0;
648 size_t crc_offset;
649 __u32 crc = 0;
650
651 /* Read the 1st cp block in this CP pack */
652 cp_page_1 = get_meta_page(sbi, cp_addr);
653
654 /* get the version number */
655 cp_block = (struct f2fs_checkpoint *)page_address(cp_page_1);
656 crc_offset = le32_to_cpu(cp_block->checksum_offset);
657 if (crc_offset >= blk_size)
658 goto invalid_cp1;
659
660 crc = le32_to_cpu(*((__le32 *)((unsigned char *)cp_block + crc_offset)));
Jaegeuk Kim528b05d2016-04-27 10:13:19 -0700661 if (!f2fs_crc_valid(crc, cp_block, crc_offset))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800662 goto invalid_cp1;
663
664 pre_version = cur_cp_version(cp_block);
665
666 /* Read the 2nd cp block in this CP pack */
667 cp_addr += le32_to_cpu(cp_block->cp_pack_total_block_count) - 1;
668 cp_page_2 = get_meta_page(sbi, cp_addr);
669
670 cp_block = (struct f2fs_checkpoint *)page_address(cp_page_2);
671 crc_offset = le32_to_cpu(cp_block->checksum_offset);
672 if (crc_offset >= blk_size)
673 goto invalid_cp2;
674
675 crc = le32_to_cpu(*((__le32 *)((unsigned char *)cp_block + crc_offset)));
Jaegeuk Kim528b05d2016-04-27 10:13:19 -0700676 if (!f2fs_crc_valid(crc, cp_block, crc_offset))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800677 goto invalid_cp2;
678
679 cur_version = cur_cp_version(cp_block);
680
681 if (cur_version == pre_version) {
682 *version = cur_version;
683 f2fs_put_page(cp_page_2, 1);
684 return cp_page_1;
685 }
686invalid_cp2:
687 f2fs_put_page(cp_page_2, 1);
688invalid_cp1:
689 f2fs_put_page(cp_page_1, 1);
690 return NULL;
691}
692
693int get_valid_checkpoint(struct f2fs_sb_info *sbi)
694{
695 struct f2fs_checkpoint *cp_block;
696 struct f2fs_super_block *fsb = sbi->raw_super;
697 struct page *cp1, *cp2, *cur_page;
698 unsigned long blk_size = sbi->blocksize;
699 unsigned long long cp1_version = 0, cp2_version = 0;
700 unsigned long long cp_start_blk_no;
701 unsigned int cp_blks = 1 + __cp_payload(sbi);
702 block_t cp_blk_no;
703 int i;
704
705 sbi->ckpt = kzalloc(cp_blks * blk_size, GFP_KERNEL);
706 if (!sbi->ckpt)
707 return -ENOMEM;
708 /*
709 * Finding out valid cp block involves read both
710 * sets( cp pack1 and cp pack 2)
711 */
712 cp_start_blk_no = le32_to_cpu(fsb->cp_blkaddr);
713 cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version);
714
715 /* The second checkpoint pack should start at the next segment */
716 cp_start_blk_no += ((unsigned long long)1) <<
717 le32_to_cpu(fsb->log_blocks_per_seg);
718 cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version);
719
720 if (cp1 && cp2) {
721 if (ver_after(cp2_version, cp1_version))
722 cur_page = cp2;
723 else
724 cur_page = cp1;
725 } else if (cp1) {
726 cur_page = cp1;
727 } else if (cp2) {
728 cur_page = cp2;
729 } else {
730 goto fail_no_cp;
731 }
732
733 cp_block = (struct f2fs_checkpoint *)page_address(cur_page);
734 memcpy(sbi->ckpt, cp_block, blk_size);
735
Shawn Lin65999d62016-02-17 11:26:32 +0800736 /* Sanity checking of checkpoint */
737 if (sanity_check_ckpt(sbi))
738 goto fail_no_cp;
739
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800740 if (cp_blks <= 1)
741 goto done;
742
743 cp_blk_no = le32_to_cpu(fsb->cp_blkaddr);
744 if (cur_page == cp2)
745 cp_blk_no += 1 << le32_to_cpu(fsb->log_blocks_per_seg);
746
747 for (i = 1; i < cp_blks; i++) {
748 void *sit_bitmap_ptr;
749 unsigned char *ckpt = (unsigned char *)sbi->ckpt;
750
751 cur_page = get_meta_page(sbi, cp_blk_no + i);
752 sit_bitmap_ptr = page_address(cur_page);
753 memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
754 f2fs_put_page(cur_page, 1);
755 }
756done:
757 f2fs_put_page(cp1, 1);
758 f2fs_put_page(cp2, 1);
759 return 0;
760
761fail_no_cp:
762 kfree(sbi->ckpt);
763 return -EINVAL;
764}
765
Chao Yufb1825c2015-12-16 13:09:20 +0800766static void __add_dirty_inode(struct inode *inode, enum inode_type type)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800767{
768 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
Chao Yufb1825c2015-12-16 13:09:20 +0800769 int flag = (type == DIR_INODE) ? FI_DIRTY_DIR : FI_DIRTY_FILE;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800770
Jaegeuk Kim5e3a5ba2016-05-20 10:13:22 -0700771 if (is_inode_flag_set(inode, flag))
Chao Yubc2a2142015-12-15 13:30:45 +0800772 return;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800773
Jaegeuk Kim5e3a5ba2016-05-20 10:13:22 -0700774 set_inode_flag(inode, flag);
775 list_add_tail(&F2FS_I(inode)->dirty_list, &sbi->inode_list[type]);
Chao Yu0b90d982015-12-17 17:14:44 +0800776 stat_inc_dirty_inode(sbi, type);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800777}
778
Chao Yufb1825c2015-12-16 13:09:20 +0800779static void __remove_dirty_inode(struct inode *inode, enum inode_type type)
Chao Yu0c591542015-12-15 13:31:40 +0800780{
Chao Yufb1825c2015-12-16 13:09:20 +0800781 int flag = (type == DIR_INODE) ? FI_DIRTY_DIR : FI_DIRTY_FILE;
Chao Yu0c591542015-12-15 13:31:40 +0800782
Jaegeuk Kim5e3a5ba2016-05-20 10:13:22 -0700783 if (get_dirty_pages(inode) || !is_inode_flag_set(inode, flag))
Chao Yu0c591542015-12-15 13:31:40 +0800784 return;
785
Jaegeuk Kim5e3a5ba2016-05-20 10:13:22 -0700786 list_del_init(&F2FS_I(inode)->dirty_list);
787 clear_inode_flag(inode, flag);
Chao Yu0b90d982015-12-17 17:14:44 +0800788 stat_dec_dirty_inode(F2FS_I_SB(inode), type);
Chao Yu0c591542015-12-15 13:31:40 +0800789}
790
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800791void update_dirty_page(struct inode *inode, struct page *page)
792{
793 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
Chao Yufb1825c2015-12-16 13:09:20 +0800794 enum inode_type type = S_ISDIR(inode->i_mode) ? DIR_INODE : FILE_INODE;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800795
796 if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) &&
797 !S_ISLNK(inode->i_mode))
798 return;
799
Jaegeuk Kim87fa7102016-06-01 20:55:51 -0700800 spin_lock(&sbi->inode_lock[type]);
801 if (type != FILE_INODE || test_opt(sbi, DATA_FLUSH))
Jaegeuk Kim30614fe2016-05-16 10:33:40 -0700802 __add_dirty_inode(inode, type);
Yunlei He133f0c42016-05-13 14:57:43 +0800803 inode_inc_dirty_pages(inode);
Jaegeuk Kim87fa7102016-06-01 20:55:51 -0700804 spin_unlock(&sbi->inode_lock[type]);
805
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800806 SetPagePrivate(page);
807 f2fs_trace_pid(page);
808}
809
Chao Yufb1825c2015-12-16 13:09:20 +0800810void remove_dirty_inode(struct inode *inode)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800811{
812 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
Chao Yufb1825c2015-12-16 13:09:20 +0800813 enum inode_type type = S_ISDIR(inode->i_mode) ? DIR_INODE : FILE_INODE;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800814
Chao Yufb1825c2015-12-16 13:09:20 +0800815 if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) &&
816 !S_ISLNK(inode->i_mode))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800817 return;
818
Jaegeuk Kim30614fe2016-05-16 10:33:40 -0700819 if (type == FILE_INODE && !test_opt(sbi, DATA_FLUSH))
820 return;
821
Chao Yufb1825c2015-12-16 13:09:20 +0800822 spin_lock(&sbi->inode_lock[type]);
823 __remove_dirty_inode(inode, type);
824 spin_unlock(&sbi->inode_lock[type]);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800825}
826
Chao Yu167a3162015-12-24 18:04:56 +0800827int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800828{
829 struct list_head *head;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800830 struct inode *inode;
Chao Yubc2a2142015-12-15 13:30:45 +0800831 struct f2fs_inode_info *fi;
Chao Yu74729a92015-12-17 17:17:16 +0800832 bool is_dir = (type == DIR_INODE);
833
834 trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir,
835 get_pages(sbi, is_dir ?
836 F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA));
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800837retry:
838 if (unlikely(f2fs_cp_error(sbi)))
Chao Yu167a3162015-12-24 18:04:56 +0800839 return -EIO;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800840
Chao Yufb1825c2015-12-16 13:09:20 +0800841 spin_lock(&sbi->inode_lock[type]);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800842
Chao Yufb1825c2015-12-16 13:09:20 +0800843 head = &sbi->inode_list[type];
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800844 if (list_empty(head)) {
Chao Yufb1825c2015-12-16 13:09:20 +0800845 spin_unlock(&sbi->inode_lock[type]);
Chao Yu74729a92015-12-17 17:17:16 +0800846 trace_f2fs_sync_dirty_inodes_exit(sbi->sb, is_dir,
847 get_pages(sbi, is_dir ?
848 F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA));
Chao Yu167a3162015-12-24 18:04:56 +0800849 return 0;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800850 }
Chao Yubc2a2142015-12-15 13:30:45 +0800851 fi = list_entry(head->next, struct f2fs_inode_info, dirty_list);
852 inode = igrab(&fi->vfs_inode);
Chao Yufb1825c2015-12-16 13:09:20 +0800853 spin_unlock(&sbi->inode_lock[type]);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800854 if (inode) {
855 filemap_fdatawrite(inode->i_mapping);
856 iput(inode);
857 } else {
858 /*
859 * We should submit bio, since it exists several
860 * wribacking dentry pages in the freeing inode.
861 */
862 f2fs_submit_merged_bio(sbi, DATA, WRITE);
863 cond_resched();
864 }
865 goto retry;
866}
867
Jaegeuk Kim94494a82016-05-20 11:10:10 -0700868int f2fs_sync_inode_meta(struct f2fs_sb_info *sbi)
869{
870 struct list_head *head = &sbi->inode_list[DIRTY_META];
871 struct inode *inode;
872 struct f2fs_inode_info *fi;
873 s64 total = get_pages(sbi, F2FS_DIRTY_IMETA);
874
875 while (total--) {
876 if (unlikely(f2fs_cp_error(sbi)))
877 return -EIO;
878
879 spin_lock(&sbi->inode_lock[DIRTY_META]);
880 if (list_empty(head)) {
881 spin_unlock(&sbi->inode_lock[DIRTY_META]);
882 return 0;
883 }
884 fi = list_entry(head->next, struct f2fs_inode_info,
885 gdirty_list);
886 inode = igrab(&fi->vfs_inode);
887 spin_unlock(&sbi->inode_lock[DIRTY_META]);
888 if (inode) {
889 update_inode_page(inode);
890 iput(inode);
891 }
892 };
893 return 0;
894}
895
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800896/*
897 * Freeze all the FS-operations for checkpoint.
898 */
899static int block_operations(struct f2fs_sb_info *sbi)
900{
901 struct writeback_control wbc = {
902 .sync_mode = WB_SYNC_ALL,
903 .nr_to_write = LONG_MAX,
904 .for_reclaim = 0,
905 };
Jaegeuk Kima6550b42016-07-13 19:33:19 -0700906 struct blk_plug plug;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800907 int err = 0;
908
Jaegeuk Kima6550b42016-07-13 19:33:19 -0700909 blk_start_plug(&plug);
910
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800911retry_flush_dents:
912 f2fs_lock_all(sbi);
913 /* write all the dirty dentry pages */
914 if (get_pages(sbi, F2FS_DIRTY_DENTS)) {
915 f2fs_unlock_all(sbi);
Chao Yu167a3162015-12-24 18:04:56 +0800916 err = sync_dirty_inodes(sbi, DIR_INODE);
917 if (err)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800918 goto out;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800919 goto retry_flush_dents;
920 }
921
Jaegeuk Kim94494a82016-05-20 11:10:10 -0700922 if (get_pages(sbi, F2FS_DIRTY_IMETA)) {
923 f2fs_unlock_all(sbi);
924 err = f2fs_sync_inode_meta(sbi);
925 if (err)
926 goto out;
927 goto retry_flush_dents;
928 }
929
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800930 /*
931 * POR: we should ensure that there are no dirty node pages
932 * until finishing nat/sit flush.
933 */
934retry_flush_nodes:
935 down_write(&sbi->node_write);
936
937 if (get_pages(sbi, F2FS_DIRTY_NODES)) {
938 up_write(&sbi->node_write);
Jaegeuk Kimac6e0112016-04-13 16:24:44 -0700939 err = sync_node_pages(sbi, &wbc);
Chao Yu167a3162015-12-24 18:04:56 +0800940 if (err) {
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800941 f2fs_unlock_all(sbi);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800942 goto out;
943 }
944 goto retry_flush_nodes;
945 }
946out:
Jaegeuk Kima6550b42016-07-13 19:33:19 -0700947 blk_finish_plug(&plug);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800948 return err;
949}
950
951static void unblock_operations(struct f2fs_sb_info *sbi)
952{
953 up_write(&sbi->node_write);
Jaegeuk Kimca758582016-06-16 16:41:49 -0700954
955 build_free_nids(sbi);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800956 f2fs_unlock_all(sbi);
957}
958
959static void wait_on_all_pages_writeback(struct f2fs_sb_info *sbi)
960{
961 DEFINE_WAIT(wait);
962
963 for (;;) {
964 prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
965
Jaegeuk Kimdc022d62016-05-17 16:23:36 -0700966 if (!atomic_read(&sbi->nr_wb_bios))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800967 break;
968
Yunlei He1d7dcc92016-02-23 12:07:56 +0800969 io_schedule_timeout(5*HZ);
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800970 }
971 finish_wait(&sbi->cp_wait, &wait);
972}
973
Chao Yub962dc12015-12-23 17:50:30 +0800974static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800975{
976 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
977 struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_WARM_NODE);
978 struct f2fs_nm_info *nm_i = NM_I(sbi);
979 unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
980 nid_t last_nid = nm_i->next_scan_nid;
981 block_t start_blk;
982 unsigned int data_sum_blocks, orphan_blocks;
983 __u32 crc32 = 0;
984 int i;
985 int cp_payload_blks = __cp_payload(sbi);
986 block_t discard_blk = NEXT_FREE_BLKADDR(sbi, curseg);
987 bool invalidate = false;
Shuoran Liufa8a1d72016-01-27 09:57:30 +0800988 struct super_block *sb = sbi->sb;
989 struct curseg_info *seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
990 u64 kbytes_written;
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800991
992 /*
993 * This avoids to conduct wrong roll-forward operations and uses
994 * metapages, so should be called prior to sync_meta_pages below.
995 */
Jaegeuk Kimb017edd2016-06-03 19:29:38 -0700996 if (!test_opt(sbi, LFS) && discard_next_dnode(sbi, discard_blk))
Jaegeuk Kim315f4552015-11-29 09:25:08 -0800997 invalidate = true;
998
999 /* Flush all the NAT/SIT pages */
1000 while (get_pages(sbi, F2FS_DIRTY_META)) {
1001 sync_meta_pages(sbi, META, LONG_MAX);
1002 if (unlikely(f2fs_cp_error(sbi)))
Chao Yub962dc12015-12-23 17:50:30 +08001003 return -EIO;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001004 }
1005
1006 next_free_nid(sbi, &last_nid);
1007
1008 /*
1009 * modify checkpoint
1010 * version number is already updated
1011 */
1012 ckpt->elapsed_time = cpu_to_le64(get_mtime(sbi));
1013 ckpt->valid_block_count = cpu_to_le64(valid_user_blocks(sbi));
1014 ckpt->free_segment_count = cpu_to_le32(free_segments(sbi));
1015 for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
1016 ckpt->cur_node_segno[i] =
1017 cpu_to_le32(curseg_segno(sbi, i + CURSEG_HOT_NODE));
1018 ckpt->cur_node_blkoff[i] =
1019 cpu_to_le16(curseg_blkoff(sbi, i + CURSEG_HOT_NODE));
1020 ckpt->alloc_type[i + CURSEG_HOT_NODE] =
1021 curseg_alloc_type(sbi, i + CURSEG_HOT_NODE);
1022 }
1023 for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
1024 ckpt->cur_data_segno[i] =
1025 cpu_to_le32(curseg_segno(sbi, i + CURSEG_HOT_DATA));
1026 ckpt->cur_data_blkoff[i] =
1027 cpu_to_le16(curseg_blkoff(sbi, i + CURSEG_HOT_DATA));
1028 ckpt->alloc_type[i + CURSEG_HOT_DATA] =
1029 curseg_alloc_type(sbi, i + CURSEG_HOT_DATA);
1030 }
1031
1032 ckpt->valid_node_count = cpu_to_le32(valid_node_count(sbi));
1033 ckpt->valid_inode_count = cpu_to_le32(valid_inode_count(sbi));
1034 ckpt->next_free_nid = cpu_to_le32(last_nid);
1035
1036 /* 2 cp + n data seg summary + orphan inode blocks */
1037 data_sum_blocks = npages_for_summary_flush(sbi, false);
1038 if (data_sum_blocks < NR_CURSEG_DATA_TYPE)
1039 set_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
1040 else
1041 clear_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
1042
1043 orphan_blocks = GET_ORPHAN_BLOCKS(orphan_num);
1044 ckpt->cp_pack_start_sum = cpu_to_le32(1 + cp_payload_blks +
1045 orphan_blocks);
1046
1047 if (__remain_node_summaries(cpc->reason))
1048 ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS+
1049 cp_payload_blks + data_sum_blocks +
1050 orphan_blocks + NR_CURSEG_NODE_TYPE);
1051 else
1052 ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS +
1053 cp_payload_blks + data_sum_blocks +
1054 orphan_blocks);
1055
1056 if (cpc->reason == CP_UMOUNT)
1057 set_ckpt_flags(ckpt, CP_UMOUNT_FLAG);
1058 else
1059 clear_ckpt_flags(ckpt, CP_UMOUNT_FLAG);
1060
1061 if (cpc->reason == CP_FASTBOOT)
1062 set_ckpt_flags(ckpt, CP_FASTBOOT_FLAG);
1063 else
1064 clear_ckpt_flags(ckpt, CP_FASTBOOT_FLAG);
1065
1066 if (orphan_num)
1067 set_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
1068 else
1069 clear_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
1070
1071 if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
1072 set_ckpt_flags(ckpt, CP_FSCK_FLAG);
1073
1074 /* update SIT/NAT bitmap */
1075 get_sit_bitmap(sbi, __bitmap_ptr(sbi, SIT_BITMAP));
1076 get_nat_bitmap(sbi, __bitmap_ptr(sbi, NAT_BITMAP));
1077
Jaegeuk Kim528b05d2016-04-27 10:13:19 -07001078 crc32 = f2fs_crc32(ckpt, le32_to_cpu(ckpt->checksum_offset));
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001079 *((__le32 *)((unsigned char *)ckpt +
1080 le32_to_cpu(ckpt->checksum_offset)))
1081 = cpu_to_le32(crc32);
1082
1083 start_blk = __start_cp_addr(sbi);
1084
1085 /* need to wait for end_io results */
1086 wait_on_all_pages_writeback(sbi);
1087 if (unlikely(f2fs_cp_error(sbi)))
Chao Yub962dc12015-12-23 17:50:30 +08001088 return -EIO;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001089
1090 /* write out checkpoint buffer at block 0 */
1091 update_meta_page(sbi, ckpt, start_blk++);
1092
1093 for (i = 1; i < 1 + cp_payload_blks; i++)
1094 update_meta_page(sbi, (char *)ckpt + i * F2FS_BLKSIZE,
1095 start_blk++);
1096
1097 if (orphan_num) {
1098 write_orphan_inodes(sbi, start_blk);
1099 start_blk += orphan_blocks;
1100 }
1101
1102 write_data_summaries(sbi, start_blk);
1103 start_blk += data_sum_blocks;
Shuoran Liufa8a1d72016-01-27 09:57:30 +08001104
1105 /* Record write statistics in the hot node summary */
1106 kbytes_written = sbi->kbytes_written;
1107 if (sb->s_bdev->bd_part)
1108 kbytes_written += BD_PART_WRITTEN(sbi);
1109
Chao Yufac2b092016-02-19 18:08:46 +08001110 seg_i->journal->info.kbytes_written = cpu_to_le64(kbytes_written);
Shuoran Liufa8a1d72016-01-27 09:57:30 +08001111
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001112 if (__remain_node_summaries(cpc->reason)) {
1113 write_node_summaries(sbi, start_blk);
1114 start_blk += NR_CURSEG_NODE_TYPE;
1115 }
1116
1117 /* writeout checkpoint block */
1118 update_meta_page(sbi, ckpt, start_blk);
1119
1120 /* wait for previous submitted node/meta pages writeback */
1121 wait_on_all_pages_writeback(sbi);
1122
1123 if (unlikely(f2fs_cp_error(sbi)))
Chao Yub962dc12015-12-23 17:50:30 +08001124 return -EIO;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001125
Chao Yufab3b542016-02-24 17:20:44 +08001126 filemap_fdatawait_range(NODE_MAPPING(sbi), 0, LLONG_MAX);
1127 filemap_fdatawait_range(META_MAPPING(sbi), 0, LLONG_MAX);
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001128
1129 /* update user_block_counts */
1130 sbi->last_valid_block_count = sbi->total_valid_block_count;
Jaegeuk Kim57ffa9f2016-05-16 11:06:50 -07001131 percpu_counter_set(&sbi->alloc_valid_block_count, 0);
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001132
1133 /* Here, we only have one bio having CP pack */
1134 sync_meta_pages(sbi, META_FLUSH, LONG_MAX);
1135
1136 /* wait for previous submitted meta pages writeback */
1137 wait_on_all_pages_writeback(sbi);
1138
1139 /*
1140 * invalidate meta page which is used temporarily for zeroing out
1141 * block at the end of warm node chain.
1142 */
1143 if (invalidate)
1144 invalidate_mapping_pages(META_MAPPING(sbi), discard_blk,
1145 discard_blk);
1146
Jaegeuk Kim75c407b2016-05-02 22:09:56 -07001147 release_ino_entry(sbi, false);
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001148
1149 if (unlikely(f2fs_cp_error(sbi)))
Chao Yub962dc12015-12-23 17:50:30 +08001150 return -EIO;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001151
1152 clear_prefree_segments(sbi, cpc);
1153 clear_sbi_flag(sbi, SBI_IS_DIRTY);
Chao Yub962dc12015-12-23 17:50:30 +08001154
1155 return 0;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001156}
1157
1158/*
1159 * We guarantee that this checkpoint procedure will not fail.
1160 */
Chao Yub962dc12015-12-23 17:50:30 +08001161int write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001162{
1163 struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1164 unsigned long long ckpt_ver;
Chao Yub962dc12015-12-23 17:50:30 +08001165 int err = 0;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001166
1167 mutex_lock(&sbi->cp_mutex);
1168
1169 if (!is_sbi_flag_set(sbi, SBI_IS_DIRTY) &&
1170 (cpc->reason == CP_FASTBOOT || cpc->reason == CP_SYNC ||
1171 (cpc->reason == CP_DISCARD && !sbi->discard_blks)))
1172 goto out;
Chao Yub962dc12015-12-23 17:50:30 +08001173 if (unlikely(f2fs_cp_error(sbi))) {
1174 err = -EIO;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001175 goto out;
Chao Yub962dc12015-12-23 17:50:30 +08001176 }
1177 if (f2fs_readonly(sbi->sb)) {
1178 err = -EROFS;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001179 goto out;
Chao Yub962dc12015-12-23 17:50:30 +08001180 }
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001181
1182 trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "start block_ops");
1183
Chao Yub962dc12015-12-23 17:50:30 +08001184 err = block_operations(sbi);
1185 if (err)
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001186 goto out;
1187
1188 trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish block_ops");
1189
Chao Yuf8fb0a82016-02-24 17:17:55 +08001190 f2fs_flush_merged_bios(sbi);
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001191
1192 /*
1193 * update checkpoint pack index
1194 * Increase the version number so that
1195 * SIT entries and seg summaries are written at correct place
1196 */
1197 ckpt_ver = cur_cp_version(ckpt);
1198 ckpt->checkpoint_ver = cpu_to_le64(++ckpt_ver);
1199
1200 /* write cached NAT/SIT entries to NAT/SIT area */
1201 flush_nat_entries(sbi);
1202 flush_sit_entries(sbi, cpc);
1203
1204 /* unlock all the fs_lock[] in do_checkpoint() */
Chao Yub962dc12015-12-23 17:50:30 +08001205 err = do_checkpoint(sbi, cpc);
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001206
1207 unblock_operations(sbi);
1208 stat_inc_cp_count(sbi->stat_info);
1209
1210 if (cpc->reason == CP_RECOVERY)
1211 f2fs_msg(sbi->sb, KERN_NOTICE,
1212 "checkpoint: version = %llx", ckpt_ver);
1213
1214 /* do checkpoint periodically */
Jaegeuk Kimdedfbf82016-01-08 15:51:50 -08001215 f2fs_update_time(sbi, CP_TIME);
Jaegeuk Kim1f167ac2015-12-15 16:07:14 -08001216 trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish checkpoint");
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001217out:
1218 mutex_unlock(&sbi->cp_mutex);
Chao Yub962dc12015-12-23 17:50:30 +08001219 return err;
Jaegeuk Kim315f4552015-11-29 09:25:08 -08001220}
1221
1222void init_ino_entry_info(struct f2fs_sb_info *sbi)
1223{
1224 int i;
1225
1226 for (i = 0; i < MAX_INO_ENTRY; i++) {
1227 struct inode_management *im = &sbi->im[i];
1228
1229 INIT_RADIX_TREE(&im->ino_root, GFP_ATOMIC);
1230 spin_lock_init(&im->ino_lock);
1231 INIT_LIST_HEAD(&im->ino_list);
1232 im->ino_num = 0;
1233 }
1234
1235 sbi->max_orphans = (sbi->blocks_per_seg - F2FS_CP_PACKS -
1236 NR_CURSEG_TYPE - __cp_payload(sbi)) *
1237 F2FS_ORPHANS_PER_BLOCK;
1238}
1239
1240int __init create_checkpoint_caches(void)
1241{
1242 ino_entry_slab = f2fs_kmem_cache_create("f2fs_ino_entry",
1243 sizeof(struct ino_entry));
1244 if (!ino_entry_slab)
1245 return -ENOMEM;
1246 inode_entry_slab = f2fs_kmem_cache_create("f2fs_inode_entry",
1247 sizeof(struct inode_entry));
1248 if (!inode_entry_slab) {
1249 kmem_cache_destroy(ino_entry_slab);
1250 return -ENOMEM;
1251 }
1252 return 0;
1253}
1254
1255void destroy_checkpoint_caches(void)
1256{
1257 kmem_cache_destroy(ino_entry_slab);
1258 kmem_cache_destroy(inode_entry_slab);
1259}