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
  29/*
  30 * We guarantee no failure on the returned page.
  31 */
  32struct page *grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
  33{
  34        struct address_space *mapping = META_MAPPING(sbi);
  35        struct page *page = NULL;
  36repeat:
  37        page = grab_cache_page(mapping, index);
  38        if (!page) {
  39                cond_resched();
  40                goto repeat;
  41        }
  42        f2fs_wait_on_page_writeback(page, META);
  43        SetPageUptodate(page);
  44        return page;
  45}
  46
  47/*
  48 * We guarantee no failure on the returned page.
  49 */
  50struct page *get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
  51{
  52        struct address_space *mapping = META_MAPPING(sbi);
  53        struct page *page;
  54        struct f2fs_io_info fio = {
  55                .type = META,
  56                .rw = READ_SYNC | REQ_META | REQ_PRIO,
  57                .blk_addr = index,
  58        };
  59repeat:
  60        page = grab_cache_page(mapping, index);
  61        if (!page) {
  62                cond_resched();
  63                goto repeat;
  64        }
  65        if (PageUptodate(page))
  66                goto out;
  67
  68        if (f2fs_submit_page_bio(sbi, page, &fio))
  69                goto repeat;
  70
  71        lock_page(page);
  72        if (unlikely(page->mapping != mapping)) {
  73                f2fs_put_page(page, 1);
  74                goto repeat;
  75        }
  76out:
  77        return page;
  78}
  79
  80static inline bool is_valid_blkaddr(struct f2fs_sb_info *sbi,
  81                                                block_t blkaddr, int type)
  82{
  83        switch (type) {
  84        case META_NAT:
  85                break;
  86        case META_SIT:
  87                if (unlikely(blkaddr >= SIT_BLK_CNT(sbi)))
  88                        return false;
  89                break;
  90        case META_SSA:
  91                if (unlikely(blkaddr >= MAIN_BLKADDR(sbi) ||
  92                        blkaddr < SM_I(sbi)->ssa_blkaddr))
  93                        return false;
  94                break;
  95        case META_CP:
  96                if (unlikely(blkaddr >= SIT_I(sbi)->sit_base_addr ||
  97                        blkaddr < __start_cp_addr(sbi)))
  98                        return false;
  99                break;
 100        case META_POR:
 101                if (unlikely(blkaddr >= MAX_BLKADDR(sbi) ||
 102                        blkaddr < MAIN_BLKADDR(sbi)))
 103                        return false;
 104                break;
 105        default:
 106                BUG();
 107        }
 108
 109        return true;
 110}
 111
 112/*
 113 * Readahead CP/NAT/SIT/SSA pages
 114 */
 115int ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages, int type)
 116{
 117        block_t prev_blk_addr = 0;
 118        struct page *page;
 119        block_t blkno = start;
 120        struct f2fs_io_info fio = {
 121                .type = META,
 122                .rw = READ_SYNC | REQ_META | REQ_PRIO
 123        };
 124
 125        for (; nrpages-- > 0; blkno++) {
 126
 127                if (!is_valid_blkaddr(sbi, blkno, type))
 128                        goto out;
 129
 130                switch (type) {
 131                case META_NAT:
 132                        if (unlikely(blkno >=
 133                                        NAT_BLOCK_OFFSET(NM_I(sbi)->max_nid)))
 134                                blkno = 0;
 135                        /* get nat block addr */
 136                        fio.blk_addr = current_nat_addr(sbi,
 137                                        blkno * NAT_ENTRY_PER_BLOCK);
 138                        break;
 139                case META_SIT:
 140                        /* get sit block addr */
 141                        fio.blk_addr = current_sit_addr(sbi,
 142                                        blkno * SIT_ENTRY_PER_BLOCK);
 143                        if (blkno != start && prev_blk_addr + 1 != fio.blk_addr)
 144                                goto out;
 145                        prev_blk_addr = fio.blk_addr;
 146                        break;
 147                case META_SSA:
 148                case META_CP:
 149                case META_POR:
 150                        fio.blk_addr = blkno;
 151                        break;
 152                default:
 153                        BUG();
 154                }
 155
 156                page = grab_cache_page(META_MAPPING(sbi), fio.blk_addr);
 157                if (!page)
 158                        continue;
 159                if (PageUptodate(page)) {
 160                        f2fs_put_page(page, 1);
 161                        continue;
 162                }
 163
 164                f2fs_submit_page_mbio(sbi, page, &fio);
 165                f2fs_put_page(page, 0);
 166        }
 167out:
 168        f2fs_submit_merged_bio(sbi, META, READ);
 169        return blkno - start;
 170}
 171
 172void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
 173{
 174        struct page *page;
 175        bool readahead = false;
 176
 177        page = find_get_page(META_MAPPING(sbi), index);
 178        if (!page || (page && !PageUptodate(page)))
 179                readahead = true;
 180        f2fs_put_page(page, 0);
 181
 182        if (readahead)
 183                ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR);
 184}
 185
 186static int f2fs_write_meta_page(struct page *page,
 187                                struct writeback_control *wbc)
 188{
 189        struct f2fs_sb_info *sbi = F2FS_P_SB(page);
 190
 191        trace_f2fs_writepage(page, META);
 192
 193        if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 194                goto redirty_out;
 195        if (wbc->for_reclaim && page->index < GET_SUM_BLOCK(sbi, 0))
 196                goto redirty_out;
 197        if (unlikely(f2fs_cp_error(sbi)))
 198                goto redirty_out;
 199
 200        f2fs_wait_on_page_writeback(page, META);
 201        write_meta_page(sbi, page);
 202        dec_page_count(sbi, F2FS_DIRTY_META);
 203        unlock_page(page);
 204
 205        if (wbc->for_reclaim)
 206                f2fs_submit_merged_bio(sbi, META, WRITE);
 207        return 0;
 208
 209redirty_out:
 210        redirty_page_for_writepage(wbc, page);
 211        return AOP_WRITEPAGE_ACTIVATE;
 212}
 213
 214static int f2fs_write_meta_pages(struct address_space *mapping,
 215                                struct writeback_control *wbc)
 216{
 217        struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
 218        long diff, written;
 219
 220        trace_f2fs_writepages(mapping->host, wbc, META);
 221
 222        /* collect a number of dirty meta pages and write together */
 223        if (wbc->for_kupdate ||
 224                get_pages(sbi, F2FS_DIRTY_META) < nr_pages_to_skip(sbi, META))
 225                goto skip_write;
 226
 227        /* if mounting is failed, skip writing node pages */
 228        mutex_lock(&sbi->cp_mutex);
 229        diff = nr_pages_to_write(sbi, META, wbc);
 230        written = sync_meta_pages(sbi, META, wbc->nr_to_write);
 231        mutex_unlock(&sbi->cp_mutex);
 232        wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff);
 233        return 0;
 234
 235skip_write:
 236        wbc->pages_skipped += get_pages(sbi, F2FS_DIRTY_META);
 237        return 0;
 238}
 239
 240long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
 241                                                long nr_to_write)
 242{
 243        struct address_space *mapping = META_MAPPING(sbi);
 244        pgoff_t index = 0, end = LONG_MAX;
 245        struct pagevec pvec;
 246        long nwritten = 0;
 247        struct writeback_control wbc = {
 248                .for_reclaim = 0,
 249        };
 250
 251        pagevec_init(&pvec, 0);
 252
 253        while (index <= end) {
 254                int i, nr_pages;
 255                nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
 256                                PAGECACHE_TAG_DIRTY,
 257                                min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
 258                if (unlikely(nr_pages == 0))
 259                        break;
 260
 261                for (i = 0; i < nr_pages; i++) {
 262                        struct page *page = pvec.pages[i];
 263
 264                        lock_page(page);
 265
 266                        if (unlikely(page->mapping != mapping)) {
 267continue_unlock:
 268                                unlock_page(page);
 269                                continue;
 270                        }
 271                        if (!PageDirty(page)) {
 272                                /* someone wrote it for us */
 273                                goto continue_unlock;
 274                        }
 275
 276                        if (!clear_page_dirty_for_io(page))
 277                                goto continue_unlock;
 278
 279                        if (mapping->a_ops->writepage(page, &wbc)) {
 280                                unlock_page(page);
 281                                break;
 282                        }
 283                        nwritten++;
 284                        if (unlikely(nwritten >= nr_to_write))
 285                                break;
 286                }
 287                pagevec_release(&pvec);
 288                cond_resched();
 289        }
 290
 291        if (nwritten)
 292                f2fs_submit_merged_bio(sbi, type, WRITE);
 293
 294        return nwritten;
 295}
 296
 297static int f2fs_set_meta_page_dirty(struct page *page)
 298{
 299        trace_f2fs_set_page_dirty(page, META);
 300
 301        SetPageUptodate(page);
 302        if (!PageDirty(page)) {
 303                __set_page_dirty_nobuffers(page);
 304                inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_META);
 305                SetPagePrivate(page);
 306                f2fs_trace_pid(page);
 307                return 1;
 308        }
 309        return 0;
 310}
 311
 312const struct address_space_operations f2fs_meta_aops = {
 313        .writepage      = f2fs_write_meta_page,
 314        .writepages     = f2fs_write_meta_pages,
 315        .set_page_dirty = f2fs_set_meta_page_dirty,
 316        .invalidatepage = f2fs_invalidate_page,
 317        .releasepage    = f2fs_release_page,
 318};
 319
 320static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 321{
 322        struct inode_management *im = &sbi->im[type];
 323        struct ino_entry *e;
 324retry:
 325        if (radix_tree_preload(GFP_NOFS)) {
 326                cond_resched();
 327                goto retry;
 328        }
 329
 330        spin_lock(&im->ino_lock);
 331
 332        e = radix_tree_lookup(&im->ino_root, ino);
 333        if (!e) {
 334                e = kmem_cache_alloc(ino_entry_slab, GFP_ATOMIC);
 335                if (!e) {
 336                        spin_unlock(&im->ino_lock);
 337                        radix_tree_preload_end();
 338                        goto retry;
 339                }
 340                if (radix_tree_insert(&im->ino_root, ino, e)) {
 341                        spin_unlock(&im->ino_lock);
 342                        kmem_cache_free(ino_entry_slab, e);
 343                        radix_tree_preload_end();
 344                        goto retry;
 345                }
 346                memset(e, 0, sizeof(struct ino_entry));
 347                e->ino = ino;
 348
 349                list_add_tail(&e->list, &im->ino_list);
 350                if (type != ORPHAN_INO)
 351                        im->ino_num++;
 352        }
 353        spin_unlock(&im->ino_lock);
 354        radix_tree_preload_end();
 355}
 356
 357static void __remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
 358{
 359        struct inode_management *im = &sbi->im[type];
 360        struct ino_entry *e;
 361
 362        spin_lock(&im->ino_lock);
 363        e = radix_tree_lookup(&im->ino_root, ino);
 364        if (e) {
 365                list_del(&e->list);
 366                radix_tree_delete(&im->ino_root, ino);
 367                im->ino_num--;
 368                spin_unlock(&im->ino_lock);
 369                kmem_cache_free(ino_entry_slab, e);
 370                return;
 371        }
 372        spin_unlock(&im->ino_lock);
 373}
 374
 375void add_dirty_inode(struct f2fs_sb_info *sbi, nid_t ino, int type)
 376{
 377        /* add new dirty ino entry into list */
 378        __add_ino_entry(sbi, ino, type);
 379}
 380
 381void remove_dirty_inode(struct f2fs_sb_info *sbi, nid_t ino, int type)
 382{
 383        /* remove dirty ino entry from list */
 384        __remove_ino_entry(sbi, ino, type);
 385}
 386
 387/* mode should be APPEND_INO or UPDATE_INO */
 388bool exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode)
 389{
 390        struct inode_management *im = &sbi->im[mode];
 391        struct ino_entry *e;
 392
 393        spin_lock(&im->ino_lock);
 394        e = radix_tree_lookup(&im->ino_root, ino);
 395        spin_unlock(&im->ino_lock);
 396        return e ? true : false;
 397}
 398
 399void release_dirty_inode(struct f2fs_sb_info *sbi)
 400{
 401        struct ino_entry *e, *tmp;
 402        int i;
 403
 404        for (i = APPEND_INO; i <= UPDATE_INO; i++) {
 405                struct inode_management *im = &sbi->im[i];
 406
 407                spin_lock(&im->ino_lock);
 408                list_for_each_entry_safe(e, tmp, &im->ino_list, list) {
 409                        list_del(&e->list);
 410                        radix_tree_delete(&im->ino_root, e->ino);
 411                        kmem_cache_free(ino_entry_slab, e);
 412                        im->ino_num--;
 413                }
 414                spin_unlock(&im->ino_lock);
 415        }
 416}
 417
 418int acquire_orphan_inode(struct f2fs_sb_info *sbi)
 419{
 420        struct inode_management *im = &sbi->im[ORPHAN_INO];
 421        int err = 0;
 422
 423        spin_lock(&im->ino_lock);
 424        if (unlikely(im->ino_num >= sbi->max_orphans))
 425                err = -ENOSPC;
 426        else
 427                im->ino_num++;
 428        spin_unlock(&im->ino_lock);
 429
 430        return err;
 431}
 432
 433void release_orphan_inode(struct f2fs_sb_info *sbi)
 434{
 435        struct inode_management *im = &sbi->im[ORPHAN_INO];
 436
 437        spin_lock(&im->ino_lock);
 438        f2fs_bug_on(sbi, im->ino_num == 0);
 439        im->ino_num--;
 440        spin_unlock(&im->ino_lock);
 441}
 442
 443void add_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
 444{
 445        /* add new orphan ino entry into list */
 446        __add_ino_entry(sbi, ino, ORPHAN_INO);
 447}
 448
 449void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
 450{
 451        /* remove orphan entry from orphan list */
 452        __remove_ino_entry(sbi, ino, ORPHAN_INO);
 453}
 454
 455static void recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
 456{
 457        struct inode *inode = f2fs_iget(sbi->sb, ino);
 458        f2fs_bug_on(sbi, IS_ERR(inode));
 459        clear_nlink(inode);
 460
 461        /* truncate all the data during iput */
 462        iput(inode);
 463}
 464
 465void recover_orphan_inodes(struct f2fs_sb_info *sbi)
 466{
 467        block_t start_blk, orphan_blocks, i, j;
 468
 469        if (!is_set_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG))
 470                return;
 471
 472        set_sbi_flag(sbi, SBI_POR_DOING);
 473
 474        start_blk = __start_cp_addr(sbi) + 1 + __cp_payload(sbi);
 475        orphan_blocks = __start_sum_addr(sbi) - 1 - __cp_payload(sbi);
 476
 477        ra_meta_pages(sbi, start_blk, orphan_blocks, META_CP);
 478
 479        for (i = 0; i < orphan_blocks; i++) {
 480                struct page *page = get_meta_page(sbi, start_blk + i);
 481                struct f2fs_orphan_block *orphan_blk;
 482
 483                orphan_blk = (struct f2fs_orphan_block *)page_address(page);
 484                for (j = 0; j < le32_to_cpu(orphan_blk->entry_count); j++) {
 485                        nid_t ino = le32_to_cpu(orphan_blk->ino[j]);
 486                        recover_orphan_inode(sbi, ino);
 487                }
 488                f2fs_put_page(page, 1);
 489        }
 490        /* clear Orphan Flag */
 491        clear_ckpt_flags(F2FS_CKPT(sbi), CP_ORPHAN_PRESENT_FLAG);
 492        clear_sbi_flag(sbi, SBI_POR_DOING);
 493        return;
 494}
 495
 496static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
 497{
 498        struct list_head *head;
 499        struct f2fs_orphan_block *orphan_blk = NULL;
 500        unsigned int nentries = 0;
 501        unsigned short index;
 502        unsigned short orphan_blocks;
 503        struct page *page = NULL;
 504        struct ino_entry *orphan = NULL;
 505        struct inode_management *im = &sbi->im[ORPHAN_INO];
 506
 507        orphan_blocks = GET_ORPHAN_BLOCKS(im->ino_num);
 508
 509        for (index = 0; index < orphan_blocks; index++)
 510                grab_meta_page(sbi, start_blk + index);
 511
 512        index = 1;
 513        spin_lock(&im->ino_lock);
 514        head = &im->ino_list;
 515
 516        /* loop for each orphan inode entry and write them in Jornal block */
 517        list_for_each_entry(orphan, head, list) {
 518                if (!page) {
 519                        page = find_get_page(META_MAPPING(sbi), start_blk++);
 520                        f2fs_bug_on(sbi, !page);
 521                        orphan_blk =
 522                                (struct f2fs_orphan_block *)page_address(page);
 523                        memset(orphan_blk, 0, sizeof(*orphan_blk));
 524                        f2fs_put_page(page, 0);
 525                }
 526
 527                orphan_blk->ino[nentries++] = cpu_to_le32(orphan->ino);
 528
 529                if (nentries == F2FS_ORPHANS_PER_BLOCK) {
 530                        /*
 531                         * an orphan block is full of 1020 entries,
 532                         * then we need to flush current orphan blocks
 533                         * and bring another one in memory
 534                         */
 535                        orphan_blk->blk_addr = cpu_to_le16(index);
 536                        orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
 537                        orphan_blk->entry_count = cpu_to_le32(nentries);
 538                        set_page_dirty(page);
 539                        f2fs_put_page(page, 1);
 540                        index++;
 541                        nentries = 0;
 542                        page = NULL;
 543                }
 544        }
 545
 546        if (page) {
 547                orphan_blk->blk_addr = cpu_to_le16(index);
 548                orphan_blk->blk_count = cpu_to_le16(orphan_blocks);
 549                orphan_blk->entry_count = cpu_to_le32(nentries);
 550                set_page_dirty(page);
 551                f2fs_put_page(page, 1);
 552        }
 553
 554        spin_unlock(&im->ino_lock);
 555}
 556
 557static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
 558                                block_t cp_addr, unsigned long long *version)
 559{
 560        struct page *cp_page_1, *cp_page_2 = NULL;
 561        unsigned long blk_size = sbi->blocksize;
 562        struct f2fs_checkpoint *cp_block;
 563        unsigned long long cur_version = 0, pre_version = 0;
 564        size_t crc_offset;
 565        __u32 crc = 0;
 566
 567        /* Read the 1st cp block in this CP pack */
 568        cp_page_1 = get_meta_page(sbi, cp_addr);
 569
 570        /* get the version number */
 571        cp_block = (struct f2fs_checkpoint *)page_address(cp_page_1);
 572        crc_offset = le32_to_cpu(cp_block->checksum_offset);
 573        if (crc_offset >= blk_size)
 574                goto invalid_cp1;
 575
 576        crc = le32_to_cpu(*((__le32 *)((unsigned char *)cp_block + crc_offset)));
 577        if (!f2fs_crc_valid(crc, cp_block, crc_offset))
 578                goto invalid_cp1;
 579
 580        pre_version = cur_cp_version(cp_block);
 581
 582        /* Read the 2nd cp block in this CP pack */
 583        cp_addr += le32_to_cpu(cp_block->cp_pack_total_block_count) - 1;
 584        cp_page_2 = get_meta_page(sbi, cp_addr);
 585
 586        cp_block = (struct f2fs_checkpoint *)page_address(cp_page_2);
 587        crc_offset = le32_to_cpu(cp_block->checksum_offset);
 588        if (crc_offset >= blk_size)
 589                goto invalid_cp2;
 590
 591        crc = le32_to_cpu(*((__le32 *)((unsigned char *)cp_block + crc_offset)));
 592        if (!f2fs_crc_valid(crc, cp_block, crc_offset))
 593                goto invalid_cp2;
 594
 595        cur_version = cur_cp_version(cp_block);
 596
 597        if (cur_version == pre_version) {
 598                *version = cur_version;
 599                f2fs_put_page(cp_page_2, 1);
 600                return cp_page_1;
 601        }
 602invalid_cp2:
 603        f2fs_put_page(cp_page_2, 1);
 604invalid_cp1:
 605        f2fs_put_page(cp_page_1, 1);
 606        return NULL;
 607}
 608
 609int get_valid_checkpoint(struct f2fs_sb_info *sbi)
 610{
 611        struct f2fs_checkpoint *cp_block;
 612        struct f2fs_super_block *fsb = sbi->raw_super;
 613        struct page *cp1, *cp2, *cur_page;
 614        unsigned long blk_size = sbi->blocksize;
 615        unsigned long long cp1_version = 0, cp2_version = 0;
 616        unsigned long long cp_start_blk_no;
 617        unsigned int cp_blks = 1 + __cp_payload(sbi);
 618        block_t cp_blk_no;
 619        int i;
 620
 621        sbi->ckpt = kzalloc(cp_blks * blk_size, GFP_KERNEL);
 622        if (!sbi->ckpt)
 623                return -ENOMEM;
 624        /*
 625         * Finding out valid cp block involves read both
 626         * sets( cp pack1 and cp pack 2)
 627         */
 628        cp_start_blk_no = le32_to_cpu(fsb->cp_blkaddr);
 629        cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version);
 630
 631        /* The second checkpoint pack should start at the next segment */
 632        cp_start_blk_no += ((unsigned long long)1) <<
 633                                le32_to_cpu(fsb->log_blocks_per_seg);
 634        cp2 = validate_checkpoint(sbi, cp_start_blk_no, &cp2_version);
 635
 636        if (cp1 && cp2) {
 637                if (ver_after(cp2_version, cp1_version))
 638                        cur_page = cp2;
 639                else
 640                        cur_page = cp1;
 641        } else if (cp1) {
 642                cur_page = cp1;
 643        } else if (cp2) {
 644                cur_page = cp2;
 645        } else {
 646                goto fail_no_cp;
 647        }
 648
 649        cp_block = (struct f2fs_checkpoint *)page_address(cur_page);
 650        memcpy(sbi->ckpt, cp_block, blk_size);
 651
 652        if (cp_blks <= 1)
 653                goto done;
 654
 655        cp_blk_no = le32_to_cpu(fsb->cp_blkaddr);
 656        if (cur_page == cp2)
 657                cp_blk_no += 1 << le32_to_cpu(fsb->log_blocks_per_seg);
 658
 659        for (i = 1; i < cp_blks; i++) {
 660                void *sit_bitmap_ptr;
 661                unsigned char *ckpt = (unsigned char *)sbi->ckpt;
 662
 663                cur_page = get_meta_page(sbi, cp_blk_no + i);
 664                sit_bitmap_ptr = page_address(cur_page);
 665                memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
 666                f2fs_put_page(cur_page, 1);
 667        }
 668done:
 669        f2fs_put_page(cp1, 1);
 670        f2fs_put_page(cp2, 1);
 671        return 0;
 672
 673fail_no_cp:
 674        kfree(sbi->ckpt);
 675        return -EINVAL;
 676}
 677
 678static int __add_dirty_inode(struct inode *inode, struct inode_entry *new)
 679{
 680        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 681
 682        if (is_inode_flag_set(F2FS_I(inode), FI_DIRTY_DIR))
 683                return -EEXIST;
 684
 685        set_inode_flag(F2FS_I(inode), FI_DIRTY_DIR);
 686        F2FS_I(inode)->dirty_dir = new;
 687        list_add_tail(&new->list, &sbi->dir_inode_list);
 688        stat_inc_dirty_dir(sbi);
 689        return 0;
 690}
 691
 692void update_dirty_page(struct inode *inode, struct page *page)
 693{
 694        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 695        struct inode_entry *new;
 696        int ret = 0;
 697
 698        if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode))
 699                return;
 700
 701        if (!S_ISDIR(inode->i_mode)) {
 702                inode_inc_dirty_pages(inode);
 703                goto out;
 704        }
 705
 706        new = f2fs_kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
 707        new->inode = inode;
 708        INIT_LIST_HEAD(&new->list);
 709
 710        spin_lock(&sbi->dir_inode_lock);
 711        ret = __add_dirty_inode(inode, new);
 712        inode_inc_dirty_pages(inode);
 713        spin_unlock(&sbi->dir_inode_lock);
 714
 715        if (ret)
 716                kmem_cache_free(inode_entry_slab, new);
 717out:
 718        SetPagePrivate(page);
 719        f2fs_trace_pid(page);
 720}
 721
 722void add_dirty_dir_inode(struct inode *inode)
 723{
 724        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 725        struct inode_entry *new =
 726                        f2fs_kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
 727        int ret = 0;
 728
 729        new->inode = inode;
 730        INIT_LIST_HEAD(&new->list);
 731
 732        spin_lock(&sbi->dir_inode_lock);
 733        ret = __add_dirty_inode(inode, new);
 734        spin_unlock(&sbi->dir_inode_lock);
 735
 736        if (ret)
 737                kmem_cache_free(inode_entry_slab, new);
 738}
 739
 740void remove_dirty_dir_inode(struct inode *inode)
 741{
 742        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 743        struct inode_entry *entry;
 744
 745        if (!S_ISDIR(inode->i_mode))
 746                return;
 747
 748        spin_lock(&sbi->dir_inode_lock);
 749        if (get_dirty_pages(inode) ||
 750                        !is_inode_flag_set(F2FS_I(inode), FI_DIRTY_DIR)) {
 751                spin_unlock(&sbi->dir_inode_lock);
 752                return;
 753        }
 754
 755        entry = F2FS_I(inode)->dirty_dir;
 756        list_del(&entry->list);
 757        F2FS_I(inode)->dirty_dir = NULL;
 758        clear_inode_flag(F2FS_I(inode), FI_DIRTY_DIR);
 759        stat_dec_dirty_dir(sbi);
 760        spin_unlock(&sbi->dir_inode_lock);
 761        kmem_cache_free(inode_entry_slab, entry);
 762
 763        /* Only from the recovery routine */
 764        if (is_inode_flag_set(F2FS_I(inode), FI_DELAY_IPUT)) {
 765                clear_inode_flag(F2FS_I(inode), FI_DELAY_IPUT);
 766                iput(inode);
 767        }
 768}
 769
 770void sync_dirty_dir_inodes(struct f2fs_sb_info *sbi)
 771{
 772        struct list_head *head;
 773        struct inode_entry *entry;
 774        struct inode *inode;
 775retry:
 776        if (unlikely(f2fs_cp_error(sbi)))
 777                return;
 778
 779        spin_lock(&sbi->dir_inode_lock);
 780
 781        head = &sbi->dir_inode_list;
 782        if (list_empty(head)) {
 783                spin_unlock(&sbi->dir_inode_lock);
 784                return;
 785        }
 786        entry = list_entry(head->next, struct inode_entry, list);
 787        inode = igrab(entry->inode);
 788        spin_unlock(&sbi->dir_inode_lock);
 789        if (inode) {
 790                filemap_fdatawrite(inode->i_mapping);
 791                iput(inode);
 792        } else {
 793                /*
 794                 * We should submit bio, since it exists several
 795                 * wribacking dentry pages in the freeing inode.
 796                 */
 797                f2fs_submit_merged_bio(sbi, DATA, WRITE);
 798                cond_resched();
 799        }
 800        goto retry;
 801}
 802
 803/*
 804 * Freeze all the FS-operations for checkpoint.
 805 */
 806static int block_operations(struct f2fs_sb_info *sbi)
 807{
 808        struct writeback_control wbc = {
 809                .sync_mode = WB_SYNC_ALL,
 810                .nr_to_write = LONG_MAX,
 811                .for_reclaim = 0,
 812        };
 813        struct blk_plug plug;
 814        int err = 0;
 815
 816        blk_start_plug(&plug);
 817
 818retry_flush_dents:
 819        f2fs_lock_all(sbi);
 820        /* write all the dirty dentry pages */
 821        if (get_pages(sbi, F2FS_DIRTY_DENTS)) {
 822                f2fs_unlock_all(sbi);
 823                sync_dirty_dir_inodes(sbi);
 824                if (unlikely(f2fs_cp_error(sbi))) {
 825                        err = -EIO;
 826                        goto out;
 827                }
 828                goto retry_flush_dents;
 829        }
 830
 831        /*
 832         * POR: we should ensure that there are no dirty node pages
 833         * until finishing nat/sit flush.
 834         */
 835retry_flush_nodes:
 836        down_write(&sbi->node_write);
 837
 838        if (get_pages(sbi, F2FS_DIRTY_NODES)) {
 839                up_write(&sbi->node_write);
 840                sync_node_pages(sbi, 0, &wbc);
 841                if (unlikely(f2fs_cp_error(sbi))) {
 842                        f2fs_unlock_all(sbi);
 843                        err = -EIO;
 844                        goto out;
 845                }
 846                goto retry_flush_nodes;
 847        }
 848out:
 849        blk_finish_plug(&plug);
 850        return err;
 851}
 852
 853static void unblock_operations(struct f2fs_sb_info *sbi)
 854{
 855        up_write(&sbi->node_write);
 856        f2fs_unlock_all(sbi);
 857}
 858
 859static void wait_on_all_pages_writeback(struct f2fs_sb_info *sbi)
 860{
 861        DEFINE_WAIT(wait);
 862
 863        for (;;) {
 864                prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
 865
 866                if (!get_pages(sbi, F2FS_WRITEBACK))
 867                        break;
 868
 869                io_schedule();
 870        }
 871        finish_wait(&sbi->cp_wait, &wait);
 872}
 873
 874static void do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 875{
 876        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
 877        struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_WARM_NODE);
 878        struct f2fs_nm_info *nm_i = NM_I(sbi);
 879        unsigned long orphan_num = sbi->im[ORPHAN_INO].ino_num;
 880        nid_t last_nid = nm_i->next_scan_nid;
 881        block_t start_blk;
 882        struct page *cp_page;
 883        unsigned int data_sum_blocks, orphan_blocks;
 884        __u32 crc32 = 0;
 885        void *kaddr;
 886        int i;
 887        int cp_payload_blks = __cp_payload(sbi);
 888
 889        /*
 890         * This avoids to conduct wrong roll-forward operations and uses
 891         * metapages, so should be called prior to sync_meta_pages below.
 892         */
 893        discard_next_dnode(sbi, NEXT_FREE_BLKADDR(sbi, curseg));
 894
 895        /* Flush all the NAT/SIT pages */
 896        while (get_pages(sbi, F2FS_DIRTY_META)) {
 897                sync_meta_pages(sbi, META, LONG_MAX);
 898                if (unlikely(f2fs_cp_error(sbi)))
 899                        return;
 900        }
 901
 902        next_free_nid(sbi, &last_nid);
 903
 904        /*
 905         * modify checkpoint
 906         * version number is already updated
 907         */
 908        ckpt->elapsed_time = cpu_to_le64(get_mtime(sbi));
 909        ckpt->valid_block_count = cpu_to_le64(valid_user_blocks(sbi));
 910        ckpt->free_segment_count = cpu_to_le32(free_segments(sbi));
 911        for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
 912                ckpt->cur_node_segno[i] =
 913                        cpu_to_le32(curseg_segno(sbi, i + CURSEG_HOT_NODE));
 914                ckpt->cur_node_blkoff[i] =
 915                        cpu_to_le16(curseg_blkoff(sbi, i + CURSEG_HOT_NODE));
 916                ckpt->alloc_type[i + CURSEG_HOT_NODE] =
 917                                curseg_alloc_type(sbi, i + CURSEG_HOT_NODE);
 918        }
 919        for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
 920                ckpt->cur_data_segno[i] =
 921                        cpu_to_le32(curseg_segno(sbi, i + CURSEG_HOT_DATA));
 922                ckpt->cur_data_blkoff[i] =
 923                        cpu_to_le16(curseg_blkoff(sbi, i + CURSEG_HOT_DATA));
 924                ckpt->alloc_type[i + CURSEG_HOT_DATA] =
 925                                curseg_alloc_type(sbi, i + CURSEG_HOT_DATA);
 926        }
 927
 928        ckpt->valid_node_count = cpu_to_le32(valid_node_count(sbi));
 929        ckpt->valid_inode_count = cpu_to_le32(valid_inode_count(sbi));
 930        ckpt->next_free_nid = cpu_to_le32(last_nid);
 931
 932        /* 2 cp  + n data seg summary + orphan inode blocks */
 933        data_sum_blocks = npages_for_summary_flush(sbi, false);
 934        if (data_sum_blocks < NR_CURSEG_DATA_TYPE)
 935                set_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
 936        else
 937                clear_ckpt_flags(ckpt, CP_COMPACT_SUM_FLAG);
 938
 939        orphan_blocks = GET_ORPHAN_BLOCKS(orphan_num);
 940        ckpt->cp_pack_start_sum = cpu_to_le32(1 + cp_payload_blks +
 941                        orphan_blocks);
 942
 943        if (__remain_node_summaries(cpc->reason))
 944                ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS+
 945                                cp_payload_blks + data_sum_blocks +
 946                                orphan_blocks + NR_CURSEG_NODE_TYPE);
 947        else
 948                ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS +
 949                                cp_payload_blks + data_sum_blocks +
 950                                orphan_blocks);
 951
 952        if (cpc->reason == CP_UMOUNT)
 953                set_ckpt_flags(ckpt, CP_UMOUNT_FLAG);
 954        else
 955                clear_ckpt_flags(ckpt, CP_UMOUNT_FLAG);
 956
 957        if (cpc->reason == CP_FASTBOOT)
 958                set_ckpt_flags(ckpt, CP_FASTBOOT_FLAG);
 959        else
 960                clear_ckpt_flags(ckpt, CP_FASTBOOT_FLAG);
 961
 962        if (orphan_num)
 963                set_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
 964        else
 965                clear_ckpt_flags(ckpt, CP_ORPHAN_PRESENT_FLAG);
 966
 967        if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
 968                set_ckpt_flags(ckpt, CP_FSCK_FLAG);
 969
 970        /* update SIT/NAT bitmap */
 971        get_sit_bitmap(sbi, __bitmap_ptr(sbi, SIT_BITMAP));
 972        get_nat_bitmap(sbi, __bitmap_ptr(sbi, NAT_BITMAP));
 973
 974        crc32 = f2fs_crc32(ckpt, le32_to_cpu(ckpt->checksum_offset));
 975        *((__le32 *)((unsigned char *)ckpt +
 976                                le32_to_cpu(ckpt->checksum_offset)))
 977                                = cpu_to_le32(crc32);
 978
 979        start_blk = __start_cp_addr(sbi);
 980
 981        /* write out checkpoint buffer at block 0 */
 982        cp_page = grab_meta_page(sbi, start_blk++);
 983        kaddr = page_address(cp_page);
 984        memcpy(kaddr, ckpt, F2FS_BLKSIZE);
 985        set_page_dirty(cp_page);
 986        f2fs_put_page(cp_page, 1);
 987
 988        for (i = 1; i < 1 + cp_payload_blks; i++) {
 989                cp_page = grab_meta_page(sbi, start_blk++);
 990                kaddr = page_address(cp_page);
 991                memcpy(kaddr, (char *)ckpt + i * F2FS_BLKSIZE, F2FS_BLKSIZE);
 992                set_page_dirty(cp_page);
 993                f2fs_put_page(cp_page, 1);
 994        }
 995
 996        if (orphan_num) {
 997                write_orphan_inodes(sbi, start_blk);
 998                start_blk += orphan_blocks;
 999        }
1000
1001        write_data_summaries(sbi, start_blk);
1002        start_blk += data_sum_blocks;
1003        if (__remain_node_summaries(cpc->reason)) {
1004                write_node_summaries(sbi, start_blk);
1005                start_blk += NR_CURSEG_NODE_TYPE;
1006        }
1007
1008        /* writeout checkpoint block */
1009        cp_page = grab_meta_page(sbi, start_blk);
1010        kaddr = page_address(cp_page);
1011        memcpy(kaddr, ckpt, F2FS_BLKSIZE);
1012        set_page_dirty(cp_page);
1013        f2fs_put_page(cp_page, 1);
1014
1015        /* wait for previous submitted node/meta pages writeback */
1016        wait_on_all_pages_writeback(sbi);
1017
1018        if (unlikely(f2fs_cp_error(sbi)))
1019                return;
1020
1021        filemap_fdatawait_range(NODE_MAPPING(sbi), 0, LONG_MAX);
1022        filemap_fdatawait_range(META_MAPPING(sbi), 0, LONG_MAX);
1023
1024        /* update user_block_counts */
1025        sbi->last_valid_block_count = sbi->total_valid_block_count;
1026        sbi->alloc_valid_block_count = 0;
1027
1028        /* Here, we only have one bio having CP pack */
1029        sync_meta_pages(sbi, META_FLUSH, LONG_MAX);
1030
1031        /* wait for previous submitted meta pages writeback */
1032        wait_on_all_pages_writeback(sbi);
1033
1034        release_dirty_inode(sbi);
1035
1036        if (unlikely(f2fs_cp_error(sbi)))
1037                return;
1038
1039        clear_prefree_segments(sbi);
1040        clear_sbi_flag(sbi, SBI_IS_DIRTY);
1041}
1042
1043/*
1044 * We guarantee that this checkpoint procedure will not fail.
1045 */
1046void write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
1047{
1048        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1049        unsigned long long ckpt_ver;
1050
1051        mutex_lock(&sbi->cp_mutex);
1052
1053        if (!is_sbi_flag_set(sbi, SBI_IS_DIRTY) &&
1054                (cpc->reason == CP_FASTBOOT || cpc->reason == CP_SYNC))
1055                goto out;
1056        if (unlikely(f2fs_cp_error(sbi)))
1057                goto out;
1058        if (f2fs_readonly(sbi->sb))
1059                goto out;
1060
1061        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "start block_ops");
1062
1063        if (block_operations(sbi))
1064                goto out;
1065
1066        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish block_ops");
1067
1068        f2fs_submit_merged_bio(sbi, DATA, WRITE);
1069        f2fs_submit_merged_bio(sbi, NODE, WRITE);
1070        f2fs_submit_merged_bio(sbi, META, WRITE);
1071
1072        /*
1073         * update checkpoint pack index
1074         * Increase the version number so that
1075         * SIT entries and seg summaries are written at correct place
1076         */
1077        ckpt_ver = cur_cp_version(ckpt);
1078        ckpt->checkpoint_ver = cpu_to_le64(++ckpt_ver);
1079
1080        /* write cached NAT/SIT entries to NAT/SIT area */
1081        flush_nat_entries(sbi);
1082        flush_sit_entries(sbi, cpc);
1083
1084        /* unlock all the fs_lock[] in do_checkpoint() */
1085        do_checkpoint(sbi, cpc);
1086
1087        unblock_operations(sbi);
1088        stat_inc_cp_count(sbi->stat_info);
1089
1090        if (cpc->reason == CP_RECOVERY)
1091                f2fs_msg(sbi->sb, KERN_NOTICE,
1092                        "checkpoint: version = %llx", ckpt_ver);
1093out:
1094        mutex_unlock(&sbi->cp_mutex);
1095        trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish checkpoint");
1096}
1097
1098void init_ino_entry_info(struct f2fs_sb_info *sbi)
1099{
1100        int i;
1101
1102        for (i = 0; i < MAX_INO_ENTRY; i++) {
1103                struct inode_management *im = &sbi->im[i];
1104
1105                INIT_RADIX_TREE(&im->ino_root, GFP_ATOMIC);
1106                spin_lock_init(&im->ino_lock);
1107                INIT_LIST_HEAD(&im->ino_list);
1108                im->ino_num = 0;
1109        }
1110
1111        sbi->max_orphans = (sbi->blocks_per_seg - F2FS_CP_PACKS -
1112                        NR_CURSEG_TYPE - __cp_payload(sbi)) *
1113                                F2FS_ORPHANS_PER_BLOCK;
1114}
1115
1116int __init create_checkpoint_caches(void)
1117{
1118        ino_entry_slab = f2fs_kmem_cache_create("f2fs_ino_entry",
1119                        sizeof(struct ino_entry));
1120        if (!ino_entry_slab)
1121                return -ENOMEM;
1122        inode_entry_slab = f2fs_kmem_cache_create("f2fs_inode_entry",
1123                        sizeof(struct inode_entry));
1124        if (!inode_entry_slab) {
1125                kmem_cache_destroy(ino_entry_slab);
1126                return -ENOMEM;
1127        }
1128        return 0;
1129}
1130
1131void destroy_checkpoint_caches(void)
1132{
1133        kmem_cache_destroy(ino_entry_slab);
1134        kmem_cache_destroy(inode_entry_slab);
1135}
1136