linux/fs/f2fs/f2fs.h
<<
>>
Prefs
   1/*
   2 * fs/f2fs/f2fs.h
   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#ifndef _LINUX_F2FS_H
  12#define _LINUX_F2FS_H
  13
  14#include <linux/types.h>
  15#include <linux/page-flags.h>
  16#include <linux/buffer_head.h>
  17#include <linux/slab.h>
  18#include <linux/crc32.h>
  19#include <linux/magic.h>
  20#include <linux/kobject.h>
  21#include <linux/sched.h>
  22
  23#ifdef CONFIG_F2FS_CHECK_FS
  24#define f2fs_bug_on(condition)  BUG_ON(condition)
  25#define f2fs_down_write(x, y)   down_write_nest_lock(x, y)
  26#else
  27#define f2fs_bug_on(condition)  WARN_ON(condition)
  28#define f2fs_down_write(x, y)   down_write(x)
  29#endif
  30
  31/*
  32 * For mount options
  33 */
  34#define F2FS_MOUNT_BG_GC                0x00000001
  35#define F2FS_MOUNT_DISABLE_ROLL_FORWARD 0x00000002
  36#define F2FS_MOUNT_DISCARD              0x00000004
  37#define F2FS_MOUNT_NOHEAP               0x00000008
  38#define F2FS_MOUNT_XATTR_USER           0x00000010
  39#define F2FS_MOUNT_POSIX_ACL            0x00000020
  40#define F2FS_MOUNT_DISABLE_EXT_IDENTIFY 0x00000040
  41#define F2FS_MOUNT_INLINE_XATTR         0x00000080
  42#define F2FS_MOUNT_INLINE_DATA          0x00000100
  43#define F2FS_MOUNT_FLUSH_MERGE          0x00000200
  44#define F2FS_MOUNT_NOBARRIER            0x00000400
  45
  46#define clear_opt(sbi, option)  (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option)
  47#define set_opt(sbi, option)    (sbi->mount_opt.opt |= F2FS_MOUNT_##option)
  48#define test_opt(sbi, option)   (sbi->mount_opt.opt & F2FS_MOUNT_##option)
  49
  50#define ver_after(a, b) (typecheck(unsigned long long, a) &&            \
  51                typecheck(unsigned long long, b) &&                     \
  52                ((long long)((a) - (b)) > 0))
  53
  54typedef u32 block_t;    /*
  55                         * should not change u32, since it is the on-disk block
  56                         * address format, __le32.
  57                         */
  58typedef u32 nid_t;
  59
  60struct f2fs_mount_info {
  61        unsigned int    opt;
  62};
  63
  64#define CRCPOLY_LE 0xedb88320
  65
  66static inline __u32 f2fs_crc32(void *buf, size_t len)
  67{
  68        unsigned char *p = (unsigned char *)buf;
  69        __u32 crc = F2FS_SUPER_MAGIC;
  70        int i;
  71
  72        while (len--) {
  73                crc ^= *p++;
  74                for (i = 0; i < 8; i++)
  75                        crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
  76        }
  77        return crc;
  78}
  79
  80static inline bool f2fs_crc_valid(__u32 blk_crc, void *buf, size_t buf_size)
  81{
  82        return f2fs_crc32(buf, buf_size) == blk_crc;
  83}
  84
  85/*
  86 * For checkpoint manager
  87 */
  88enum {
  89        NAT_BITMAP,
  90        SIT_BITMAP
  91};
  92
  93/*
  94 * For CP/NAT/SIT/SSA readahead
  95 */
  96enum {
  97        META_CP,
  98        META_NAT,
  99        META_SIT,
 100        META_SSA
 101};
 102
 103/* for the list of ino */
 104enum {
 105        ORPHAN_INO,             /* for orphan ino list */
 106        APPEND_INO,             /* for append ino list */
 107        UPDATE_INO,             /* for update ino list */
 108        MAX_INO_ENTRY,          /* max. list */
 109};
 110
 111struct ino_entry {
 112        struct list_head list;  /* list head */
 113        nid_t ino;              /* inode number */
 114};
 115
 116/* for the list of directory inodes */
 117struct dir_inode_entry {
 118        struct list_head list;  /* list head */
 119        struct inode *inode;    /* vfs inode pointer */
 120};
 121
 122/* for the list of blockaddresses to be discarded */
 123struct discard_entry {
 124        struct list_head list;  /* list head */
 125        block_t blkaddr;        /* block address to be discarded */
 126        int len;                /* # of consecutive blocks of the discard */
 127};
 128
 129/* for the list of fsync inodes, used only during recovery */
 130struct fsync_inode_entry {
 131        struct list_head list;  /* list head */
 132        struct inode *inode;    /* vfs inode pointer */
 133        block_t blkaddr;        /* block address locating the last inode */
 134};
 135
 136#define nats_in_cursum(sum)             (le16_to_cpu(sum->n_nats))
 137#define sits_in_cursum(sum)             (le16_to_cpu(sum->n_sits))
 138
 139#define nat_in_journal(sum, i)          (sum->nat_j.entries[i].ne)
 140#define nid_in_journal(sum, i)          (sum->nat_j.entries[i].nid)
 141#define sit_in_journal(sum, i)          (sum->sit_j.entries[i].se)
 142#define segno_in_journal(sum, i)        (sum->sit_j.entries[i].segno)
 143
 144static inline int update_nats_in_cursum(struct f2fs_summary_block *rs, int i)
 145{
 146        int before = nats_in_cursum(rs);
 147        rs->n_nats = cpu_to_le16(before + i);
 148        return before;
 149}
 150
 151static inline int update_sits_in_cursum(struct f2fs_summary_block *rs, int i)
 152{
 153        int before = sits_in_cursum(rs);
 154        rs->n_sits = cpu_to_le16(before + i);
 155        return before;
 156}
 157
 158/*
 159 * ioctl commands
 160 */
 161#define F2FS_IOC_GETFLAGS               FS_IOC_GETFLAGS
 162#define F2FS_IOC_SETFLAGS               FS_IOC_SETFLAGS
 163
 164#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
 165/*
 166 * ioctl commands in 32 bit emulation
 167 */
 168#define F2FS_IOC32_GETFLAGS             FS_IOC32_GETFLAGS
 169#define F2FS_IOC32_SETFLAGS             FS_IOC32_SETFLAGS
 170#endif
 171
 172/*
 173 * For INODE and NODE manager
 174 */
 175/*
 176 * XATTR_NODE_OFFSET stores xattrs to one node block per file keeping -1
 177 * as its node offset to distinguish from index node blocks.
 178 * But some bits are used to mark the node block.
 179 */
 180#define XATTR_NODE_OFFSET       ((((unsigned int)-1) << OFFSET_BIT_SHIFT) \
 181                                >> OFFSET_BIT_SHIFT)
 182enum {
 183        ALLOC_NODE,                     /* allocate a new node page if needed */
 184        LOOKUP_NODE,                    /* look up a node without readahead */
 185        LOOKUP_NODE_RA,                 /*
 186                                         * look up a node with readahead called
 187                                         * by get_data_block.
 188                                         */
 189};
 190
 191#define F2FS_LINK_MAX           32000   /* maximum link count per file */
 192
 193#define MAX_DIR_RA_PAGES        4       /* maximum ra pages of dir */
 194
 195/* for in-memory extent cache entry */
 196#define F2FS_MIN_EXTENT_LEN     16      /* minimum extent length */
 197
 198struct extent_info {
 199        rwlock_t ext_lock;      /* rwlock for consistency */
 200        unsigned int fofs;      /* start offset in a file */
 201        u32 blk_addr;           /* start block address of the extent */
 202        unsigned int len;       /* length of the extent */
 203};
 204
 205/*
 206 * i_advise uses FADVISE_XXX_BIT. We can add additional hints later.
 207 */
 208#define FADVISE_COLD_BIT        0x01
 209#define FADVISE_LOST_PINO_BIT   0x02
 210
 211#define DEF_DIR_LEVEL           0
 212
 213struct f2fs_inode_info {
 214        struct inode vfs_inode;         /* serve a vfs inode */
 215        unsigned long i_flags;          /* keep an inode flags for ioctl */
 216        unsigned char i_advise;         /* use to give file attribute hints */
 217        unsigned char i_dir_level;      /* use for dentry level for large dir */
 218        unsigned int i_current_depth;   /* use only in directory structure */
 219        unsigned int i_pino;            /* parent inode number */
 220        umode_t i_acl_mode;             /* keep file acl mode temporarily */
 221
 222        /* Use below internally in f2fs*/
 223        unsigned long flags;            /* use to pass per-file flags */
 224        struct rw_semaphore i_sem;      /* protect fi info */
 225        atomic_t dirty_dents;           /* # of dirty dentry pages */
 226        f2fs_hash_t chash;              /* hash value of given file name */
 227        unsigned int clevel;            /* maximum level of given file name */
 228        nid_t i_xattr_nid;              /* node id that contains xattrs */
 229        unsigned long long xattr_ver;   /* cp version of xattr modification */
 230        struct extent_info ext;         /* in-memory extent cache entry */
 231        struct dir_inode_entry *dirty_dir;      /* the pointer of dirty dir */
 232};
 233
 234static inline void get_extent_info(struct extent_info *ext,
 235                                        struct f2fs_extent i_ext)
 236{
 237        write_lock(&ext->ext_lock);
 238        ext->fofs = le32_to_cpu(i_ext.fofs);
 239        ext->blk_addr = le32_to_cpu(i_ext.blk_addr);
 240        ext->len = le32_to_cpu(i_ext.len);
 241        write_unlock(&ext->ext_lock);
 242}
 243
 244static inline void set_raw_extent(struct extent_info *ext,
 245                                        struct f2fs_extent *i_ext)
 246{
 247        read_lock(&ext->ext_lock);
 248        i_ext->fofs = cpu_to_le32(ext->fofs);
 249        i_ext->blk_addr = cpu_to_le32(ext->blk_addr);
 250        i_ext->len = cpu_to_le32(ext->len);
 251        read_unlock(&ext->ext_lock);
 252}
 253
 254struct f2fs_nm_info {
 255        block_t nat_blkaddr;            /* base disk address of NAT */
 256        nid_t max_nid;                  /* maximum possible node ids */
 257        nid_t available_nids;           /* maximum available node ids */
 258        nid_t next_scan_nid;            /* the next nid to be scanned */
 259        unsigned int ram_thresh;        /* control the memory footprint */
 260
 261        /* NAT cache management */
 262        struct radix_tree_root nat_root;/* root of the nat entry cache */
 263        rwlock_t nat_tree_lock;         /* protect nat_tree_lock */
 264        unsigned int nat_cnt;           /* the # of cached nat entries */
 265        struct list_head nat_entries;   /* cached nat entry list (clean) */
 266        struct list_head dirty_nat_entries; /* cached nat entry list (dirty) */
 267        struct list_head nat_entry_set; /* nat entry set list */
 268        unsigned int dirty_nat_cnt;     /* total num of nat entries in set */
 269
 270        /* free node ids management */
 271        struct radix_tree_root free_nid_root;/* root of the free_nid cache */
 272        struct list_head free_nid_list; /* a list for free nids */
 273        spinlock_t free_nid_list_lock;  /* protect free nid list */
 274        unsigned int fcnt;              /* the number of free node id */
 275        struct mutex build_lock;        /* lock for build free nids */
 276
 277        /* for checkpoint */
 278        char *nat_bitmap;               /* NAT bitmap pointer */
 279        int bitmap_size;                /* bitmap size */
 280};
 281
 282/*
 283 * this structure is used as one of function parameters.
 284 * all the information are dedicated to a given direct node block determined
 285 * by the data offset in a file.
 286 */
 287struct dnode_of_data {
 288        struct inode *inode;            /* vfs inode pointer */
 289        struct page *inode_page;        /* its inode page, NULL is possible */
 290        struct page *node_page;         /* cached direct node page */
 291        nid_t nid;                      /* node id of the direct node block */
 292        unsigned int ofs_in_node;       /* data offset in the node page */
 293        bool inode_page_locked;         /* inode page is locked or not */
 294        block_t data_blkaddr;           /* block address of the node block */
 295};
 296
 297static inline void set_new_dnode(struct dnode_of_data *dn, struct inode *inode,
 298                struct page *ipage, struct page *npage, nid_t nid)
 299{
 300        memset(dn, 0, sizeof(*dn));
 301        dn->inode = inode;
 302        dn->inode_page = ipage;
 303        dn->node_page = npage;
 304        dn->nid = nid;
 305}
 306
 307/*
 308 * For SIT manager
 309 *
 310 * By default, there are 6 active log areas across the whole main area.
 311 * When considering hot and cold data separation to reduce cleaning overhead,
 312 * we split 3 for data logs and 3 for node logs as hot, warm, and cold types,
 313 * respectively.
 314 * In the current design, you should not change the numbers intentionally.
 315 * Instead, as a mount option such as active_logs=x, you can use 2, 4, and 6
 316 * logs individually according to the underlying devices. (default: 6)
 317 * Just in case, on-disk layout covers maximum 16 logs that consist of 8 for
 318 * data and 8 for node logs.
 319 */
 320#define NR_CURSEG_DATA_TYPE     (3)
 321#define NR_CURSEG_NODE_TYPE     (3)
 322#define NR_CURSEG_TYPE  (NR_CURSEG_DATA_TYPE + NR_CURSEG_NODE_TYPE)
 323
 324enum {
 325        CURSEG_HOT_DATA = 0,    /* directory entry blocks */
 326        CURSEG_WARM_DATA,       /* data blocks */
 327        CURSEG_COLD_DATA,       /* multimedia or GCed data blocks */
 328        CURSEG_HOT_NODE,        /* direct node blocks of directory files */
 329        CURSEG_WARM_NODE,       /* direct node blocks of normal files */
 330        CURSEG_COLD_NODE,       /* indirect node blocks */
 331        NO_CHECK_TYPE
 332};
 333
 334struct flush_cmd {
 335        struct flush_cmd *next;
 336        struct completion wait;
 337        int ret;
 338};
 339
 340struct flush_cmd_control {
 341        struct task_struct *f2fs_issue_flush;   /* flush thread */
 342        wait_queue_head_t flush_wait_queue;     /* waiting queue for wake-up */
 343        struct flush_cmd *issue_list;           /* list for command issue */
 344        struct flush_cmd *dispatch_list;        /* list for command dispatch */
 345        spinlock_t issue_lock;                  /* for issue list lock */
 346        struct flush_cmd *issue_tail;           /* list tail of issue list */
 347};
 348
 349struct f2fs_sm_info {
 350        struct sit_info *sit_info;              /* whole segment information */
 351        struct free_segmap_info *free_info;     /* free segment information */
 352        struct dirty_seglist_info *dirty_info;  /* dirty segment information */
 353        struct curseg_info *curseg_array;       /* active segment information */
 354
 355        block_t seg0_blkaddr;           /* block address of 0'th segment */
 356        block_t main_blkaddr;           /* start block address of main area */
 357        block_t ssa_blkaddr;            /* start block address of SSA area */
 358
 359        unsigned int segment_count;     /* total # of segments */
 360        unsigned int main_segments;     /* # of segments in main area */
 361        unsigned int reserved_segments; /* # of reserved segments */
 362        unsigned int ovp_segments;      /* # of overprovision segments */
 363
 364        /* a threshold to reclaim prefree segments */
 365        unsigned int rec_prefree_segments;
 366
 367        /* for small discard management */
 368        struct list_head discard_list;          /* 4KB discard list */
 369        int nr_discards;                        /* # of discards in the list */
 370        int max_discards;                       /* max. discards to be issued */
 371
 372        unsigned int ipu_policy;        /* in-place-update policy */
 373        unsigned int min_ipu_util;      /* in-place-update threshold */
 374
 375        /* for flush command control */
 376        struct flush_cmd_control *cmd_control_info;
 377
 378};
 379
 380/*
 381 * For superblock
 382 */
 383/*
 384 * COUNT_TYPE for monitoring
 385 *
 386 * f2fs monitors the number of several block types such as on-writeback,
 387 * dirty dentry blocks, dirty node blocks, and dirty meta blocks.
 388 */
 389enum count_type {
 390        F2FS_WRITEBACK,
 391        F2FS_DIRTY_DENTS,
 392        F2FS_DIRTY_NODES,
 393        F2FS_DIRTY_META,
 394        NR_COUNT_TYPE,
 395};
 396
 397/*
 398 * The below are the page types of bios used in submit_bio().
 399 * The available types are:
 400 * DATA                 User data pages. It operates as async mode.
 401 * NODE                 Node pages. It operates as async mode.
 402 * META                 FS metadata pages such as SIT, NAT, CP.
 403 * NR_PAGE_TYPE         The number of page types.
 404 * META_FLUSH           Make sure the previous pages are written
 405 *                      with waiting the bio's completion
 406 * ...                  Only can be used with META.
 407 */
 408#define PAGE_TYPE_OF_BIO(type)  ((type) > META ? META : (type))
 409enum page_type {
 410        DATA,
 411        NODE,
 412        META,
 413        NR_PAGE_TYPE,
 414        META_FLUSH,
 415};
 416
 417struct f2fs_io_info {
 418        enum page_type type;    /* contains DATA/NODE/META/META_FLUSH */
 419        int rw;                 /* contains R/RS/W/WS with REQ_META/REQ_PRIO */
 420};
 421
 422#define is_read_io(rw)  (((rw) & 1) == READ)
 423struct f2fs_bio_info {
 424        struct f2fs_sb_info *sbi;       /* f2fs superblock */
 425        struct bio *bio;                /* bios to merge */
 426        sector_t last_block_in_bio;     /* last block number */
 427        struct f2fs_io_info fio;        /* store buffered io info. */
 428        struct rw_semaphore io_rwsem;   /* blocking op for bio */
 429};
 430
 431struct f2fs_sb_info {
 432        struct super_block *sb;                 /* pointer to VFS super block */
 433        struct proc_dir_entry *s_proc;          /* proc entry */
 434        struct buffer_head *raw_super_buf;      /* buffer head of raw sb */
 435        struct f2fs_super_block *raw_super;     /* raw super block pointer */
 436        int s_dirty;                            /* dirty flag for checkpoint */
 437
 438        /* for node-related operations */
 439        struct f2fs_nm_info *nm_info;           /* node manager */
 440        struct inode *node_inode;               /* cache node blocks */
 441
 442        /* for segment-related operations */
 443        struct f2fs_sm_info *sm_info;           /* segment manager */
 444
 445        /* for bio operations */
 446        struct f2fs_bio_info read_io;                   /* for read bios */
 447        struct f2fs_bio_info write_io[NR_PAGE_TYPE];    /* for write bios */
 448        struct completion *wait_io;             /* for completion bios */
 449
 450        /* for checkpoint */
 451        struct f2fs_checkpoint *ckpt;           /* raw checkpoint pointer */
 452        struct inode *meta_inode;               /* cache meta blocks */
 453        struct mutex cp_mutex;                  /* checkpoint procedure lock */
 454        struct rw_semaphore cp_rwsem;           /* blocking FS operations */
 455        struct rw_semaphore node_write;         /* locking node writes */
 456        struct mutex writepages;                /* mutex for writepages() */
 457        bool por_doing;                         /* recovery is doing or not */
 458        wait_queue_head_t cp_wait;
 459
 460        /* for inode management */
 461        struct radix_tree_root ino_root[MAX_INO_ENTRY]; /* ino entry array */
 462        spinlock_t ino_lock[MAX_INO_ENTRY];             /* for ino entry lock */
 463        struct list_head ino_list[MAX_INO_ENTRY];       /* inode list head */
 464
 465        /* for orphan inode, use 0'th array */
 466        unsigned int n_orphans;                 /* # of orphan inodes */
 467        unsigned int max_orphans;               /* max orphan inodes */
 468
 469        /* for directory inode management */
 470        struct list_head dir_inode_list;        /* dir inode list */
 471        spinlock_t dir_inode_lock;              /* for dir inode list lock */
 472
 473        /* basic filesystem units */
 474        unsigned int log_sectors_per_block;     /* log2 sectors per block */
 475        unsigned int log_blocksize;             /* log2 block size */
 476        unsigned int blocksize;                 /* block size */
 477        unsigned int root_ino_num;              /* root inode number*/
 478        unsigned int node_ino_num;              /* node inode number*/
 479        unsigned int meta_ino_num;              /* meta inode number*/
 480        unsigned int log_blocks_per_seg;        /* log2 blocks per segment */
 481        unsigned int blocks_per_seg;            /* blocks per segment */
 482        unsigned int segs_per_sec;              /* segments per section */
 483        unsigned int secs_per_zone;             /* sections per zone */
 484        unsigned int total_sections;            /* total section count */
 485        unsigned int total_node_count;          /* total node block count */
 486        unsigned int total_valid_node_count;    /* valid node block count */
 487        unsigned int total_valid_inode_count;   /* valid inode count */
 488        int active_logs;                        /* # of active logs */
 489        int dir_level;                          /* directory level */
 490
 491        block_t user_block_count;               /* # of user blocks */
 492        block_t total_valid_block_count;        /* # of valid blocks */
 493        block_t alloc_valid_block_count;        /* # of allocated blocks */
 494        block_t last_valid_block_count;         /* for recovery */
 495        u32 s_next_generation;                  /* for NFS support */
 496        atomic_t nr_pages[NR_COUNT_TYPE];       /* # of pages, see count_type */
 497
 498        struct f2fs_mount_info mount_opt;       /* mount options */
 499
 500        /* for cleaning operations */
 501        struct mutex gc_mutex;                  /* mutex for GC */
 502        struct f2fs_gc_kthread  *gc_thread;     /* GC thread */
 503        unsigned int cur_victim_sec;            /* current victim section num */
 504
 505        /* maximum # of trials to find a victim segment for SSR and GC */
 506        unsigned int max_victim_search;
 507
 508        /*
 509         * for stat information.
 510         * one is for the LFS mode, and the other is for the SSR mode.
 511         */
 512#ifdef CONFIG_F2FS_STAT_FS
 513        struct f2fs_stat_info *stat_info;       /* FS status information */
 514        unsigned int segment_count[2];          /* # of allocated segments */
 515        unsigned int block_count[2];            /* # of allocated blocks */
 516        int total_hit_ext, read_hit_ext;        /* extent cache hit ratio */
 517        int inline_inode;                       /* # of inline_data inodes */
 518        int bg_gc;                              /* background gc calls */
 519        unsigned int n_dirty_dirs;              /* # of dir inodes */
 520#endif
 521        unsigned int last_victim[2];            /* last victim segment # */
 522        spinlock_t stat_lock;                   /* lock for stat operations */
 523
 524        /* For sysfs suppport */
 525        struct kobject s_kobj;
 526        struct completion s_kobj_unregister;
 527};
 528
 529/*
 530 * Inline functions
 531 */
 532static inline struct f2fs_inode_info *F2FS_I(struct inode *inode)
 533{
 534        return container_of(inode, struct f2fs_inode_info, vfs_inode);
 535}
 536
 537static inline struct f2fs_sb_info *F2FS_SB(struct super_block *sb)
 538{
 539        return sb->s_fs_info;
 540}
 541
 542static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
 543{
 544        return (struct f2fs_super_block *)(sbi->raw_super);
 545}
 546
 547static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi)
 548{
 549        return (struct f2fs_checkpoint *)(sbi->ckpt);
 550}
 551
 552static inline struct f2fs_node *F2FS_NODE(struct page *page)
 553{
 554        return (struct f2fs_node *)page_address(page);
 555}
 556
 557static inline struct f2fs_inode *F2FS_INODE(struct page *page)
 558{
 559        return &((struct f2fs_node *)page_address(page))->i;
 560}
 561
 562static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi)
 563{
 564        return (struct f2fs_nm_info *)(sbi->nm_info);
 565}
 566
 567static inline struct f2fs_sm_info *SM_I(struct f2fs_sb_info *sbi)
 568{
 569        return (struct f2fs_sm_info *)(sbi->sm_info);
 570}
 571
 572static inline struct sit_info *SIT_I(struct f2fs_sb_info *sbi)
 573{
 574        return (struct sit_info *)(SM_I(sbi)->sit_info);
 575}
 576
 577static inline struct free_segmap_info *FREE_I(struct f2fs_sb_info *sbi)
 578{
 579        return (struct free_segmap_info *)(SM_I(sbi)->free_info);
 580}
 581
 582static inline struct dirty_seglist_info *DIRTY_I(struct f2fs_sb_info *sbi)
 583{
 584        return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info);
 585}
 586
 587static inline struct address_space *META_MAPPING(struct f2fs_sb_info *sbi)
 588{
 589        return sbi->meta_inode->i_mapping;
 590}
 591
 592static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi)
 593{
 594        return sbi->node_inode->i_mapping;
 595}
 596
 597static inline void F2FS_SET_SB_DIRT(struct f2fs_sb_info *sbi)
 598{
 599        sbi->s_dirty = 1;
 600}
 601
 602static inline void F2FS_RESET_SB_DIRT(struct f2fs_sb_info *sbi)
 603{
 604        sbi->s_dirty = 0;
 605}
 606
 607static inline unsigned long long cur_cp_version(struct f2fs_checkpoint *cp)
 608{
 609        return le64_to_cpu(cp->checkpoint_ver);
 610}
 611
 612static inline bool is_set_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
 613{
 614        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
 615        return ckpt_flags & f;
 616}
 617
 618static inline void set_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
 619{
 620        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
 621        ckpt_flags |= f;
 622        cp->ckpt_flags = cpu_to_le32(ckpt_flags);
 623}
 624
 625static inline void clear_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
 626{
 627        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
 628        ckpt_flags &= (~f);
 629        cp->ckpt_flags = cpu_to_le32(ckpt_flags);
 630}
 631
 632static inline void f2fs_lock_op(struct f2fs_sb_info *sbi)
 633{
 634        down_read(&sbi->cp_rwsem);
 635}
 636
 637static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi)
 638{
 639        up_read(&sbi->cp_rwsem);
 640}
 641
 642static inline void f2fs_lock_all(struct f2fs_sb_info *sbi)
 643{
 644        f2fs_down_write(&sbi->cp_rwsem, &sbi->cp_mutex);
 645}
 646
 647static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi)
 648{
 649        up_write(&sbi->cp_rwsem);
 650}
 651
 652/*
 653 * Check whether the given nid is within node id range.
 654 */
 655static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
 656{
 657        if (unlikely(nid < F2FS_ROOT_INO(sbi)))
 658                return -EINVAL;
 659        if (unlikely(nid >= NM_I(sbi)->max_nid))
 660                return -EINVAL;
 661        return 0;
 662}
 663
 664#define F2FS_DEFAULT_ALLOCATED_BLOCKS   1
 665
 666/*
 667 * Check whether the inode has blocks or not
 668 */
 669static inline int F2FS_HAS_BLOCKS(struct inode *inode)
 670{
 671        if (F2FS_I(inode)->i_xattr_nid)
 672                return inode->i_blocks > F2FS_DEFAULT_ALLOCATED_BLOCKS + 1;
 673        else
 674                return inode->i_blocks > F2FS_DEFAULT_ALLOCATED_BLOCKS;
 675}
 676
 677static inline bool f2fs_has_xattr_block(unsigned int ofs)
 678{
 679        return ofs == XATTR_NODE_OFFSET;
 680}
 681
 682static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi,
 683                                 struct inode *inode, blkcnt_t count)
 684{
 685        block_t valid_block_count;
 686
 687        spin_lock(&sbi->stat_lock);
 688        valid_block_count =
 689                sbi->total_valid_block_count + (block_t)count;
 690        if (unlikely(valid_block_count > sbi->user_block_count)) {
 691                spin_unlock(&sbi->stat_lock);
 692                return false;
 693        }
 694        inode->i_blocks += count;
 695        sbi->total_valid_block_count = valid_block_count;
 696        sbi->alloc_valid_block_count += (block_t)count;
 697        spin_unlock(&sbi->stat_lock);
 698        return true;
 699}
 700
 701static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
 702                                                struct inode *inode,
 703                                                blkcnt_t count)
 704{
 705        spin_lock(&sbi->stat_lock);
 706        f2fs_bug_on(sbi->total_valid_block_count < (block_t) count);
 707        f2fs_bug_on(inode->i_blocks < count);
 708        inode->i_blocks -= count;
 709        sbi->total_valid_block_count -= (block_t)count;
 710        spin_unlock(&sbi->stat_lock);
 711}
 712
 713static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type)
 714{
 715        atomic_inc(&sbi->nr_pages[count_type]);
 716        F2FS_SET_SB_DIRT(sbi);
 717}
 718
 719static inline void inode_inc_dirty_dents(struct inode *inode)
 720{
 721        inc_page_count(F2FS_SB(inode->i_sb), F2FS_DIRTY_DENTS);
 722        atomic_inc(&F2FS_I(inode)->dirty_dents);
 723}
 724
 725static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type)
 726{
 727        atomic_dec(&sbi->nr_pages[count_type]);
 728}
 729
 730static inline void inode_dec_dirty_dents(struct inode *inode)
 731{
 732        if (!S_ISDIR(inode->i_mode))
 733                return;
 734
 735        dec_page_count(F2FS_SB(inode->i_sb), F2FS_DIRTY_DENTS);
 736        atomic_dec(&F2FS_I(inode)->dirty_dents);
 737}
 738
 739static inline int get_pages(struct f2fs_sb_info *sbi, int count_type)
 740{
 741        return atomic_read(&sbi->nr_pages[count_type]);
 742}
 743
 744static inline int get_dirty_dents(struct inode *inode)
 745{
 746        return atomic_read(&F2FS_I(inode)->dirty_dents);
 747}
 748
 749static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type)
 750{
 751        unsigned int pages_per_sec = sbi->segs_per_sec *
 752                                        (1 << sbi->log_blocks_per_seg);
 753        return ((get_pages(sbi, block_type) + pages_per_sec - 1)
 754                        >> sbi->log_blocks_per_seg) / sbi->segs_per_sec;
 755}
 756
 757static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi)
 758{
 759        return sbi->total_valid_block_count;
 760}
 761
 762static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag)
 763{
 764        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
 765
 766        /* return NAT or SIT bitmap */
 767        if (flag == NAT_BITMAP)
 768                return le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
 769        else if (flag == SIT_BITMAP)
 770                return le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
 771
 772        return 0;
 773}
 774
 775static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag)
 776{
 777        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
 778        int offset;
 779
 780        if (le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_payload) > 0) {
 781                if (flag == NAT_BITMAP)
 782                        return &ckpt->sit_nat_version_bitmap;
 783                else
 784                        return (unsigned char *)ckpt + F2FS_BLKSIZE;
 785        } else {
 786                offset = (flag == NAT_BITMAP) ?
 787                        le32_to_cpu(ckpt->sit_ver_bitmap_bytesize) : 0;
 788                return &ckpt->sit_nat_version_bitmap + offset;
 789        }
 790}
 791
 792static inline block_t __start_cp_addr(struct f2fs_sb_info *sbi)
 793{
 794        block_t start_addr;
 795        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
 796        unsigned long long ckpt_version = cur_cp_version(ckpt);
 797
 798        start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr);
 799
 800        /*
 801         * odd numbered checkpoint should at cp segment 0
 802         * and even segment must be at cp segment 1
 803         */
 804        if (!(ckpt_version & 1))
 805                start_addr += sbi->blocks_per_seg;
 806
 807        return start_addr;
 808}
 809
 810static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi)
 811{
 812        return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum);
 813}
 814
 815static inline bool inc_valid_node_count(struct f2fs_sb_info *sbi,
 816                                                struct inode *inode)
 817{
 818        block_t valid_block_count;
 819        unsigned int valid_node_count;
 820
 821        spin_lock(&sbi->stat_lock);
 822
 823        valid_block_count = sbi->total_valid_block_count + 1;
 824        if (unlikely(valid_block_count > sbi->user_block_count)) {
 825                spin_unlock(&sbi->stat_lock);
 826                return false;
 827        }
 828
 829        valid_node_count = sbi->total_valid_node_count + 1;
 830        if (unlikely(valid_node_count > sbi->total_node_count)) {
 831                spin_unlock(&sbi->stat_lock);
 832                return false;
 833        }
 834
 835        if (inode)
 836                inode->i_blocks++;
 837
 838        sbi->alloc_valid_block_count++;
 839        sbi->total_valid_node_count++;
 840        sbi->total_valid_block_count++;
 841        spin_unlock(&sbi->stat_lock);
 842
 843        return true;
 844}
 845
 846static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
 847                                                struct inode *inode)
 848{
 849        spin_lock(&sbi->stat_lock);
 850
 851        f2fs_bug_on(!sbi->total_valid_block_count);
 852        f2fs_bug_on(!sbi->total_valid_node_count);
 853        f2fs_bug_on(!inode->i_blocks);
 854
 855        inode->i_blocks--;
 856        sbi->total_valid_node_count--;
 857        sbi->total_valid_block_count--;
 858
 859        spin_unlock(&sbi->stat_lock);
 860}
 861
 862static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi)
 863{
 864        return sbi->total_valid_node_count;
 865}
 866
 867static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi)
 868{
 869        spin_lock(&sbi->stat_lock);
 870        f2fs_bug_on(sbi->total_valid_inode_count == sbi->total_node_count);
 871        sbi->total_valid_inode_count++;
 872        spin_unlock(&sbi->stat_lock);
 873}
 874
 875static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi)
 876{
 877        spin_lock(&sbi->stat_lock);
 878        f2fs_bug_on(!sbi->total_valid_inode_count);
 879        sbi->total_valid_inode_count--;
 880        spin_unlock(&sbi->stat_lock);
 881}
 882
 883static inline unsigned int valid_inode_count(struct f2fs_sb_info *sbi)
 884{
 885        return sbi->total_valid_inode_count;
 886}
 887
 888static inline void f2fs_put_page(struct page *page, int unlock)
 889{
 890        if (!page)
 891                return;
 892
 893        if (unlock) {
 894                f2fs_bug_on(!PageLocked(page));
 895                unlock_page(page);
 896        }
 897        page_cache_release(page);
 898}
 899
 900static inline void f2fs_put_dnode(struct dnode_of_data *dn)
 901{
 902        if (dn->node_page)
 903                f2fs_put_page(dn->node_page, 1);
 904        if (dn->inode_page && dn->node_page != dn->inode_page)
 905                f2fs_put_page(dn->inode_page, 0);
 906        dn->node_page = NULL;
 907        dn->inode_page = NULL;
 908}
 909
 910static inline struct kmem_cache *f2fs_kmem_cache_create(const char *name,
 911                                        size_t size)
 912{
 913        return kmem_cache_create(name, size, 0, SLAB_RECLAIM_ACCOUNT, NULL);
 914}
 915
 916static inline void *f2fs_kmem_cache_alloc(struct kmem_cache *cachep,
 917                                                gfp_t flags)
 918{
 919        void *entry;
 920retry:
 921        entry = kmem_cache_alloc(cachep, flags);
 922        if (!entry) {
 923                cond_resched();
 924                goto retry;
 925        }
 926
 927        return entry;
 928}
 929
 930#define RAW_IS_INODE(p) ((p)->footer.nid == (p)->footer.ino)
 931
 932static inline bool IS_INODE(struct page *page)
 933{
 934        struct f2fs_node *p = F2FS_NODE(page);
 935        return RAW_IS_INODE(p);
 936}
 937
 938static inline __le32 *blkaddr_in_node(struct f2fs_node *node)
 939{
 940        return RAW_IS_INODE(node) ? node->i.i_addr : node->dn.addr;
 941}
 942
 943static inline block_t datablock_addr(struct page *node_page,
 944                unsigned int offset)
 945{
 946        struct f2fs_node *raw_node;
 947        __le32 *addr_array;
 948        raw_node = F2FS_NODE(node_page);
 949        addr_array = blkaddr_in_node(raw_node);
 950        return le32_to_cpu(addr_array[offset]);
 951}
 952
 953static inline int f2fs_test_bit(unsigned int nr, char *addr)
 954{
 955        int mask;
 956
 957        addr += (nr >> 3);
 958        mask = 1 << (7 - (nr & 0x07));
 959        return mask & *addr;
 960}
 961
 962static inline int f2fs_set_bit(unsigned int nr, char *addr)
 963{
 964        int mask;
 965        int ret;
 966
 967        addr += (nr >> 3);
 968        mask = 1 << (7 - (nr & 0x07));
 969        ret = mask & *addr;
 970        *addr |= mask;
 971        return ret;
 972}
 973
 974static inline int f2fs_clear_bit(unsigned int nr, char *addr)
 975{
 976        int mask;
 977        int ret;
 978
 979        addr += (nr >> 3);
 980        mask = 1 << (7 - (nr & 0x07));
 981        ret = mask & *addr;
 982        *addr &= ~mask;
 983        return ret;
 984}
 985
 986/* used for f2fs_inode_info->flags */
 987enum {
 988        FI_NEW_INODE,           /* indicate newly allocated inode */
 989        FI_DIRTY_INODE,         /* indicate inode is dirty or not */
 990        FI_DIRTY_DIR,           /* indicate directory has dirty pages */
 991        FI_INC_LINK,            /* need to increment i_nlink */
 992        FI_ACL_MODE,            /* indicate acl mode */
 993        FI_NO_ALLOC,            /* should not allocate any blocks */
 994        FI_UPDATE_DIR,          /* should update inode block for consistency */
 995        FI_DELAY_IPUT,          /* used for the recovery */
 996        FI_NO_EXTENT,           /* not to use the extent cache */
 997        FI_INLINE_XATTR,        /* used for inline xattr */
 998        FI_INLINE_DATA,         /* used for inline data*/
 999        FI_APPEND_WRITE,        /* inode has appended data */
1000        FI_UPDATE_WRITE,        /* inode has in-place-update data */
1001        FI_NEED_IPU,            /* used fo ipu for fdatasync */
1002};
1003
1004static inline void set_inode_flag(struct f2fs_inode_info *fi, int flag)
1005{
1006        if (!test_bit(flag, &fi->flags))
1007                set_bit(flag, &fi->flags);
1008}
1009
1010static inline int is_inode_flag_set(struct f2fs_inode_info *fi, int flag)
1011{
1012        return test_bit(flag, &fi->flags);
1013}
1014
1015static inline void clear_inode_flag(struct f2fs_inode_info *fi, int flag)
1016{
1017        if (test_bit(flag, &fi->flags))
1018                clear_bit(flag, &fi->flags);
1019}
1020
1021static inline void set_acl_inode(struct f2fs_inode_info *fi, umode_t mode)
1022{
1023        fi->i_acl_mode = mode;
1024        set_inode_flag(fi, FI_ACL_MODE);
1025}
1026
1027static inline int cond_clear_inode_flag(struct f2fs_inode_info *fi, int flag)
1028{
1029        if (is_inode_flag_set(fi, FI_ACL_MODE)) {
1030                clear_inode_flag(fi, FI_ACL_MODE);
1031                return 1;
1032        }
1033        return 0;
1034}
1035
1036static inline void get_inline_info(struct f2fs_inode_info *fi,
1037                                        struct f2fs_inode *ri)
1038{
1039        if (ri->i_inline & F2FS_INLINE_XATTR)
1040                set_inode_flag(fi, FI_INLINE_XATTR);
1041        if (ri->i_inline & F2FS_INLINE_DATA)
1042                set_inode_flag(fi, FI_INLINE_DATA);
1043}
1044
1045static inline void set_raw_inline(struct f2fs_inode_info *fi,
1046                                        struct f2fs_inode *ri)
1047{
1048        ri->i_inline = 0;
1049
1050        if (is_inode_flag_set(fi, FI_INLINE_XATTR))
1051                ri->i_inline |= F2FS_INLINE_XATTR;
1052        if (is_inode_flag_set(fi, FI_INLINE_DATA))
1053                ri->i_inline |= F2FS_INLINE_DATA;
1054}
1055
1056static inline int f2fs_has_inline_xattr(struct inode *inode)
1057{
1058        return is_inode_flag_set(F2FS_I(inode), FI_INLINE_XATTR);
1059}
1060
1061static inline unsigned int addrs_per_inode(struct f2fs_inode_info *fi)
1062{
1063        if (f2fs_has_inline_xattr(&fi->vfs_inode))
1064                return DEF_ADDRS_PER_INODE - F2FS_INLINE_XATTR_ADDRS;
1065        return DEF_ADDRS_PER_INODE;
1066}
1067
1068static inline void *inline_xattr_addr(struct page *page)
1069{
1070        struct f2fs_inode *ri = F2FS_INODE(page);
1071        return (void *)&(ri->i_addr[DEF_ADDRS_PER_INODE -
1072                                        F2FS_INLINE_XATTR_ADDRS]);
1073}
1074
1075static inline int inline_xattr_size(struct inode *inode)
1076{
1077        if (f2fs_has_inline_xattr(inode))
1078                return F2FS_INLINE_XATTR_ADDRS << 2;
1079        else
1080                return 0;
1081}
1082
1083static inline int f2fs_has_inline_data(struct inode *inode)
1084{
1085        return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DATA);
1086}
1087
1088static inline void *inline_data_addr(struct page *page)
1089{
1090        struct f2fs_inode *ri = F2FS_INODE(page);
1091        return (void *)&(ri->i_addr[1]);
1092}
1093
1094static inline int f2fs_readonly(struct super_block *sb)
1095{
1096        return sb->s_flags & MS_RDONLY;
1097}
1098
1099static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi)
1100{
1101        return is_set_ckpt_flags(sbi->ckpt, CP_ERROR_FLAG);
1102}
1103
1104static inline void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi)
1105{
1106        set_ckpt_flags(sbi->ckpt, CP_ERROR_FLAG);
1107        sbi->sb->s_flags |= MS_RDONLY;
1108}
1109
1110#define get_inode_mode(i) \
1111        ((is_inode_flag_set(F2FS_I(i), FI_ACL_MODE)) ? \
1112         (F2FS_I(i)->i_acl_mode) : ((i)->i_mode))
1113
1114/* get offset of first page in next direct node */
1115#define PGOFS_OF_NEXT_DNODE(pgofs, fi)                          \
1116        ((pgofs < ADDRS_PER_INODE(fi)) ? ADDRS_PER_INODE(fi) :  \
1117        (pgofs - ADDRS_PER_INODE(fi) + ADDRS_PER_BLOCK) /       \
1118        ADDRS_PER_BLOCK * ADDRS_PER_BLOCK + ADDRS_PER_INODE(fi))
1119
1120/*
1121 * file.c
1122 */
1123int f2fs_sync_file(struct file *, loff_t, loff_t, int);
1124void truncate_data_blocks(struct dnode_of_data *);
1125int truncate_blocks(struct inode *, u64, bool);
1126void f2fs_truncate(struct inode *);
1127int f2fs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
1128int f2fs_setattr(struct dentry *, struct iattr *);
1129int truncate_hole(struct inode *, pgoff_t, pgoff_t);
1130int truncate_data_blocks_range(struct dnode_of_data *, int);
1131long f2fs_ioctl(struct file *, unsigned int, unsigned long);
1132long f2fs_compat_ioctl(struct file *, unsigned int, unsigned long);
1133
1134/*
1135 * inode.c
1136 */
1137void f2fs_set_inode_flags(struct inode *);
1138struct inode *f2fs_iget(struct super_block *, unsigned long);
1139int try_to_free_nats(struct f2fs_sb_info *, int);
1140void update_inode(struct inode *, struct page *);
1141void update_inode_page(struct inode *);
1142int f2fs_write_inode(struct inode *, struct writeback_control *);
1143void f2fs_evict_inode(struct inode *);
1144
1145/*
1146 * namei.c
1147 */
1148struct dentry *f2fs_get_parent(struct dentry *child);
1149
1150/*
1151 * dir.c
1152 */
1153struct f2fs_dir_entry *f2fs_find_entry(struct inode *, struct qstr *,
1154                                                        struct page **);
1155struct f2fs_dir_entry *f2fs_parent_dir(struct inode *, struct page **);
1156ino_t f2fs_inode_by_name(struct inode *, struct qstr *);
1157void f2fs_set_link(struct inode *, struct f2fs_dir_entry *,
1158                                struct page *, struct inode *);
1159int update_dent_inode(struct inode *, const struct qstr *);
1160int __f2fs_add_link(struct inode *, const struct qstr *, struct inode *);
1161void f2fs_delete_entry(struct f2fs_dir_entry *, struct page *, struct inode *);
1162int f2fs_do_tmpfile(struct inode *, struct inode *);
1163int f2fs_make_empty(struct inode *, struct inode *);
1164bool f2fs_empty_dir(struct inode *);
1165
1166static inline int f2fs_add_link(struct dentry *dentry, struct inode *inode)
1167{
1168        return __f2fs_add_link(dentry->d_parent->d_inode, &dentry->d_name,
1169                                inode);
1170}
1171
1172/*
1173 * super.c
1174 */
1175int f2fs_sync_fs(struct super_block *, int);
1176extern __printf(3, 4)
1177void f2fs_msg(struct super_block *, const char *, const char *, ...);
1178
1179/*
1180 * hash.c
1181 */
1182f2fs_hash_t f2fs_dentry_hash(const struct qstr *);
1183
1184/*
1185 * node.c
1186 */
1187struct dnode_of_data;
1188struct node_info;
1189
1190bool available_free_memory(struct f2fs_sb_info *, int);
1191int is_checkpointed_node(struct f2fs_sb_info *, nid_t);
1192bool fsync_mark_done(struct f2fs_sb_info *, nid_t);
1193void fsync_mark_clear(struct f2fs_sb_info *, nid_t);
1194void get_node_info(struct f2fs_sb_info *, nid_t, struct node_info *);
1195int get_dnode_of_data(struct dnode_of_data *, pgoff_t, int);
1196int truncate_inode_blocks(struct inode *, pgoff_t);
1197int truncate_xattr_node(struct inode *, struct page *);
1198int wait_on_node_pages_writeback(struct f2fs_sb_info *, nid_t);
1199void remove_inode_page(struct inode *);
1200struct page *new_inode_page(struct inode *);
1201struct page *new_node_page(struct dnode_of_data *, unsigned int, struct page *);
1202void ra_node_page(struct f2fs_sb_info *, nid_t);
1203struct page *get_node_page(struct f2fs_sb_info *, pgoff_t);
1204struct page *get_node_page_ra(struct page *, int);
1205void sync_inode_page(struct dnode_of_data *);
1206int sync_node_pages(struct f2fs_sb_info *, nid_t, struct writeback_control *);
1207bool alloc_nid(struct f2fs_sb_info *, nid_t *);
1208void alloc_nid_done(struct f2fs_sb_info *, nid_t);
1209void alloc_nid_failed(struct f2fs_sb_info *, nid_t);
1210void recover_inline_xattr(struct inode *, struct page *);
1211void recover_xattr_data(struct inode *, struct page *, block_t);
1212int recover_inode_page(struct f2fs_sb_info *, struct page *);
1213int restore_node_summary(struct f2fs_sb_info *, unsigned int,
1214                                struct f2fs_summary_block *);
1215void flush_nat_entries(struct f2fs_sb_info *);
1216int build_node_manager(struct f2fs_sb_info *);
1217void destroy_node_manager(struct f2fs_sb_info *);
1218int __init create_node_manager_caches(void);
1219void destroy_node_manager_caches(void);
1220
1221/*
1222 * segment.c
1223 */
1224void f2fs_balance_fs(struct f2fs_sb_info *);
1225void f2fs_balance_fs_bg(struct f2fs_sb_info *);
1226int f2fs_issue_flush(struct f2fs_sb_info *);
1227int create_flush_cmd_control(struct f2fs_sb_info *);
1228void destroy_flush_cmd_control(struct f2fs_sb_info *);
1229void invalidate_blocks(struct f2fs_sb_info *, block_t);
1230void refresh_sit_entry(struct f2fs_sb_info *, block_t, block_t);
1231void clear_prefree_segments(struct f2fs_sb_info *);
1232void discard_next_dnode(struct f2fs_sb_info *, block_t);
1233int npages_for_summary_flush(struct f2fs_sb_info *);
1234void allocate_new_segments(struct f2fs_sb_info *);
1235struct page *get_sum_page(struct f2fs_sb_info *, unsigned int);
1236void write_meta_page(struct f2fs_sb_info *, struct page *);
1237void write_node_page(struct f2fs_sb_info *, struct page *,
1238                struct f2fs_io_info *, unsigned int, block_t, block_t *);
1239void write_data_page(struct page *, struct dnode_of_data *, block_t *,
1240                                        struct f2fs_io_info *);
1241void rewrite_data_page(struct page *, block_t, struct f2fs_io_info *);
1242void recover_data_page(struct f2fs_sb_info *, struct page *,
1243                                struct f2fs_summary *, block_t, block_t);
1244void allocate_data_block(struct f2fs_sb_info *, struct page *,
1245                block_t, block_t *, struct f2fs_summary *, int);
1246void f2fs_wait_on_page_writeback(struct page *, enum page_type);
1247void write_data_summaries(struct f2fs_sb_info *, block_t);
1248void write_node_summaries(struct f2fs_sb_info *, block_t);
1249int lookup_journal_in_cursum(struct f2fs_summary_block *,
1250                                        int, unsigned int, int);
1251void flush_sit_entries(struct f2fs_sb_info *);
1252int build_segment_manager(struct f2fs_sb_info *);
1253void destroy_segment_manager(struct f2fs_sb_info *);
1254int __init create_segment_manager_caches(void);
1255void destroy_segment_manager_caches(void);
1256
1257/*
1258 * checkpoint.c
1259 */
1260struct page *grab_meta_page(struct f2fs_sb_info *, pgoff_t);
1261struct page *get_meta_page(struct f2fs_sb_info *, pgoff_t);
1262int ra_meta_pages(struct f2fs_sb_info *, int, int, int);
1263long sync_meta_pages(struct f2fs_sb_info *, enum page_type, long);
1264void add_dirty_inode(struct f2fs_sb_info *, nid_t, int type);
1265void remove_dirty_inode(struct f2fs_sb_info *, nid_t, int type);
1266void release_dirty_inode(struct f2fs_sb_info *);
1267bool exist_written_data(struct f2fs_sb_info *, nid_t, int);
1268int acquire_orphan_inode(struct f2fs_sb_info *);
1269void release_orphan_inode(struct f2fs_sb_info *);
1270void add_orphan_inode(struct f2fs_sb_info *, nid_t);
1271void remove_orphan_inode(struct f2fs_sb_info *, nid_t);
1272void recover_orphan_inodes(struct f2fs_sb_info *);
1273int get_valid_checkpoint(struct f2fs_sb_info *);
1274void set_dirty_dir_page(struct inode *, struct page *);
1275void add_dirty_dir_inode(struct inode *);
1276void remove_dirty_dir_inode(struct inode *);
1277void sync_dirty_dir_inodes(struct f2fs_sb_info *);
1278void write_checkpoint(struct f2fs_sb_info *, bool);
1279void init_ino_entry_info(struct f2fs_sb_info *);
1280int __init create_checkpoint_caches(void);
1281void destroy_checkpoint_caches(void);
1282
1283/*
1284 * data.c
1285 */
1286void f2fs_submit_merged_bio(struct f2fs_sb_info *, enum page_type, int);
1287int f2fs_submit_page_bio(struct f2fs_sb_info *, struct page *, block_t, int);
1288void f2fs_submit_page_mbio(struct f2fs_sb_info *, struct page *, block_t,
1289                                                struct f2fs_io_info *);
1290int reserve_new_block(struct dnode_of_data *);
1291int f2fs_reserve_block(struct dnode_of_data *, pgoff_t);
1292void update_extent_cache(block_t, struct dnode_of_data *);
1293struct page *find_data_page(struct inode *, pgoff_t, bool);
1294struct page *get_lock_data_page(struct inode *, pgoff_t);
1295struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool);
1296int do_write_data_page(struct page *, struct f2fs_io_info *);
1297int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64);
1298
1299/*
1300 * gc.c
1301 */
1302int start_gc_thread(struct f2fs_sb_info *);
1303void stop_gc_thread(struct f2fs_sb_info *);
1304block_t start_bidx_of_node(unsigned int, struct f2fs_inode_info *);
1305int f2fs_gc(struct f2fs_sb_info *);
1306void build_gc_manager(struct f2fs_sb_info *);
1307int __init create_gc_caches(void);
1308void destroy_gc_caches(void);
1309
1310/*
1311 * recovery.c
1312 */
1313int recover_fsync_data(struct f2fs_sb_info *);
1314bool space_for_roll_forward(struct f2fs_sb_info *);
1315
1316/*
1317 * debug.c
1318 */
1319#ifdef CONFIG_F2FS_STAT_FS
1320struct f2fs_stat_info {
1321        struct list_head stat_list;
1322        struct f2fs_sb_info *sbi;
1323        int all_area_segs, sit_area_segs, nat_area_segs, ssa_area_segs;
1324        int main_area_segs, main_area_sections, main_area_zones;
1325        int hit_ext, total_ext;
1326        int ndirty_node, ndirty_dent, ndirty_dirs, ndirty_meta;
1327        int nats, sits, fnids;
1328        int total_count, utilization;
1329        int bg_gc, inline_inode;
1330        unsigned int valid_count, valid_node_count, valid_inode_count;
1331        unsigned int bimodal, avg_vblocks;
1332        int util_free, util_valid, util_invalid;
1333        int rsvd_segs, overp_segs;
1334        int dirty_count, node_pages, meta_pages;
1335        int prefree_count, call_count, cp_count;
1336        int tot_segs, node_segs, data_segs, free_segs, free_secs;
1337        int tot_blks, data_blks, node_blks;
1338        int curseg[NR_CURSEG_TYPE];
1339        int cursec[NR_CURSEG_TYPE];
1340        int curzone[NR_CURSEG_TYPE];
1341
1342        unsigned int segment_count[2];
1343        unsigned int block_count[2];
1344        unsigned base_mem, cache_mem;
1345};
1346
1347static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
1348{
1349        return (struct f2fs_stat_info *)sbi->stat_info;
1350}
1351
1352#define stat_inc_cp_count(si)           ((si)->cp_count++)
1353#define stat_inc_call_count(si)         ((si)->call_count++)
1354#define stat_inc_bggc_count(sbi)        ((sbi)->bg_gc++)
1355#define stat_inc_dirty_dir(sbi)         ((sbi)->n_dirty_dirs++)
1356#define stat_dec_dirty_dir(sbi)         ((sbi)->n_dirty_dirs--)
1357#define stat_inc_total_hit(sb)          ((F2FS_SB(sb))->total_hit_ext++)
1358#define stat_inc_read_hit(sb)           ((F2FS_SB(sb))->read_hit_ext++)
1359#define stat_inc_inline_inode(inode)                                    \
1360        do {                                                            \
1361                if (f2fs_has_inline_data(inode))                        \
1362                        ((F2FS_SB(inode->i_sb))->inline_inode++);       \
1363        } while (0)
1364#define stat_dec_inline_inode(inode)                                    \
1365        do {                                                            \
1366                if (f2fs_has_inline_data(inode))                        \
1367                        ((F2FS_SB(inode->i_sb))->inline_inode--);       \
1368        } while (0)
1369
1370#define stat_inc_seg_type(sbi, curseg)                                  \
1371                ((sbi)->segment_count[(curseg)->alloc_type]++)
1372#define stat_inc_block_count(sbi, curseg)                               \
1373                ((sbi)->block_count[(curseg)->alloc_type]++)
1374
1375#define stat_inc_seg_count(sbi, type)                                   \
1376        do {                                                            \
1377                struct f2fs_stat_info *si = F2FS_STAT(sbi);             \
1378                (si)->tot_segs++;                                       \
1379                if (type == SUM_TYPE_DATA)                              \
1380                        si->data_segs++;                                \
1381                else                                                    \
1382                        si->node_segs++;                                \
1383        } while (0)
1384
1385#define stat_inc_tot_blk_count(si, blks)                                \
1386        (si->tot_blks += (blks))
1387
1388#define stat_inc_data_blk_count(sbi, blks)                              \
1389        do {                                                            \
1390                struct f2fs_stat_info *si = F2FS_STAT(sbi);             \
1391                stat_inc_tot_blk_count(si, blks);                       \
1392                si->data_blks += (blks);                                \
1393        } while (0)
1394
1395#define stat_inc_node_blk_count(sbi, blks)                              \
1396        do {                                                            \
1397                struct f2fs_stat_info *si = F2FS_STAT(sbi);             \
1398                stat_inc_tot_blk_count(si, blks);                       \
1399                si->node_blks += (blks);                                \
1400        } while (0)
1401
1402int f2fs_build_stats(struct f2fs_sb_info *);
1403void f2fs_destroy_stats(struct f2fs_sb_info *);
1404void __init f2fs_create_root_stats(void);
1405void f2fs_destroy_root_stats(void);
1406#else
1407#define stat_inc_cp_count(si)
1408#define stat_inc_call_count(si)
1409#define stat_inc_bggc_count(si)
1410#define stat_inc_dirty_dir(sbi)
1411#define stat_dec_dirty_dir(sbi)
1412#define stat_inc_total_hit(sb)
1413#define stat_inc_read_hit(sb)
1414#define stat_inc_inline_inode(inode)
1415#define stat_dec_inline_inode(inode)
1416#define stat_inc_seg_type(sbi, curseg)
1417#define stat_inc_block_count(sbi, curseg)
1418#define stat_inc_seg_count(si, type)
1419#define stat_inc_tot_blk_count(si, blks)
1420#define stat_inc_data_blk_count(si, blks)
1421#define stat_inc_node_blk_count(sbi, blks)
1422
1423static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
1424static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
1425static inline void __init f2fs_create_root_stats(void) { }
1426static inline void f2fs_destroy_root_stats(void) { }
1427#endif
1428
1429extern const struct file_operations f2fs_dir_operations;
1430extern const struct file_operations f2fs_file_operations;
1431extern const struct inode_operations f2fs_file_inode_operations;
1432extern const struct address_space_operations f2fs_dblock_aops;
1433extern const struct address_space_operations f2fs_node_aops;
1434extern const struct address_space_operations f2fs_meta_aops;
1435extern const struct inode_operations f2fs_dir_inode_operations;
1436extern const struct inode_operations f2fs_symlink_inode_operations;
1437extern const struct inode_operations f2fs_special_inode_operations;
1438
1439/*
1440 * inline.c
1441 */
1442bool f2fs_may_inline(struct inode *);
1443int f2fs_read_inline_data(struct inode *, struct page *);
1444int f2fs_convert_inline_data(struct inode *, pgoff_t, struct page *);
1445int f2fs_write_inline_data(struct inode *, struct page *, unsigned int);
1446void truncate_inline_data(struct inode *, u64);
1447bool recover_inline_data(struct inode *, struct page *);
1448#endif
1449