linux/fs/f2fs/checkpoint.c
<<
>>
Prefs
   1/*
   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
  29void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io)
  30{
  31        set_ckpt_flags(sbi, CP_ERROR_FLAG);
  32        sbi->sb->s_flags |= MS_RDONLY;
  33        if (!end_io)
  34                f2fs_flush_merged_bios(sbi);
  35}
  36
  37/*
  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:
  45        page = f2fs_grab_cache_page(mapping, index, false);
  46        if (!page) {
  47                cond_resched();
  48                goto repeat;
  49        }
  50        f2fs_wait_on_page_writeback(page, META, true);
  51        if (!PageUptodate(page))
  52                SetPageUptodate(page);
  53        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                .op = REQ_OP_READ,
  68                .op_flags = READ_SYNC | REQ_META | REQ_PRIO,
  69                .old_blkaddr = index,
  70                .new_blkaddr = index,
  71                .encrypted_page = NULL,
  72        };
  73
  74        if (unlikely(!is_meta))
  75                fio.op_flags &= ~REQ_META;
  76repeat:
  77        page = f2fs_grab_cache_page(mapping, index, false);
  78        if (!page) {
  79                cond_resched();
  80                goto repeat;
  81        }
  82        if (PageUptodate(page))
  83                goto out;
  84
  85        fio.page = page;
  86
  87        if (f2fs_submit_page_bio(&fio)) {
  88                f2fs_put_page(page, 1);
  89                goto repeat;
  90        }
  91
  92        lock_page(page);
  93        if (unlikely(page->mapping != mapping)) {
  94                f2fs_put_page(page, 1);
  95                goto repeat;
  96        }
  97
  98        /*
  99         * if there is any IO error when accessing device, make our filesystem
 100         * readonly and make sure do not write checkpoint with non-uptodate
 101         * meta page.
 102         */
 103        if (unlikely(!PageUptodate(page)))
 104                f2fs_stop_checkpoint(sbi, false);
 105out:
 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{
 157        struct page *page;
 158        block_t blkno = start;
 159        struct f2fs_io_info fio = {
 160                .sbi = sbi,
 161                .type = META,
 162                .op = REQ_OP_READ,
 163                .op_flags = sync ? (READ_SYNC | REQ_META | REQ_PRIO) : REQ_RAHEAD,
 164                .encrypted_page = NULL,
 165        };
 166        struct blk_plug plug;
 167
 168        if (unlikely(type == META_POR))
 169                fio.op_flags &= ~REQ_META;
 170
 171        blk_start_plug(&plug);
 172        for (; nrpages-- > 0; blkno++) {
 173
 174                if (!is_valid_blkaddr(sbi, blkno, type))
 175                        goto out;
 176
 177                switch (type) {
 178                case META_NAT:
 179                        if (unlikely(blkno >=
 180                                        NAT_BLOCK_OFFSET(NM_I(sbi)->max_nid)))
 181                                blkno = 0;
 182                        /* get nat block addr */
 183                        fio.new_blkaddr = current_nat_addr(sbi,
 184                                        blkno * NAT_ENTRY_PER_BLOCK);
 185                        break;
 186                case META_SIT:
 187                        /* get sit block addr */
 188                        fio.new_blkaddr = current_sit_addr(sbi,
 189                                        blkno * SIT_ENTRY_PER_BLOCK);
 190                        break;
 191                case META_SSA:
 192                case META_CP:
 193                case META_POR:
 194                        fio.new_blkaddr = blkno;
 195                        break;
 196                default:
 197                        BUG();
 198                }
 199
 200                page = f2fs_grab_cache_page(META_MAPPING(sbi),
 201                                                fio.new_blkaddr, false);
 202                if (!page)
 203                        continue;
 204                if (PageUptodate(page)) {
 205                        f2fs_put_page(page, 1);
 206                        continue;
 207                }
 208
 209                fio.page = page;
 210                fio.old_blkaddr = fio.new_blkaddr;
 211                f2fs_submit_page_mbio(&fio);
 212                f2fs_put_page(page, 0);
 213        }
 214out:
 215        f2fs_submit_merged_bio(sbi, META, READ);
 216        blk_finish_plug(&plug);
 217        return blkno - start;
 218}
 219
 220void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
 221{
 222        struct page *page;
 223        bool readahead = false;
 224
 225        page = find_get_page(META_MAPPING(sbi), index);
 226        if (!page || !PageUptodate(page))
 227                readahead = true;
 228        f2fs_put_page(page, 0);
 229
 230        if (readahead)
 231                ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR, true);
 232}
 233
 234static int f2fs_write_meta_page(struct page *page,
 235                                struct writeback_control *wbc)
 236{
 237        struct f2fs_sb_info *sbi = F2FS_P_SB(page);
 238
 239        trace_f2fs_writepage(page, META);
 240
 241        if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 242                goto redirty_out;
 243        if (wbc->for_reclaim && page->index < GET_SUM_BLOCK(sbi, 0))
 244                goto redirty_out;
 245        if (unlikely(f2fs_cp_error(sbi)))
 246                goto redirty_out;
 247
 248        write_meta_page(sbi, page);
 249        dec_page_count(sbi, F2FS_DIRTY_META);
 250
 251        if (wbc->for_reclaim)
 252                f2fs_submit_merged_bio_cond(sbi, NULL, page, 0, META, WRITE);
 253
 254        unlock_page(page);
 255
 256        if (unlikely(f2fs_cp_error(sbi)))
 257                f2fs_submit_merged_bio(sbi, META, WRITE);
 258
 259        return 0;
 260
 261redirty_out:
 262        redirty_page_for_writepage(wbc, page);
 263        return AOP_WRITEPAGE_ACTIVATE;
 264}
 265
 266static int f2fs_write_meta_pages(struct address_space *mapping,
 267                                struct writeback_control *wbc)
 268{
 269        struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
 270        long diff, written;
 271
 272        /* 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
 277        trace_f2fs_writepages(mapping->host, wbc, META);
 278
 279        /* if mounting is failed, skip writing node pages */
 280        mutex_lock(&sbi->cp_mutex);
 281        diff = nr_pages_to_write(sbi, META, wbc);
 282        written = sync_meta_pages(sbi, META, wbc->nr_to_write);
 283        mutex_unlock(&sbi->cp_mutex);
 284        wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff);
 285        return 0;
 286
 287skip_write:
 288        wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_META);
 289        trace_f2fs_writepages(mapping->host, wbc, META);
 290        return 0;
 291}
 292
 293long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
 294                                                long nr_to_write)
 295{
 296        struct address_space *mapping = META_MAPPING(sbi);
 297        pgoff_t index = 0, end = ULONG_MAX, prev = ULONG_MAX;
 298        struct pagevec pvec;
 299        long nwritten = 0;
 300        struct writeback_control wbc = {
 301                .for_reclaim = 0,
 302        };
 303        struct blk_plug plug;
 304
 305        pagevec_init(&pvec, 0);
 306
 307        blk_start_plug(&plug);
 308
 309        while (index <= end) {
 310                int i, nr_pages;
 311                nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
 312                                PAGECACHE_TAG_DIRTY,
 313                                min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
 314                if (unlikely(nr_pages == 0))
 315                        break;
 316
 317                for (i = 0; i < nr_pages; i++) {
 318                        struct page *page = pvec.pages[i];
 319
 320                        if (prev == ULONG_MAX)
 321                                prev = page->index - 1;
 322                        if (nr_to_write != LONG_MAX && page->index != prev + 1) {
 323                                pagevec_release(&pvec);
 324                                goto stop;
 325                        }
 326
 327                        lock_page(page);
 328
 329                        if (unlikely(page->mapping != mapping)) {
 330continue_unlock:
 331                                unlock_page(page);
 332                                continue;
 333                        }
 334                        if (!PageDirty(page)) {
 335                                /* someone wrote it for us */
 336                                goto continue_unlock;
 337                        }
 338
 339                        f2fs_wait_on_page_writeback(page, META, true);
 340
 341                        BUG_ON(PageWriteback(page));
 342                        if (!clear_page_dirty_for_io(page))
 343                                goto continue_unlock;
 344
 345                        if (mapping->a_ops->writepage(page, &wbc)) {
 346                                unlock_page(page);
 347                                break;
 348                        }
 349                        nwritten++;
 350                        prev = page->index;
 351                        if (unlikely(nwritten >= nr_to_write))
 352                                break;
 353                }
 354                pagevec_release(&pvec);
 355                cond_resched();
 356        }
 357stop:
 358        if (nwritten)
 359                f2fs_submit_merged_bio(sbi, type, WRITE);
 360
 361        blk_finish_plug(&plug);
 362
 363        return nwritten;
 364}
 365
 366static int f2fs_set_meta_page_dirty(struct page *page)
 367{
 368        trace_f2fs_set_page_dirty(page, META);
 369
 370        if (!PageUptodate(page))
 371                SetPageUptodate(page);
 372        if (!PageDirty(page)) {
 373                f2fs_set_page_dirty_nobuffers(page);
 374                inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_META);
 375                SetPagePrivate(page);
 376                f2fs_trace_pid(page);
 377                return 1;
 378        }
 379        return 0;
 380}
 381
 382const struct address_space_operations f2fs_meta_aops = {
 383        .writepage      = f2fs_write_meta_page,
 384        .writepages     = f2fs_write_meta_pages,
 385        .set_page_dirty = f2fs_set_meta_page_dirty,
 386        .invalidatepage = f2fs_invalidate_page,
 387        .releasepage    = f2fs_release_page,
 388#ifdef CONFIG_MIGRATION
 389        .migratepage    = f2fs_migrate_page,
 390#endif
 391};
 392
 393static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 394{
 395        struct inode_management *im = &sbi->im[type];
 396        struct ino_entry *e, *tmp;
 397
 398        tmp = f2fs_kmem_cache_alloc(ino_entry_slab, GFP_NOFS);
 399retry:
 400        radix_tree_preload(GFP_NOFS | __GFP_NOFAIL);
 401
 402        spin_lock(&im->ino_lock);
 403        e = radix_tree_lookup(&im->ino_root, ino);
 404        if (!e) {
 405                e = tmp;
 406                if (radix_tree_insert(&im->ino_root, ino, e)) {
 407                        spin_unlock(&im->ino_lock);
 408                        radix_tree_preload_end();
 409                        goto retry;
 410                }
 411                memset(e, 0, sizeof(struct ino_entry));
 412                e->ino = ino;
 413
 414                list_add_tail(&e->list, &im->ino_list);
 415                if (type != ORPHAN_INO)
 416                        im->ino_num++;
 417        }
 418        spin_unlock(&im->ino_lock);
 419        radix_tree_preload_end();
 420
 421        if (e != tmp)
 422                kmem_cache_free(ino_entry_slab, tmp);
 423}
 424
 425static void __remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 426{
 427        struct inode_management *im = &sbi->im[type];
 428        struct ino_entry *e;
 429
 430        spin_lock(&im->ino_lock);
 431        e = radix_tree_lookup(&im->ino_root, ino);
 432        if (e) {
 433                list_del(&e->list);
 434                radix_tree_delete(&im->ino_root, ino);
 435                im->ino_num--;
 436                spin_unlock(&im->ino_lock);
 437                kmem_cache_free(ino_entry_slab, e);
 438                return;
 439        }
 440        spin_unlock(&im->ino_lock);
 441}
 442
 443void add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 444{
 445        /* add new dirty ino entry into list */
 446        __add_ino_entry(sbi, ino, type);
 447}
 448
 449void remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 450{
 451        /* remove dirty ino entry from list */
 452        __remove_ino_entry(sbi, ino, type);
 453}
 454
 455/* mode should be APPEND_INO or UPDATE_INO */
 456bool exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode)
 457{
 458        struct inode_management *im = &sbi->im[mode];
 459        struct ino_entry *e;
 460
 461        spin_lock(&im->ino_lock);
 462        e = radix_tree_lookup(&im->ino_root, ino);
 463        spin_unlock(&im->ino_lock);
 464        return e ? true : false;
 465}
 466
 467void release_ino_entry(struct f2fs_sb_info *sbi, bool all)
 468{
 469        struct ino_entry *e, *tmp;
 470        int i;
 471
 472        for (i = all ? ORPHAN_INO: APPEND_INO; i <= UPDATE_INO; i++) {
 473                struct inode_management *im = &sbi->im[i];
 474
 475                spin_lock(&im->ino_lock);
 476                list_for_each_entry_safe(e, tmp, &im->ino_list, list) {
 477                        list_del(&e->list);
 478                        radix_tree_delete(&im->ino_root, e->ino);
 479                        kmem_cache_free(ino_entry_slab, e);
 480                        im->ino_num--;
 481                }
 482                spin_unlock(&im->ino_lock);
 483        }
 484}
 485
 486int acquire_orphan_inode(struct f2fs_sb_info *sbi)
 487{
 488        struct inode_management *im = &sbi->im[ORPHAN_INO];
 489        int err = 0;
 490
 491        spin_lock(&im->ino_lock);
 492
 493#ifdef CONFIG_F2FS_FAULT_INJECTION
 494        if (time_to_inject(sbi, FAULT_ORPHAN)) {
 495                spin_unlock(&im->ino_lock);
 496                return -ENOSPC;
 497        }
 498#endif
 499        if (unlikely(im->ino_num >= sbi->max_orphans))
 500                err = -ENOSPC;
 501        else
 502                im->ino_num++;
 503        spin_unlock(&im->ino_lock);
 504
 505        return err;
 506}
 507
 508void release_orphan_inode(struct f2fs_sb_info *sbi)
 509{
 510        struct inode_management *im = &sbi->im[ORPHAN_INO];
 511
 512        spin_lock(&im->ino_lock);
 513        f2fs_bug_on(sbi, im->ino_num == 0);
 514        im->ino_num--;
 515        spin_unlock(&im->ino_lock);
 516}
 517
 518void add_orphan_inode(struct inode *inode)
 519{
 520        /* add new orphan ino entry into list */
 521        __add_ino_entry(F2FS_I_SB(inode), inode->i_ino, ORPHAN_INO);
 522        update_inode_page(inode);
 523}
 524
 525void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
 526{
 527        /* remove orphan entry from orphan list */
 528        __remove_ino_entry(sbi, ino, ORPHAN_INO);
 529}
 530
 531static int recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
 532{
 533        struct inode *inode;
 534        struct node_info ni;
 535        int err = acquire_orphan_inode(sbi);
 536
 537        if (err) {
 538                set_sbi_flag(sbi, SBI_NEED_FSCK);
 539                f2fs_msg(sbi->sb, KERN_WARNING,
 540                                "%s: orphan failed (ino=%x), run fsck to fix.",
 541                                __func__, ino);
 542                return err;
 543        }
 544
 545        __add_ino_entry(sbi, ino, ORPHAN_INO);
 546
 547        inode = f2fs_iget_retry(sbi->sb, ino);
 548        if (IS_ERR(inode)) {
 549                /*
 550                 * there should be a bug that we can't find the entry
 551                 * to orphan inode.
 552                 */
 553                f2fs_bug_on(sbi, PTR_ERR(inode) == -ENOENT);
 554                return PTR_ERR(inode);
 555        }
 556
 557        clear_nlink(inode);
 558
 559        /* truncate all the data during iput */
 560        iput(inode);
 561
 562        get_node_info(sbi, ino, &ni);
 563
 564        /* ENOMEM was fully retried in f2fs_evict_inode. */
 565        if (ni.blk_addr != NULL_ADDR) {
 566                set_sbi_flag(sbi, SBI_NEED_FSCK);
 567                f2fs_msg(sbi->sb, KERN_WARNING,
 568                        "%s: orphan failed (ino=%x), run fsck to fix.",
 569                                __func__, ino);
 570                return -EIO;
 571        }
 572        __remove_ino_entry(sbi, ino, ORPHAN_INO);
 573        return 0;
 574}
 575
 576int recover_orphan_inodes(struct f2fs_sb_info *sbi)
 577{
 578        block_t start_blk, orphan_blocks, i, j;
 579        int err;
 580
 581        if (!is_set_ckpt_flags(sbi, CP_ORPHAN_PRESENT_FLAG))
 582                return 0;
 583
 584        start_blk = __start_cp_addr(sbi) + 1 + __cp_payload(sbi);
 585        orphan_blocks = __start_sum_addr(sbi) - 1 - __cp_payload(sbi);
 586
 587        ra_meta_pages(sbi, start_blk, orphan_blocks, META_CP, true);
 588
 589        for (i = 0; i < orphan_blocks; i++) {
 590                struct page *page = get_meta_page(sbi, start_blk + i);
 591                struct f2fs_orphan_block *orphan_blk;
 592
 593                orphan_blk = (struct f2fs_orphan_block *)page_address(page);
 594                for (j = 0; j < le32_to_cpu(orphan_blk->entry_count); j++) {
 595                        nid_t ino = le32_to_cpu(orphan_blk->ino[j]);
 596                        err = recover_orphan_inode(sbi, ino);
 597                        if (err) {
 598                                f2fs_put_page(page, 1);
 599                                return err;
 600                        }
 601                }
 602                f2fs_put_page(page, 1);
 603        }
 604        /* clear Orphan Flag */
 605        clear_ckpt_flags(sbi, CP_ORPHAN_PRESENT_FLAG);
 606        return 0;
 607}
 608
 609static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
 610{
 611        struct list_head *head;
 612        struct f2fs_orphan_block *orphan_blk = NULL;
 613        unsigned int nentries = 0;
 614        unsigned short index = 1;
 615        unsigned short orphan_blocks;
 616        struct page *page = NULL;
 617        struct ino_entry *orphan = NULL;
 618        struct inode_management *im = &sbi->im[ORPHAN_INO];
 619
 620        orphan_blocks = GET_ORPHAN_BLOCKS(im->ino_num);
 621
 622        /*
 623         * we don't need to do spin_lock(&im->ino_lock) here, since all the
 624         * orphan inode operations are covered under f2fs_lock_op().
 625         * And, spin_lock should be avoided due to page operations below.
 626         */
 627        head = &im->ino_list;
 628
 629        /* loop for each orphan inode entry and write them in Jornal block */
 630        list_for_each_entry(orphan, head, list) {
 631                if (!page) {
 632                        page = grab_meta_page(sbi, start_blk++);
 633                        orphan_blk =
 634                                (struct f2fs_orphan_block *)page_address(page);
 635                        memset(orphan_blk, 0, sizeof(*orphan_blk));
 636                }
 637
 638                orphan_blk->ino[nentries++] = cpu_to_le32(orphan->ino);
 639
 640                if (nentries == F2FS_ORPHANS_PER_BLOCK) {
 641                        /*
 642                         * an orphan block is full of 1020 entries,
 643                         * then we need to flush current orphan blocks
 644                         * and bring another one in memory
 645                         */
 646                        orphan_blk->blk_addr = cpu_to_le16(index);
 647                        orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
 648                        orphan_blk->entry_count = cpu_to_le32(nentries);
 649                        set_page_dirty(page);
 650                        f2fs_put_page(page, 1);
 651                        index++;
 652                        nentries = 0;
 653                        page = NULL;
 654                }
 655        }
 656
 657        if (page) {
 658                orphan_blk->blk_addr = cpu_to_le16(index);
 659                orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
 660                orphan_blk->entry_count = cpu_to_le32(nentries);
 661                set_page_dirty(page);
 662                f2fs_put_page(page, 1);
 663        }
 664}
 665
 666static int get_checkpoint_version(struct f2fs_sb_info *sbi, block_t cp_addr,
 667                struct f2fs_checkpoint **cp_block, struct page **cp_page,
 668                unsigned long long *version)
 669{
 670        unsigned long blk_size = sbi->blocksize;
 671        size_t crc_offset = 0;
 672        __u32 crc = 0;
 673
 674        *cp_page = get_meta_page(sbi, cp_addr);
 675        *cp_block = (struct f2fs_checkpoint *)page_address(*cp_page);
 676
 677        crc_offset = le32_to_cpu((*cp_block)->checksum_offset);
 678        if (crc_offset >= blk_size) {
 679                f2fs_msg(sbi->sb, KERN_WARNING,
 680                        "invalid crc_offset: %zu", crc_offset);
 681                return -EINVAL;
 682        }
 683
 684        crc = le32_to_cpu(*((__le32 *)((unsigned char *)*cp_block
 685                                                        + crc_offset)));
 686        if (!f2fs_crc_valid(sbi, crc, *cp_block, crc_offset)) {
 687                f2fs_msg(sbi->sb, KERN_WARNING, "invalid crc value");
 688                return -EINVAL;
 689        }
 690
 691        *version = cur_cp_version(*cp_block);
 692        return 0;
 693}
 694
 695static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
 696                                block_t cp_addr, unsigned long long *version)
 697{
 698        struct page *cp_page_1 = NULL, *cp_page_2 = NULL;
 699        struct f2fs_checkpoint *cp_block = NULL;
 700        unsigned long long cur_version = 0, pre_version = 0;
 701        int err;
 702
 703        err = get_checkpoint_version(sbi, cp_addr, &cp_block,
 704                                        &cp_page_1, version);
 705        if (err)
 706                goto invalid_cp1;
 707        pre_version = *version;
 708
 709        cp_addr += le32_to_cpu(cp_block->cp_pack_total_block_count) - 1;
 710        err = get_checkpoint_version(sbi, cp_addr, &cp_block,
 711                                        &cp_page_2, version);
 712        if (err)
 713                goto invalid_cp2;
 714        cur_version = *version;
 715
 716        if (cur_version == pre_version) {
 717                *version = cur_version;
 718                f2fs_put_page(cp_page_2, 1);
 719                return cp_page_1;
 720        }
 721invalid_cp2:
 722        f2fs_put_page(cp_page_2, 1);
 723invalid_cp1:
 724        f2fs_put_page(cp_page_1, 1);
 725        return NULL;
 726}
 727
 728int get_valid_checkpoint(struct f2fs_sb_info *sbi)
 729{
 730        struct f2fs_checkpoint *cp_block;
 731        struct f2fs_super_block *fsb = sbi->raw_super;
 732        struct page *cp1, *cp2, *cur_page;
 733        unsigned long blk_size = sbi->blocksize;
 734        unsigned long long cp1_version = 0, cp2_version = 0;
 735        unsigned long long cp_start_blk_no;
 736        unsigned int cp_blks = 1 + __cp_payload(sbi);
 737        block_t cp_blk_no;
 738        int i;
 739
 740        sbi->ckpt = kzalloc(cp_blks * blk_size, GFP_KERNEL);
 741        if (!sbi->ckpt)
 742                return -ENOMEM;
 743        /*
 744         * Finding out valid cp block involves read both
 745         * sets( cp pack1 and cp pack 2)
 746         */
 747        cp_start_blk_no = le32_to_cpu(fsb->cp_blkaddr);
 748        cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version);
 749
 750        /* The second checkpoint pack should start at the next segment */
 751        cp_start_blk_no += ((unsigned long long)1) <<
 752                                le32_to_cpu(fsb->log_blocks_per_seg);
 753        cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version);
 754
 755        if (cp1 && cp2) {
 756                if (ver_after(cp2_version, cp1_version))
 757                        cur_page = cp2;
 758                else
 759                        cur_page = cp1;
 760        } else if (cp1) {
 761                cur_page = cp1;
 762        } else if (cp2) {
 763                cur_page = cp2;
 764        } else {
 765                goto fail_no_cp;
 766        }
 767
 768        cp_block = (struct f2fs_checkpoint *)page_address(cur_page);
 769        memcpy(sbi->ckpt, cp_block, blk_size);
 770
 771        /* Sanity checking of checkpoint */
 772        if (sanity_check_ckpt(sbi))
 773                goto fail_no_cp;
 774
 775        if (cp_blks <= 1)
 776                goto done;
 777
 778        cp_blk_no = le32_to_cpu(fsb->cp_blkaddr);
 779        if (cur_page == cp2)
 780                cp_blk_no += 1 << le32_to_cpu(fsb->log_blocks_per_seg);
 781
 782        for (i = 1; i < cp_blks; i++) {
 783                void *sit_bitmap_ptr;
 784                unsigned char *ckpt = (unsigned char *)sbi->ckpt;
 785
 786                cur_page = get_meta_page(sbi, cp_blk_no + i);
 787                sit_bitmap_ptr = page_address(cur_page);
 788                memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
 789                f2fs_put_page(cur_page, 1);
 790        }
 791done:
 792        f2fs_put_page(cp1, 1);
 793        f2fs_put_page(cp2, 1);
 794        return 0;
 795
 796fail_no_cp:
 797        kfree(sbi->ckpt);
 798        return -EINVAL;
 799}
 800
 801static void __add_dirty_inode(struct inode *inode, enum inode_type type)
 802{
 803        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 804        int flag = (type == DIR_INODE) ? FI_DIRTY_DIR : FI_DIRTY_FILE;
 805
 806        if (is_inode_flag_set(inode, flag))
 807                return;
 808
 809        set_inode_flag(inode, flag);
 810        list_add_tail(&F2FS_I(inode)->dirty_list, &sbi->inode_list[type]);
 811        stat_inc_dirty_inode(sbi, type);
 812}
 813
 814static void __remove_dirty_inode(struct inode *inode, enum inode_type type)
 815{
 816        int flag = (type == DIR_INODE) ? FI_DIRTY_DIR : FI_DIRTY_FILE;
 817
 818        if (get_dirty_pages(inode) || !is_inode_flag_set(inode, flag))
 819                return;
 820
 821        list_del_init(&F2FS_I(inode)->dirty_list);
 822        clear_inode_flag(inode, flag);
 823        stat_dec_dirty_inode(F2FS_I_SB(inode), type);
 824}
 825
 826void update_dirty_page(struct inode *inode, struct page *page)
 827{
 828        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 829        enum inode_type type = S_ISDIR(inode->i_mode) ? DIR_INODE : FILE_INODE;
 830
 831        if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) &&
 832                        !S_ISLNK(inode->i_mode))
 833                return;
 834
 835        spin_lock(&sbi->inode_lock[type]);
 836        if (type != FILE_INODE || test_opt(sbi, DATA_FLUSH))
 837                __add_dirty_inode(inode, type);
 838        inode_inc_dirty_pages(inode);
 839        spin_unlock(&sbi->inode_lock[type]);
 840
 841        SetPagePrivate(page);
 842        f2fs_trace_pid(page);
 843}
 844
 845void remove_dirty_inode(struct inode *inode)
 846{
 847        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 848        enum inode_type type = S_ISDIR(inode->i_mode) ? DIR_INODE : FILE_INODE;
 849
 850        if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) &&
 851                        !S_ISLNK(inode->i_mode))
 852                return;
 853
 854        if (type == FILE_INODE && !test_opt(sbi, DATA_FLUSH))
 855                return;
 856
 857        spin_lock(&sbi->inode_lock[type]);
 858        __remove_dirty_inode(inode, type);
 859        spin_unlock(&sbi->inode_lock[type]);
 860}
 861
 862int sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type)
 863{
 864        struct list_head *head;
 865        struct inode *inode;
 866        struct f2fs_inode_info *fi;
 867        bool is_dir = (type == DIR_INODE);
 868
 869        trace_f2fs_sync_dirty_inodes_enter(sbi->sb, is_dir,
 870                                get_pages(sbi, is_dir ?
 871                                F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA));
 872retry:
 873        if (unlikely(f2fs_cp_error(sbi)))
 874                return -EIO;
 875
 876        spin_lock(&sbi->inode_lock[type]);
 877
 878        head = &sbi->inode_list[type];
 879        if (list_empty(head)) {
 880                spin_unlock(&sbi->inode_lock[type]);
 881                trace_f2fs_sync_dirty_inodes_exit(sbi->sb, is_dir,
 882                                get_pages(sbi, is_dir ?
 883                                F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA));
 884                return 0;
 885        }
 886        fi = list_entry(head->next, struct f2fs_inode_info, dirty_list);
 887        inode = igrab(&fi->vfs_inode);
 888        spin_unlock(&sbi->inode_lock[type]);
 889        if (inode) {
 890                filemap_fdatawrite(inode->i_mapping);
 891                iput(inode);
 892        } else {
 893                /*
 894                 * We should submit bio, since it exists several
 895                 * wribacking dentry pages in the freeing inode.
 896                 */
 897                f2fs_submit_merged_bio(sbi, DATA, WRITE);
 898                cond_resched();
 899        }
 900        goto retry;
 901}
 902
 903int f2fs_sync_inode_meta(struct f2fs_sb_info *sbi)
 904{
 905        struct list_head *head = &sbi->inode_list[DIRTY_META];
 906        struct inode *inode;
 907        struct f2fs_inode_info *fi;
 908        s64 total = get_pages(sbi, F2FS_DIRTY_IMETA);
 909
 910        while (total--) {
 911                if (unlikely(f2fs_cp_error(sbi)))
 912                        return -EIO;
 913
 914                spin_lock(&sbi->inode_lock[DIRTY_META]);
 915                if (list_empty(head)) {
 916                        spin_unlock(&sbi->inode_lock[DIRTY_META]);
 917                        return 0;
 918                }
 919                fi = list_entry(head->next, struct f2fs_inode_info,
 920                                                        gdirty_list);
 921                inode = igrab(&fi->vfs_inode);
 922                spin_unlock(&sbi->inode_lock[DIRTY_META]);
 923                if (inode) {
 924                        update_inode_page(inode);
 925                        iput(inode);
 926                }
 927        };
 928        return 0;
 929}
 930
 931/*
 932 * Freeze all the FS-operations for checkpoint.
 933 */
 934static int block_operations(struct f2fs_sb_info *sbi)
 935{
 936        struct writeback_control wbc = {
 937                .sync_mode = WB_SYNC_ALL,
 938                .nr_to_write = LONG_MAX,
 939                .for_reclaim = 0,
 940        };
 941        struct blk_plug plug;
 942        int err = 0;
 943
 944        blk_start_plug(&plug);
 945
 946retry_flush_dents:
 947        f2fs_lock_all(sbi);
 948        /* write all the dirty dentry pages */
 949        if (get_pages(sbi, F2FS_DIRTY_DENTS)) {
 950                f2fs_unlock_all(sbi);
 951                err = sync_dirty_inodes(sbi, DIR_INODE);
 952                if (err)
 953                        goto out;
 954                goto retry_flush_dents;
 955        }
 956
 957        if (get_pages(sbi, F2FS_DIRTY_IMETA)) {
 958                f2fs_unlock_all(sbi);
 959                err = f2fs_sync_inode_meta(sbi);
 960                if (err)
 961                        goto out;
 962                goto retry_flush_dents;
 963        }
 964
 965        /*
 966         * POR: we should ensure that there are no dirty node pages
 967         * until finishing nat/sit flush.
 968         */
 969retry_flush_nodes:
 970        down_write(&sbi->node_write);
 971
 972        if (get_pages(sbi, F2FS_DIRTY_NODES)) {
 973                up_write(&sbi->node_write);
 974                err = sync_node_pages(sbi, &wbc);
 975                if (err) {
 976                        f2fs_unlock_all(sbi);
 977                        goto out;
 978                }
 979                goto retry_flush_nodes;
 980        }
 981out:
 982        blk_finish_plug(&plug);
 983        return err;
 984}
 985
 986static void unblock_operations(struct f2fs_sb_info *sbi)
 987{
 988        up_write(&sbi->node_write);
 989
 990        build_free_nids(sbi);
 991        f2fs_unlock_all(sbi);
 992}
 993
 994static void wait_on_all_pages_writeback(struct f2fs_sb_info *sbi)
 995{
 996        DEFINE_WAIT(wait);
 997
 998        for (;;) {
 999                prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
1000
1001                if (!atomic_read(&sbi->nr_wb_bios))
1002                        break;
1003
1004                io_schedule_timeout(5*HZ);
1005        }
1006        finish_wait(&sbi->cp_wait, &wait);
1007}
1008
1009static void update_ckpt_flags(struct f2fs_sb_info *sbi, struct cp_control *cpc)
1010{
1011        unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
1012        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1013
1014        spin_lock(&sbi->cp_lock);
1015
1016        if (cpc->reason == CP_UMOUNT)
1017                __set_ckpt_flags(ckpt, CP_UMOUNT_FLAG);
1018        else
1019                __clear_ckpt_flags(ckpt, CP_UMOUNT_FLAG);
1020
1021        if (cpc->reason == CP_FASTBOOT)
1022                __set_ckpt_flags(ckpt, CP_FASTBOOT_FLAG);
1023        else
1024                __clear_ckpt_flags(ckpt, CP_FASTBOOT_FLAG);
1025
1026        if (orphan_num)
1027                __set_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
1028        else
1029                __clear_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
1030
1031        if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
1032                __set_ckpt_flags(ckpt, CP_FSCK_FLAG);
1033
1034        /* set this flag to activate crc|cp_ver for recovery */
1035        __set_ckpt_flags(ckpt, CP_CRC_RECOVERY_FLAG);
1036
1037        spin_unlock(&sbi->cp_lock);
1038}
1039
1040static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
1041{
1042        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1043        struct f2fs_nm_info *nm_i = NM_I(sbi);
1044        unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
1045        nid_t last_nid = nm_i->next_scan_nid;
1046        block_t start_blk;
1047        unsigned int data_sum_blocks, orphan_blocks;
1048        __u32 crc32 = 0;
1049        int i;
1050        int cp_payload_blks = __cp_payload(sbi);
1051        struct super_block *sb = sbi->sb;
1052        struct curseg_info *seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
1053        u64 kbytes_written;
1054
1055        /* Flush all the NAT/SIT pages */
1056        while (get_pages(sbi, F2FS_DIRTY_META)) {
1057                sync_meta_pages(sbi, META, LONG_MAX);
1058                if (unlikely(f2fs_cp_error(sbi)))
1059                        return -EIO;
1060        }
1061
1062        next_free_nid(sbi, &last_nid);
1063
1064        /*
1065         * modify checkpoint
1066         * version number is already updated
1067         */
1068        ckpt->elapsed_time = cpu_to_le64(get_mtime(sbi));
1069        ckpt->valid_block_count = cpu_to_le64(valid_user_blocks(sbi));
1070        ckpt->free_segment_count = cpu_to_le32(free_segments(sbi));
1071        for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
1072                ckpt->cur_node_segno[i] =
1073                        cpu_to_le32(curseg_segno(sbi, i + CURSEG_HOT_NODE));
1074                ckpt->cur_node_blkoff[i] =
1075                        cpu_to_le16(curseg_blkoff(sbi, i + CURSEG_HOT_NODE));
1076                ckpt->alloc_type[i + CURSEG_HOT_NODE] =
1077                                curseg_alloc_type(sbi, i + CURSEG_HOT_NODE);
1078        }
1079        for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
1080                ckpt->cur_data_segno[i] =
1081                        cpu_to_le32(curseg_segno(sbi, i + CURSEG_HOT_DATA));
1082                ckpt->cur_data_blkoff[i] =
1083                        cpu_to_le16(curseg_blkoff(sbi, i + CURSEG_HOT_DATA));
1084                ckpt->alloc_type[i + CURSEG_HOT_DATA] =
1085                                curseg_alloc_type(sbi, i + CURSEG_HOT_DATA);
1086        }
1087
1088        ckpt->valid_node_count = cpu_to_le32(valid_node_count(sbi));
1089        ckpt->valid_inode_count = cpu_to_le32(valid_inode_count(sbi));
1090        ckpt->next_free_nid = cpu_to_le32(last_nid);
1091
1092        /* 2 cp  + n data seg summary + orphan inode blocks */
1093        data_sum_blocks = npages_for_summary_flush(sbi, false);
1094        spin_lock(&sbi->cp_lock);
1095        if (data_sum_blocks < NR_CURSEG_DATA_TYPE)
1096                __set_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
1097        else
1098                __clear_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
1099        spin_unlock(&sbi->cp_lock);
1100
1101        orphan_blocks = GET_ORPHAN_BLOCKS(orphan_num);
1102        ckpt->cp_pack_start_sum = cpu_to_le32(1 + cp_payload_blks +
1103                        orphan_blocks);
1104
1105        if (__remain_node_summaries(cpc->reason))
1106                ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS+
1107                                cp_payload_blks + data_sum_blocks +
1108                                orphan_blocks + NR_CURSEG_NODE_TYPE);
1109        else
1110                ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS +
1111                                cp_payload_blks + data_sum_blocks +
1112                                orphan_blocks);
1113
1114        /* update ckpt flag for checkpoint */
1115        update_ckpt_flags(sbi, cpc);
1116
1117        /* update SIT/NAT bitmap */
1118        get_sit_bitmap(sbi, __bitmap_ptr(sbi, SIT_BITMAP));
1119        get_nat_bitmap(sbi, __bitmap_ptr(sbi, NAT_BITMAP));
1120
1121        crc32 = f2fs_crc32(sbi, ckpt, le32_to_cpu(ckpt->checksum_offset));
1122        *((__le32 *)((unsigned char *)ckpt +
1123                                le32_to_cpu(ckpt->checksum_offset)))
1124                                = cpu_to_le32(crc32);
1125
1126        start_blk = __start_cp_addr(sbi);
1127
1128        /* need to wait for end_io results */
1129        wait_on_all_pages_writeback(sbi);
1130        if (unlikely(f2fs_cp_error(sbi)))
1131                return -EIO;
1132
1133        /* write out checkpoint buffer at block 0 */
1134        update_meta_page(sbi, ckpt, start_blk++);
1135
1136        for (i = 1; i < 1 + cp_payload_blks; i++)
1137                update_meta_page(sbi, (char *)ckpt + i * F2FS_BLKSIZE,
1138                                                        start_blk++);
1139
1140        if (orphan_num) {
1141                write_orphan_inodes(sbi, start_blk);
1142                start_blk += orphan_blocks;
1143        }
1144
1145        write_data_summaries(sbi, start_blk);
1146        start_blk += data_sum_blocks;
1147
1148        /* Record write statistics in the hot node summary */
1149        kbytes_written = sbi->kbytes_written;
1150        if (sb->s_bdev->bd_part)
1151                kbytes_written += BD_PART_WRITTEN(sbi);
1152
1153        seg_i->journal->info.kbytes_written = cpu_to_le64(kbytes_written);
1154
1155        if (__remain_node_summaries(cpc->reason)) {
1156                write_node_summaries(sbi, start_blk);
1157                start_blk += NR_CURSEG_NODE_TYPE;
1158        }
1159
1160        /* writeout checkpoint block */
1161        update_meta_page(sbi, ckpt, start_blk);
1162
1163        /* wait for previous submitted node/meta pages writeback */
1164        wait_on_all_pages_writeback(sbi);
1165
1166        if (unlikely(f2fs_cp_error(sbi)))
1167                return -EIO;
1168
1169        filemap_fdatawait_range(NODE_MAPPING(sbi), 0, LLONG_MAX);
1170        filemap_fdatawait_range(META_MAPPING(sbi), 0, LLONG_MAX);
1171
1172        /* update user_block_counts */
1173        sbi->last_valid_block_count = sbi->total_valid_block_count;
1174        percpu_counter_set(&sbi->alloc_valid_block_count, 0);
1175
1176        /* Here, we only have one bio having CP pack */
1177        sync_meta_pages(sbi, META_FLUSH, LONG_MAX);
1178
1179        /* wait for previous submitted meta pages writeback */
1180        wait_on_all_pages_writeback(sbi);
1181
1182        release_ino_entry(sbi, false);
1183
1184        if (unlikely(f2fs_cp_error(sbi)))
1185                return -EIO;
1186
1187        clear_prefree_segments(sbi, cpc);
1188        clear_sbi_flag(sbi, SBI_IS_DIRTY);
1189        clear_sbi_flag(sbi, SBI_NEED_CP);
1190
1191        /*
1192         * redirty superblock if metadata like node page or inode cache is
1193         * updated during writing checkpoint.
1194         */
1195        if (get_pages(sbi, F2FS_DIRTY_NODES) ||
1196                        get_pages(sbi, F2FS_DIRTY_IMETA))
1197                set_sbi_flag(sbi, SBI_IS_DIRTY);
1198
1199        f2fs_bug_on(sbi, get_pages(sbi, F2FS_DIRTY_DENTS));
1200
1201        return 0;
1202}
1203
1204/*
1205 * We guarantee that this checkpoint procedure will not fail.
1206 */
1207int write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
1208{
1209        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1210        unsigned long long ckpt_ver;
1211        int err = 0;
1212
1213        mutex_lock(&sbi->cp_mutex);
1214
1215        if (!is_sbi_flag_set(sbi, SBI_IS_DIRTY) &&
1216                (cpc->reason == CP_FASTBOOT || cpc->reason == CP_SYNC ||
1217                (cpc->reason == CP_DISCARD && !sbi->discard_blks)))
1218                goto out;
1219        if (unlikely(f2fs_cp_error(sbi))) {
1220                err = -EIO;
1221                goto out;
1222        }
1223        if (f2fs_readonly(sbi->sb)) {
1224                err = -EROFS;
1225                goto out;
1226        }
1227
1228        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "start block_ops");
1229
1230        err = block_operations(sbi);
1231        if (err)
1232                goto out;
1233
1234        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish block_ops");
1235
1236        f2fs_flush_merged_bios(sbi);
1237
1238        /* this is the case of multiple fstrims without any changes */
1239        if (cpc->reason == CP_DISCARD && !is_sbi_flag_set(sbi, SBI_IS_DIRTY)) {
1240                f2fs_bug_on(sbi, NM_I(sbi)->dirty_nat_cnt);
1241                f2fs_bug_on(sbi, SIT_I(sbi)->dirty_sentries);
1242                f2fs_bug_on(sbi, prefree_segments(sbi));
1243                flush_sit_entries(sbi, cpc);
1244                clear_prefree_segments(sbi, cpc);
1245                f2fs_wait_all_discard_bio(sbi);
1246                unblock_operations(sbi);
1247                goto out;
1248        }
1249
1250        /*
1251         * update checkpoint pack index
1252         * Increase the version number so that
1253         * SIT entries and seg summaries are written at correct place
1254         */
1255        ckpt_ver = cur_cp_version(ckpt);
1256        ckpt->checkpoint_ver = cpu_to_le64(++ckpt_ver);
1257
1258        /* write cached NAT/SIT entries to NAT/SIT area */
1259        flush_nat_entries(sbi);
1260        flush_sit_entries(sbi, cpc);
1261
1262        /* unlock all the fs_lock[] in do_checkpoint() */
1263        err = do_checkpoint(sbi, cpc);
1264
1265        f2fs_wait_all_discard_bio(sbi);
1266
1267        unblock_operations(sbi);
1268        stat_inc_cp_count(sbi->stat_info);
1269
1270        if (cpc->reason == CP_RECOVERY)
1271                f2fs_msg(sbi->sb, KERN_NOTICE,
1272                        "checkpoint: version = %llx", ckpt_ver);
1273
1274        /* do checkpoint periodically */
1275        f2fs_update_time(sbi, CP_TIME);
1276        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish checkpoint");
1277out:
1278        mutex_unlock(&sbi->cp_mutex);
1279        return err;
1280}
1281
1282void init_ino_entry_info(struct f2fs_sb_info *sbi)
1283{
1284        int i;
1285
1286        for (i = 0; i < MAX_INO_ENTRY; i++) {
1287                struct inode_management *im = &sbi->im[i];
1288
1289                INIT_RADIX_TREE(&im->ino_root, GFP_ATOMIC);
1290                spin_lock_init(&im->ino_lock);
1291                INIT_LIST_HEAD(&im->ino_list);
1292                im->ino_num = 0;
1293        }
1294
1295        sbi->max_orphans = (sbi->blocks_per_seg - F2FS_CP_PACKS -
1296                        NR_CURSEG_TYPE - __cp_payload(sbi)) *
1297                                F2FS_ORPHANS_PER_BLOCK;
1298}
1299
1300int __init create_checkpoint_caches(void)
1301{
1302        ino_entry_slab = f2fs_kmem_cache_create("f2fs_ino_entry",
1303                        sizeof(struct ino_entry));
1304        if (!ino_entry_slab)
1305                return -ENOMEM;
1306        inode_entry_slab = f2fs_kmem_cache_create("f2fs_inode_entry",
1307                        sizeof(struct inode_entry));
1308        if (!inode_entry_slab) {
1309                kmem_cache_destroy(ino_entry_slab);
1310                return -ENOMEM;
1311        }
1312        return 0;
1313}
1314
1315void destroy_checkpoint_caches(void)
1316{
1317        kmem_cache_destroy(ino_entry_slab);
1318        kmem_cache_destroy(inode_entry_slab);
1319}
1320