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#include <linux/vmalloc.h>
  23#include <linux/bio.h>
  24#include <linux/blkdev.h>
  25#include <linux/fscrypto.h>
  26#include <crypto/hash.h>
  27
  28#ifdef CONFIG_F2FS_CHECK_FS
  29#define f2fs_bug_on(sbi, condition)     BUG_ON(condition)
  30#else
  31#define f2fs_bug_on(sbi, condition)                                     \
  32        do {                                                            \
  33                if (unlikely(condition)) {                              \
  34                        WARN_ON(1);                                     \
  35                        set_sbi_flag(sbi, SBI_NEED_FSCK);               \
  36                }                                                       \
  37        } while (0)
  38#endif
  39
  40#ifdef CONFIG_F2FS_FAULT_INJECTION
  41enum {
  42        FAULT_KMALLOC,
  43        FAULT_PAGE_ALLOC,
  44        FAULT_ALLOC_NID,
  45        FAULT_ORPHAN,
  46        FAULT_BLOCK,
  47        FAULT_DIR_DEPTH,
  48        FAULT_MAX,
  49};
  50
  51struct f2fs_fault_info {
  52        atomic_t inject_ops;
  53        unsigned int inject_rate;
  54        unsigned int inject_type;
  55};
  56
  57extern struct f2fs_fault_info f2fs_fault;
  58extern char *fault_name[FAULT_MAX];
  59#define IS_FAULT_SET(type) (f2fs_fault.inject_type & (1 << (type)))
  60
  61static inline bool time_to_inject(int type)
  62{
  63        if (!f2fs_fault.inject_rate)
  64                return false;
  65        if (type == FAULT_KMALLOC && !IS_FAULT_SET(type))
  66                return false;
  67        else if (type == FAULT_PAGE_ALLOC && !IS_FAULT_SET(type))
  68                return false;
  69        else if (type == FAULT_ALLOC_NID && !IS_FAULT_SET(type))
  70                return false;
  71        else if (type == FAULT_ORPHAN && !IS_FAULT_SET(type))
  72                return false;
  73        else if (type == FAULT_BLOCK && !IS_FAULT_SET(type))
  74                return false;
  75        else if (type == FAULT_DIR_DEPTH && !IS_FAULT_SET(type))
  76                return false;
  77
  78        atomic_inc(&f2fs_fault.inject_ops);
  79        if (atomic_read(&f2fs_fault.inject_ops) >= f2fs_fault.inject_rate) {
  80                atomic_set(&f2fs_fault.inject_ops, 0);
  81                printk("%sF2FS-fs : inject %s in %pF\n",
  82                                KERN_INFO,
  83                                fault_name[type],
  84                                __builtin_return_address(0));
  85                return true;
  86        }
  87        return false;
  88}
  89#endif
  90
  91/*
  92 * For mount options
  93 */
  94#define F2FS_MOUNT_BG_GC                0x00000001
  95#define F2FS_MOUNT_DISABLE_ROLL_FORWARD 0x00000002
  96#define F2FS_MOUNT_DISCARD              0x00000004
  97#define F2FS_MOUNT_NOHEAP               0x00000008
  98#define F2FS_MOUNT_XATTR_USER           0x00000010
  99#define F2FS_MOUNT_POSIX_ACL            0x00000020
 100#define F2FS_MOUNT_DISABLE_EXT_IDENTIFY 0x00000040
 101#define F2FS_MOUNT_INLINE_XATTR         0x00000080
 102#define F2FS_MOUNT_INLINE_DATA          0x00000100
 103#define F2FS_MOUNT_INLINE_DENTRY        0x00000200
 104#define F2FS_MOUNT_FLUSH_MERGE          0x00000400
 105#define F2FS_MOUNT_NOBARRIER            0x00000800
 106#define F2FS_MOUNT_FASTBOOT             0x00001000
 107#define F2FS_MOUNT_EXTENT_CACHE         0x00002000
 108#define F2FS_MOUNT_FORCE_FG_GC          0x00004000
 109#define F2FS_MOUNT_DATA_FLUSH           0x00008000
 110#define F2FS_MOUNT_FAULT_INJECTION      0x00010000
 111
 112#define clear_opt(sbi, option)  (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option)
 113#define set_opt(sbi, option)    (sbi->mount_opt.opt |= F2FS_MOUNT_##option)
 114#define test_opt(sbi, option)   (sbi->mount_opt.opt & F2FS_MOUNT_##option)
 115
 116#define ver_after(a, b) (typecheck(unsigned long long, a) &&            \
 117                typecheck(unsigned long long, b) &&                     \
 118                ((long long)((a) - (b)) > 0))
 119
 120typedef u32 block_t;    /*
 121                         * should not change u32, since it is the on-disk block
 122                         * address format, __le32.
 123                         */
 124typedef u32 nid_t;
 125
 126struct f2fs_mount_info {
 127        unsigned int    opt;
 128};
 129
 130#define F2FS_FEATURE_ENCRYPT    0x0001
 131
 132#define F2FS_HAS_FEATURE(sb, mask)                                      \
 133        ((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0)
 134#define F2FS_SET_FEATURE(sb, mask)                                      \
 135        F2FS_SB(sb)->raw_super->feature |= cpu_to_le32(mask)
 136#define F2FS_CLEAR_FEATURE(sb, mask)                                    \
 137        F2FS_SB(sb)->raw_super->feature &= ~cpu_to_le32(mask)
 138
 139/*
 140 * For checkpoint manager
 141 */
 142enum {
 143        NAT_BITMAP,
 144        SIT_BITMAP
 145};
 146
 147enum {
 148        CP_UMOUNT,
 149        CP_FASTBOOT,
 150        CP_SYNC,
 151        CP_RECOVERY,
 152        CP_DISCARD,
 153};
 154
 155#define DEF_BATCHED_TRIM_SECTIONS       32
 156#define BATCHED_TRIM_SEGMENTS(sbi)      \
 157                (SM_I(sbi)->trim_sections * (sbi)->segs_per_sec)
 158#define BATCHED_TRIM_BLOCKS(sbi)        \
 159                (BATCHED_TRIM_SEGMENTS(sbi) << (sbi)->log_blocks_per_seg)
 160#define DEF_CP_INTERVAL                 60      /* 60 secs */
 161#define DEF_IDLE_INTERVAL               120     /* 2 mins */
 162
 163struct cp_control {
 164        int reason;
 165        __u64 trim_start;
 166        __u64 trim_end;
 167        __u64 trim_minlen;
 168        __u64 trimmed;
 169};
 170
 171/*
 172 * For CP/NAT/SIT/SSA readahead
 173 */
 174enum {
 175        META_CP,
 176        META_NAT,
 177        META_SIT,
 178        META_SSA,
 179        META_POR,
 180};
 181
 182/* for the list of ino */
 183enum {
 184        ORPHAN_INO,             /* for orphan ino list */
 185        APPEND_INO,             /* for append ino list */
 186        UPDATE_INO,             /* for update ino list */
 187        MAX_INO_ENTRY,          /* max. list */
 188};
 189
 190struct ino_entry {
 191        struct list_head list;  /* list head */
 192        nid_t ino;              /* inode number */
 193};
 194
 195/* for the list of inodes to be GCed */
 196struct inode_entry {
 197        struct list_head list;  /* list head */
 198        struct inode *inode;    /* vfs inode pointer */
 199};
 200
 201/* for the list of blockaddresses to be discarded */
 202struct discard_entry {
 203        struct list_head list;  /* list head */
 204        block_t blkaddr;        /* block address to be discarded */
 205        int len;                /* # of consecutive blocks of the discard */
 206};
 207
 208/* for the list of fsync inodes, used only during recovery */
 209struct fsync_inode_entry {
 210        struct list_head list;  /* list head */
 211        struct inode *inode;    /* vfs inode pointer */
 212        block_t blkaddr;        /* block address locating the last fsync */
 213        block_t last_dentry;    /* block address locating the last dentry */
 214};
 215
 216#define nats_in_cursum(jnl)             (le16_to_cpu(jnl->n_nats))
 217#define sits_in_cursum(jnl)             (le16_to_cpu(jnl->n_sits))
 218
 219#define nat_in_journal(jnl, i)          (jnl->nat_j.entries[i].ne)
 220#define nid_in_journal(jnl, i)          (jnl->nat_j.entries[i].nid)
 221#define sit_in_journal(jnl, i)          (jnl->sit_j.entries[i].se)
 222#define segno_in_journal(jnl, i)        (jnl->sit_j.entries[i].segno)
 223
 224#define MAX_NAT_JENTRIES(jnl)   (NAT_JOURNAL_ENTRIES - nats_in_cursum(jnl))
 225#define MAX_SIT_JENTRIES(jnl)   (SIT_JOURNAL_ENTRIES - sits_in_cursum(jnl))
 226
 227static inline int update_nats_in_cursum(struct f2fs_journal *journal, int i)
 228{
 229        int before = nats_in_cursum(journal);
 230        journal->n_nats = cpu_to_le16(before + i);
 231        return before;
 232}
 233
 234static inline int update_sits_in_cursum(struct f2fs_journal *journal, int i)
 235{
 236        int before = sits_in_cursum(journal);
 237        journal->n_sits = cpu_to_le16(before + i);
 238        return before;
 239}
 240
 241static inline bool __has_cursum_space(struct f2fs_journal *journal,
 242                                                        int size, int type)
 243{
 244        if (type == NAT_JOURNAL)
 245                return size <= MAX_NAT_JENTRIES(journal);
 246        return size <= MAX_SIT_JENTRIES(journal);
 247}
 248
 249/*
 250 * ioctl commands
 251 */
 252#define F2FS_IOC_GETFLAGS               FS_IOC_GETFLAGS
 253#define F2FS_IOC_SETFLAGS               FS_IOC_SETFLAGS
 254#define F2FS_IOC_GETVERSION             FS_IOC_GETVERSION
 255
 256#define F2FS_IOCTL_MAGIC                0xf5
 257#define F2FS_IOC_START_ATOMIC_WRITE     _IO(F2FS_IOCTL_MAGIC, 1)
 258#define F2FS_IOC_COMMIT_ATOMIC_WRITE    _IO(F2FS_IOCTL_MAGIC, 2)
 259#define F2FS_IOC_START_VOLATILE_WRITE   _IO(F2FS_IOCTL_MAGIC, 3)
 260#define F2FS_IOC_RELEASE_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 4)
 261#define F2FS_IOC_ABORT_VOLATILE_WRITE   _IO(F2FS_IOCTL_MAGIC, 5)
 262#define F2FS_IOC_GARBAGE_COLLECT        _IO(F2FS_IOCTL_MAGIC, 6)
 263#define F2FS_IOC_WRITE_CHECKPOINT       _IO(F2FS_IOCTL_MAGIC, 7)
 264#define F2FS_IOC_DEFRAGMENT             _IO(F2FS_IOCTL_MAGIC, 8)
 265
 266#define F2FS_IOC_SET_ENCRYPTION_POLICY  FS_IOC_SET_ENCRYPTION_POLICY
 267#define F2FS_IOC_GET_ENCRYPTION_POLICY  FS_IOC_GET_ENCRYPTION_POLICY
 268#define F2FS_IOC_GET_ENCRYPTION_PWSALT  FS_IOC_GET_ENCRYPTION_PWSALT
 269
 270/*
 271 * should be same as XFS_IOC_GOINGDOWN.
 272 * Flags for going down operation used by FS_IOC_GOINGDOWN
 273 */
 274#define F2FS_IOC_SHUTDOWN       _IOR('X', 125, __u32)   /* Shutdown */
 275#define F2FS_GOING_DOWN_FULLSYNC        0x0     /* going down with full sync */
 276#define F2FS_GOING_DOWN_METASYNC        0x1     /* going down with metadata */
 277#define F2FS_GOING_DOWN_NOSYNC          0x2     /* going down */
 278#define F2FS_GOING_DOWN_METAFLUSH       0x3     /* going down with meta flush */
 279
 280#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
 281/*
 282 * ioctl commands in 32 bit emulation
 283 */
 284#define F2FS_IOC32_GETFLAGS             FS_IOC32_GETFLAGS
 285#define F2FS_IOC32_SETFLAGS             FS_IOC32_SETFLAGS
 286#define F2FS_IOC32_GETVERSION           FS_IOC32_GETVERSION
 287#endif
 288
 289struct f2fs_defragment {
 290        u64 start;
 291        u64 len;
 292};
 293
 294/*
 295 * For INODE and NODE manager
 296 */
 297/* for directory operations */
 298struct f2fs_dentry_ptr {
 299        struct inode *inode;
 300        const void *bitmap;
 301        struct f2fs_dir_entry *dentry;
 302        __u8 (*filename)[F2FS_SLOT_LEN];
 303        int max;
 304};
 305
 306static inline void make_dentry_ptr(struct inode *inode,
 307                struct f2fs_dentry_ptr *d, void *src, int type)
 308{
 309        d->inode = inode;
 310
 311        if (type == 1) {
 312                struct f2fs_dentry_block *t = (struct f2fs_dentry_block *)src;
 313                d->max = NR_DENTRY_IN_BLOCK;
 314                d->bitmap = &t->dentry_bitmap;
 315                d->dentry = t->dentry;
 316                d->filename = t->filename;
 317        } else {
 318                struct f2fs_inline_dentry *t = (struct f2fs_inline_dentry *)src;
 319                d->max = NR_INLINE_DENTRY;
 320                d->bitmap = &t->dentry_bitmap;
 321                d->dentry = t->dentry;
 322                d->filename = t->filename;
 323        }
 324}
 325
 326/*
 327 * XATTR_NODE_OFFSET stores xattrs to one node block per file keeping -1
 328 * as its node offset to distinguish from index node blocks.
 329 * But some bits are used to mark the node block.
 330 */
 331#define XATTR_NODE_OFFSET       ((((unsigned int)-1) << OFFSET_BIT_SHIFT) \
 332                                >> OFFSET_BIT_SHIFT)
 333enum {
 334        ALLOC_NODE,                     /* allocate a new node page if needed */
 335        LOOKUP_NODE,                    /* look up a node without readahead */
 336        LOOKUP_NODE_RA,                 /*
 337                                         * look up a node with readahead called
 338                                         * by get_data_block.
 339                                         */
 340};
 341
 342#define F2FS_LINK_MAX   0xffffffff      /* maximum link count per file */
 343
 344#define MAX_DIR_RA_PAGES        4       /* maximum ra pages of dir */
 345
 346/* vector size for gang look-up from extent cache that consists of radix tree */
 347#define EXT_TREE_VEC_SIZE       64
 348
 349/* for in-memory extent cache entry */
 350#define F2FS_MIN_EXTENT_LEN     64      /* minimum extent length */
 351
 352/* number of extent info in extent cache we try to shrink */
 353#define EXTENT_CACHE_SHRINK_NUMBER      128
 354
 355struct extent_info {
 356        unsigned int fofs;              /* start offset in a file */
 357        u32 blk;                        /* start block address of the extent */
 358        unsigned int len;               /* length of the extent */
 359};
 360
 361struct extent_node {
 362        struct rb_node rb_node;         /* rb node located in rb-tree */
 363        struct list_head list;          /* node in global extent list of sbi */
 364        struct extent_info ei;          /* extent info */
 365        struct extent_tree *et;         /* extent tree pointer */
 366};
 367
 368struct extent_tree {
 369        nid_t ino;                      /* inode number */
 370        struct rb_root root;            /* root of extent info rb-tree */
 371        struct extent_node *cached_en;  /* recently accessed extent node */
 372        struct extent_info largest;     /* largested extent info */
 373        struct list_head list;          /* to be used by sbi->zombie_list */
 374        rwlock_t lock;                  /* protect extent info rb-tree */
 375        atomic_t node_cnt;              /* # of extent node in rb-tree*/
 376};
 377
 378/*
 379 * This structure is taken from ext4_map_blocks.
 380 *
 381 * Note that, however, f2fs uses NEW and MAPPED flags for f2fs_map_blocks().
 382 */
 383#define F2FS_MAP_NEW            (1 << BH_New)
 384#define F2FS_MAP_MAPPED         (1 << BH_Mapped)
 385#define F2FS_MAP_UNWRITTEN      (1 << BH_Unwritten)
 386#define F2FS_MAP_FLAGS          (F2FS_MAP_NEW | F2FS_MAP_MAPPED |\
 387                                F2FS_MAP_UNWRITTEN)
 388
 389struct f2fs_map_blocks {
 390        block_t m_pblk;
 391        block_t m_lblk;
 392        unsigned int m_len;
 393        unsigned int m_flags;
 394        pgoff_t *m_next_pgofs;          /* point next possible non-hole pgofs */
 395};
 396
 397/* for flag in get_data_block */
 398#define F2FS_GET_BLOCK_READ             0
 399#define F2FS_GET_BLOCK_DIO              1
 400#define F2FS_GET_BLOCK_FIEMAP           2
 401#define F2FS_GET_BLOCK_BMAP             3
 402#define F2FS_GET_BLOCK_PRE_DIO          4
 403#define F2FS_GET_BLOCK_PRE_AIO          5
 404
 405/*
 406 * i_advise uses FADVISE_XXX_BIT. We can add additional hints later.
 407 */
 408#define FADVISE_COLD_BIT        0x01
 409#define FADVISE_LOST_PINO_BIT   0x02
 410#define FADVISE_ENCRYPT_BIT     0x04
 411#define FADVISE_ENC_NAME_BIT    0x08
 412
 413#define file_is_cold(inode)     is_file(inode, FADVISE_COLD_BIT)
 414#define file_wrong_pino(inode)  is_file(inode, FADVISE_LOST_PINO_BIT)
 415#define file_set_cold(inode)    set_file(inode, FADVISE_COLD_BIT)
 416#define file_lost_pino(inode)   set_file(inode, FADVISE_LOST_PINO_BIT)
 417#define file_clear_cold(inode)  clear_file(inode, FADVISE_COLD_BIT)
 418#define file_got_pino(inode)    clear_file(inode, FADVISE_LOST_PINO_BIT)
 419#define file_is_encrypt(inode)  is_file(inode, FADVISE_ENCRYPT_BIT)
 420#define file_set_encrypt(inode) set_file(inode, FADVISE_ENCRYPT_BIT)
 421#define file_clear_encrypt(inode) clear_file(inode, FADVISE_ENCRYPT_BIT)
 422#define file_enc_name(inode)    is_file(inode, FADVISE_ENC_NAME_BIT)
 423#define file_set_enc_name(inode) set_file(inode, FADVISE_ENC_NAME_BIT)
 424
 425#define DEF_DIR_LEVEL           0
 426
 427struct f2fs_inode_info {
 428        struct inode vfs_inode;         /* serve a vfs inode */
 429        unsigned long i_flags;          /* keep an inode flags for ioctl */
 430        unsigned char i_advise;         /* use to give file attribute hints */
 431        unsigned char i_dir_level;      /* use for dentry level for large dir */
 432        unsigned int i_current_depth;   /* use only in directory structure */
 433        unsigned int i_pino;            /* parent inode number */
 434        umode_t i_acl_mode;             /* keep file acl mode temporarily */
 435
 436        /* Use below internally in f2fs*/
 437        unsigned long flags;            /* use to pass per-file flags */
 438        struct rw_semaphore i_sem;      /* protect fi info */
 439        struct percpu_counter dirty_pages;      /* # of dirty pages */
 440        f2fs_hash_t chash;              /* hash value of given file name */
 441        unsigned int clevel;            /* maximum level of given file name */
 442        nid_t i_xattr_nid;              /* node id that contains xattrs */
 443        unsigned long long xattr_ver;   /* cp version of xattr modification */
 444
 445        struct list_head dirty_list;    /* linked in global dirty list */
 446        struct list_head inmem_pages;   /* inmemory pages managed by f2fs */
 447        struct mutex inmem_lock;        /* lock for inmemory pages */
 448        struct extent_tree *extent_tree;        /* cached extent_tree entry */
 449};
 450
 451static inline void get_extent_info(struct extent_info *ext,
 452                                        struct f2fs_extent *i_ext)
 453{
 454        ext->fofs = le32_to_cpu(i_ext->fofs);
 455        ext->blk = le32_to_cpu(i_ext->blk);
 456        ext->len = le32_to_cpu(i_ext->len);
 457}
 458
 459static inline void set_raw_extent(struct extent_info *ext,
 460                                        struct f2fs_extent *i_ext)
 461{
 462        i_ext->fofs = cpu_to_le32(ext->fofs);
 463        i_ext->blk = cpu_to_le32(ext->blk);
 464        i_ext->len = cpu_to_le32(ext->len);
 465}
 466
 467static inline void set_extent_info(struct extent_info *ei, unsigned int fofs,
 468                                                u32 blk, unsigned int len)
 469{
 470        ei->fofs = fofs;
 471        ei->blk = blk;
 472        ei->len = len;
 473}
 474
 475static inline bool __is_extent_same(struct extent_info *ei1,
 476                                                struct extent_info *ei2)
 477{
 478        return (ei1->fofs == ei2->fofs && ei1->blk == ei2->blk &&
 479                                                ei1->len == ei2->len);
 480}
 481
 482static inline bool __is_extent_mergeable(struct extent_info *back,
 483                                                struct extent_info *front)
 484{
 485        return (back->fofs + back->len == front->fofs &&
 486                        back->blk + back->len == front->blk);
 487}
 488
 489static inline bool __is_back_mergeable(struct extent_info *cur,
 490                                                struct extent_info *back)
 491{
 492        return __is_extent_mergeable(back, cur);
 493}
 494
 495static inline bool __is_front_mergeable(struct extent_info *cur,
 496                                                struct extent_info *front)
 497{
 498        return __is_extent_mergeable(cur, front);
 499}
 500
 501static inline void __try_update_largest_extent(struct extent_tree *et,
 502                                                struct extent_node *en)
 503{
 504        if (en->ei.len > et->largest.len)
 505                et->largest = en->ei;
 506}
 507
 508struct f2fs_nm_info {
 509        block_t nat_blkaddr;            /* base disk address of NAT */
 510        nid_t max_nid;                  /* maximum possible node ids */
 511        nid_t available_nids;           /* maximum available node ids */
 512        nid_t next_scan_nid;            /* the next nid to be scanned */
 513        unsigned int ram_thresh;        /* control the memory footprint */
 514        unsigned int ra_nid_pages;      /* # of nid pages to be readaheaded */
 515        unsigned int dirty_nats_ratio;  /* control dirty nats ratio threshold */
 516
 517        /* NAT cache management */
 518        struct radix_tree_root nat_root;/* root of the nat entry cache */
 519        struct radix_tree_root nat_set_root;/* root of the nat set cache */
 520        struct rw_semaphore nat_tree_lock;      /* protect nat_tree_lock */
 521        struct list_head nat_entries;   /* cached nat entry list (clean) */
 522        unsigned int nat_cnt;           /* the # of cached nat entries */
 523        unsigned int dirty_nat_cnt;     /* total num of nat entries in set */
 524
 525        /* free node ids management */
 526        struct radix_tree_root free_nid_root;/* root of the free_nid cache */
 527        struct list_head free_nid_list; /* a list for free nids */
 528        spinlock_t free_nid_list_lock;  /* protect free nid list */
 529        unsigned int fcnt;              /* the number of free node id */
 530        struct mutex build_lock;        /* lock for build free nids */
 531
 532        /* for checkpoint */
 533        char *nat_bitmap;               /* NAT bitmap pointer */
 534        int bitmap_size;                /* bitmap size */
 535};
 536
 537/*
 538 * this structure is used as one of function parameters.
 539 * all the information are dedicated to a given direct node block determined
 540 * by the data offset in a file.
 541 */
 542struct dnode_of_data {
 543        struct inode *inode;            /* vfs inode pointer */
 544        struct page *inode_page;        /* its inode page, NULL is possible */
 545        struct page *node_page;         /* cached direct node page */
 546        nid_t nid;                      /* node id of the direct node block */
 547        unsigned int ofs_in_node;       /* data offset in the node page */
 548        bool inode_page_locked;         /* inode page is locked or not */
 549        bool node_changed;              /* is node block changed */
 550        char cur_level;                 /* level of hole node page */
 551        char max_level;                 /* level of current page located */
 552        block_t data_blkaddr;           /* block address of the node block */
 553};
 554
 555static inline void set_new_dnode(struct dnode_of_data *dn, struct inode *inode,
 556                struct page *ipage, struct page *npage, nid_t nid)
 557{
 558        memset(dn, 0, sizeof(*dn));
 559        dn->inode = inode;
 560        dn->inode_page = ipage;
 561        dn->node_page = npage;
 562        dn->nid = nid;
 563}
 564
 565/*
 566 * For SIT manager
 567 *
 568 * By default, there are 6 active log areas across the whole main area.
 569 * When considering hot and cold data separation to reduce cleaning overhead,
 570 * we split 3 for data logs and 3 for node logs as hot, warm, and cold types,
 571 * respectively.
 572 * In the current design, you should not change the numbers intentionally.
 573 * Instead, as a mount option such as active_logs=x, you can use 2, 4, and 6
 574 * logs individually according to the underlying devices. (default: 6)
 575 * Just in case, on-disk layout covers maximum 16 logs that consist of 8 for
 576 * data and 8 for node logs.
 577 */
 578#define NR_CURSEG_DATA_TYPE     (3)
 579#define NR_CURSEG_NODE_TYPE     (3)
 580#define NR_CURSEG_TYPE  (NR_CURSEG_DATA_TYPE + NR_CURSEG_NODE_TYPE)
 581
 582enum {
 583        CURSEG_HOT_DATA = 0,    /* directory entry blocks */
 584        CURSEG_WARM_DATA,       /* data blocks */
 585        CURSEG_COLD_DATA,       /* multimedia or GCed data blocks */
 586        CURSEG_HOT_NODE,        /* direct node blocks of directory files */
 587        CURSEG_WARM_NODE,       /* direct node blocks of normal files */
 588        CURSEG_COLD_NODE,       /* indirect node blocks */
 589        NO_CHECK_TYPE,
 590        CURSEG_DIRECT_IO,       /* to use for the direct IO path */
 591};
 592
 593struct flush_cmd {
 594        struct completion wait;
 595        struct llist_node llnode;
 596        int ret;
 597};
 598
 599struct flush_cmd_control {
 600        struct task_struct *f2fs_issue_flush;   /* flush thread */
 601        wait_queue_head_t flush_wait_queue;     /* waiting queue for wake-up */
 602        struct llist_head issue_list;           /* list for command issue */
 603        struct llist_node *dispatch_list;       /* list for command dispatch */
 604};
 605
 606struct f2fs_sm_info {
 607        struct sit_info *sit_info;              /* whole segment information */
 608        struct free_segmap_info *free_info;     /* free segment information */
 609        struct dirty_seglist_info *dirty_info;  /* dirty segment information */
 610        struct curseg_info *curseg_array;       /* active segment information */
 611
 612        block_t seg0_blkaddr;           /* block address of 0'th segment */
 613        block_t main_blkaddr;           /* start block address of main area */
 614        block_t ssa_blkaddr;            /* start block address of SSA area */
 615
 616        unsigned int segment_count;     /* total # of segments */
 617        unsigned int main_segments;     /* # of segments in main area */
 618        unsigned int reserved_segments; /* # of reserved segments */
 619        unsigned int ovp_segments;      /* # of overprovision segments */
 620
 621        /* a threshold to reclaim prefree segments */
 622        unsigned int rec_prefree_segments;
 623
 624        /* for small discard management */
 625        struct list_head discard_list;          /* 4KB discard list */
 626        int nr_discards;                        /* # of discards in the list */
 627        int max_discards;                       /* max. discards to be issued */
 628
 629        /* for batched trimming */
 630        unsigned int trim_sections;             /* # of sections to trim */
 631
 632        struct list_head sit_entry_set; /* sit entry set list */
 633
 634        unsigned int ipu_policy;        /* in-place-update policy */
 635        unsigned int min_ipu_util;      /* in-place-update threshold */
 636        unsigned int min_fsync_blocks;  /* threshold for fsync */
 637
 638        /* for flush command control */
 639        struct flush_cmd_control *cmd_control_info;
 640
 641};
 642
 643/*
 644 * For superblock
 645 */
 646/*
 647 * COUNT_TYPE for monitoring
 648 *
 649 * f2fs monitors the number of several block types such as on-writeback,
 650 * dirty dentry blocks, dirty node blocks, and dirty meta blocks.
 651 */
 652enum count_type {
 653        F2FS_DIRTY_DENTS,
 654        F2FS_DIRTY_DATA,
 655        F2FS_DIRTY_NODES,
 656        F2FS_DIRTY_META,
 657        F2FS_INMEM_PAGES,
 658        NR_COUNT_TYPE,
 659};
 660
 661/*
 662 * The below are the page types of bios used in submit_bio().
 663 * The available types are:
 664 * DATA                 User data pages. It operates as async mode.
 665 * NODE                 Node pages. It operates as async mode.
 666 * META                 FS metadata pages such as SIT, NAT, CP.
 667 * NR_PAGE_TYPE         The number of page types.
 668 * META_FLUSH           Make sure the previous pages are written
 669 *                      with waiting the bio's completion
 670 * ...                  Only can be used with META.
 671 */
 672#define PAGE_TYPE_OF_BIO(type)  ((type) > META ? META : (type))
 673enum page_type {
 674        DATA,
 675        NODE,
 676        META,
 677        NR_PAGE_TYPE,
 678        META_FLUSH,
 679        INMEM,          /* the below types are used by tracepoints only. */
 680        INMEM_DROP,
 681        INMEM_REVOKE,
 682        IPU,
 683        OPU,
 684};
 685
 686struct f2fs_io_info {
 687        struct f2fs_sb_info *sbi;       /* f2fs_sb_info pointer */
 688        enum page_type type;    /* contains DATA/NODE/META/META_FLUSH */
 689        int rw;                 /* contains R/RS/W/WS with REQ_META/REQ_PRIO */
 690        block_t new_blkaddr;    /* new block address to be written */
 691        block_t old_blkaddr;    /* old block address before Cow */
 692        struct page *page;      /* page to be written */
 693        struct page *encrypted_page;    /* encrypted page */
 694};
 695
 696#define is_read_io(rw)  (((rw) & 1) == READ)
 697struct f2fs_bio_info {
 698        struct f2fs_sb_info *sbi;       /* f2fs superblock */
 699        struct bio *bio;                /* bios to merge */
 700        sector_t last_block_in_bio;     /* last block number */
 701        struct f2fs_io_info fio;        /* store buffered io info. */
 702        struct rw_semaphore io_rwsem;   /* blocking op for bio */
 703};
 704
 705enum inode_type {
 706        DIR_INODE,                      /* for dirty dir inode */
 707        FILE_INODE,                     /* for dirty regular/symlink inode */
 708        NR_INODE_TYPE,
 709};
 710
 711/* for inner inode cache management */
 712struct inode_management {
 713        struct radix_tree_root ino_root;        /* ino entry array */
 714        spinlock_t ino_lock;                    /* for ino entry lock */
 715        struct list_head ino_list;              /* inode list head */
 716        unsigned long ino_num;                  /* number of entries */
 717};
 718
 719/* For s_flag in struct f2fs_sb_info */
 720enum {
 721        SBI_IS_DIRTY,                           /* dirty flag for checkpoint */
 722        SBI_IS_CLOSE,                           /* specify unmounting */
 723        SBI_NEED_FSCK,                          /* need fsck.f2fs to fix */
 724        SBI_POR_DOING,                          /* recovery is doing or not */
 725        SBI_NEED_SB_WRITE,                      /* need to recover superblock */
 726};
 727
 728enum {
 729        CP_TIME,
 730        REQ_TIME,
 731        MAX_TIME,
 732};
 733
 734#ifdef CONFIG_F2FS_FS_ENCRYPTION
 735#define F2FS_KEY_DESC_PREFIX "f2fs:"
 736#define F2FS_KEY_DESC_PREFIX_SIZE 5
 737#endif
 738struct f2fs_sb_info {
 739        struct super_block *sb;                 /* pointer to VFS super block */
 740        struct proc_dir_entry *s_proc;          /* proc entry */
 741        struct f2fs_super_block *raw_super;     /* raw super block pointer */
 742        int valid_super_block;                  /* valid super block no */
 743        int s_flag;                             /* flags for sbi */
 744
 745#ifdef CONFIG_F2FS_FS_ENCRYPTION
 746        u8 key_prefix[F2FS_KEY_DESC_PREFIX_SIZE];
 747        u8 key_prefix_size;
 748#endif
 749        /* for node-related operations */
 750        struct f2fs_nm_info *nm_info;           /* node manager */
 751        struct inode *node_inode;               /* cache node blocks */
 752
 753        /* for segment-related operations */
 754        struct f2fs_sm_info *sm_info;           /* segment manager */
 755
 756        /* for bio operations */
 757        struct f2fs_bio_info read_io;                   /* for read bios */
 758        struct f2fs_bio_info write_io[NR_PAGE_TYPE];    /* for write bios */
 759
 760        /* for checkpoint */
 761        struct f2fs_checkpoint *ckpt;           /* raw checkpoint pointer */
 762        struct inode *meta_inode;               /* cache meta blocks */
 763        struct mutex cp_mutex;                  /* checkpoint procedure lock */
 764        struct rw_semaphore cp_rwsem;           /* blocking FS operations */
 765        struct rw_semaphore node_write;         /* locking node writes */
 766        struct mutex writepages;                /* mutex for writepages() */
 767        wait_queue_head_t cp_wait;
 768        unsigned long last_time[MAX_TIME];      /* to store time in jiffies */
 769        long interval_time[MAX_TIME];           /* to store thresholds */
 770
 771        struct inode_management im[MAX_INO_ENTRY];      /* manage inode cache */
 772
 773        /* for orphan inode, use 0'th array */
 774        unsigned int max_orphans;               /* max orphan inodes */
 775
 776        /* for inode management */
 777        struct list_head inode_list[NR_INODE_TYPE];     /* dirty inode list */
 778        spinlock_t inode_lock[NR_INODE_TYPE];   /* for dirty inode list lock */
 779
 780        /* for extent tree cache */
 781        struct radix_tree_root extent_tree_root;/* cache extent cache entries */
 782        struct rw_semaphore extent_tree_lock;   /* locking extent radix tree */
 783        struct list_head extent_list;           /* lru list for shrinker */
 784        spinlock_t extent_lock;                 /* locking extent lru list */
 785        atomic_t total_ext_tree;                /* extent tree count */
 786        struct list_head zombie_list;           /* extent zombie tree list */
 787        atomic_t total_zombie_tree;             /* extent zombie tree count */
 788        atomic_t total_ext_node;                /* extent info count */
 789
 790        /* basic filesystem units */
 791        unsigned int log_sectors_per_block;     /* log2 sectors per block */
 792        unsigned int log_blocksize;             /* log2 block size */
 793        unsigned int blocksize;                 /* block size */
 794        unsigned int root_ino_num;              /* root inode number*/
 795        unsigned int node_ino_num;              /* node inode number*/
 796        unsigned int meta_ino_num;              /* meta inode number*/
 797        unsigned int log_blocks_per_seg;        /* log2 blocks per segment */
 798        unsigned int blocks_per_seg;            /* blocks per segment */
 799        unsigned int segs_per_sec;              /* segments per section */
 800        unsigned int secs_per_zone;             /* sections per zone */
 801        unsigned int total_sections;            /* total section count */
 802        unsigned int total_node_count;          /* total node block count */
 803        unsigned int total_valid_node_count;    /* valid node block count */
 804        loff_t max_file_blocks;                 /* max block index of file */
 805        int active_logs;                        /* # of active logs */
 806        int dir_level;                          /* directory level */
 807
 808        block_t user_block_count;               /* # of user blocks */
 809        block_t total_valid_block_count;        /* # of valid blocks */
 810        block_t discard_blks;                   /* discard command candidats */
 811        block_t last_valid_block_count;         /* for recovery */
 812        u32 s_next_generation;                  /* for NFS support */
 813        atomic_t nr_wb_bios;                    /* # of writeback bios */
 814
 815        /* # of pages, see count_type */
 816        struct percpu_counter nr_pages[NR_COUNT_TYPE];
 817        /* # of allocated blocks */
 818        struct percpu_counter alloc_valid_block_count;
 819
 820        /* valid inode count */
 821        struct percpu_counter total_valid_inode_count;
 822
 823        struct f2fs_mount_info mount_opt;       /* mount options */
 824
 825        /* for cleaning operations */
 826        struct mutex gc_mutex;                  /* mutex for GC */
 827        struct f2fs_gc_kthread  *gc_thread;     /* GC thread */
 828        unsigned int cur_victim_sec;            /* current victim section num */
 829
 830        /* maximum # of trials to find a victim segment for SSR and GC */
 831        unsigned int max_victim_search;
 832
 833        /*
 834         * for stat information.
 835         * one is for the LFS mode, and the other is for the SSR mode.
 836         */
 837#ifdef CONFIG_F2FS_STAT_FS
 838        struct f2fs_stat_info *stat_info;       /* FS status information */
 839        unsigned int segment_count[2];          /* # of allocated segments */
 840        unsigned int block_count[2];            /* # of allocated blocks */
 841        atomic_t inplace_count;         /* # of inplace update */
 842        atomic64_t total_hit_ext;               /* # of lookup extent cache */
 843        atomic64_t read_hit_rbtree;             /* # of hit rbtree extent node */
 844        atomic64_t read_hit_largest;            /* # of hit largest extent node */
 845        atomic64_t read_hit_cached;             /* # of hit cached extent node */
 846        atomic_t inline_xattr;                  /* # of inline_xattr inodes */
 847        atomic_t inline_inode;                  /* # of inline_data inodes */
 848        atomic_t inline_dir;                    /* # of inline_dentry inodes */
 849        int bg_gc;                              /* background gc calls */
 850        unsigned int ndirty_inode[NR_INODE_TYPE];       /* # of dirty inodes */
 851#endif
 852        unsigned int last_victim[2];            /* last victim segment # */
 853        spinlock_t stat_lock;                   /* lock for stat operations */
 854
 855        /* For sysfs suppport */
 856        struct kobject s_kobj;
 857        struct completion s_kobj_unregister;
 858
 859        /* For shrinker support */
 860        struct list_head s_list;
 861        struct mutex umount_mutex;
 862        unsigned int shrinker_run_no;
 863
 864        /* For write statistics */
 865        u64 sectors_written_start;
 866        u64 kbytes_written;
 867
 868        /* Reference to checksum algorithm driver via cryptoapi */
 869        struct crypto_shash *s_chksum_driver;
 870};
 871
 872/* For write statistics. Suppose sector size is 512 bytes,
 873 * and the return value is in kbytes. s is of struct f2fs_sb_info.
 874 */
 875#define BD_PART_WRITTEN(s)                                               \
 876(((u64)part_stat_read(s->sb->s_bdev->bd_part, sectors[1]) -              \
 877                s->sectors_written_start) >> 1)
 878
 879static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type)
 880{
 881        sbi->last_time[type] = jiffies;
 882}
 883
 884static inline bool f2fs_time_over(struct f2fs_sb_info *sbi, int type)
 885{
 886        struct timespec ts = {sbi->interval_time[type], 0};
 887        unsigned long interval = timespec_to_jiffies(&ts);
 888
 889        return time_after(jiffies, sbi->last_time[type] + interval);
 890}
 891
 892static inline bool is_idle(struct f2fs_sb_info *sbi)
 893{
 894        struct block_device *bdev = sbi->sb->s_bdev;
 895        struct request_queue *q = bdev_get_queue(bdev);
 896        struct request_list *rl = &q->root_rl;
 897
 898        if (rl->count[BLK_RW_SYNC] || rl->count[BLK_RW_ASYNC])
 899                return 0;
 900
 901        return f2fs_time_over(sbi, REQ_TIME);
 902}
 903
 904/*
 905 * Inline functions
 906 */
 907static inline u32 f2fs_crc32(struct f2fs_sb_info *sbi, const void *address,
 908                           unsigned int length)
 909{
 910        SHASH_DESC_ON_STACK(shash, sbi->s_chksum_driver);
 911        u32 *ctx = (u32 *)shash_desc_ctx(shash);
 912        int err;
 913
 914        shash->tfm = sbi->s_chksum_driver;
 915        shash->flags = 0;
 916        *ctx = F2FS_SUPER_MAGIC;
 917
 918        err = crypto_shash_update(shash, address, length);
 919        BUG_ON(err);
 920
 921        return *ctx;
 922}
 923
 924static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc,
 925                                  void *buf, size_t buf_size)
 926{
 927        return f2fs_crc32(sbi, buf, buf_size) == blk_crc;
 928}
 929
 930static inline struct f2fs_inode_info *F2FS_I(struct inode *inode)
 931{
 932        return container_of(inode, struct f2fs_inode_info, vfs_inode);
 933}
 934
 935static inline struct f2fs_sb_info *F2FS_SB(struct super_block *sb)
 936{
 937        return sb->s_fs_info;
 938}
 939
 940static inline struct f2fs_sb_info *F2FS_I_SB(struct inode *inode)
 941{
 942        return F2FS_SB(inode->i_sb);
 943}
 944
 945static inline struct f2fs_sb_info *F2FS_M_SB(struct address_space *mapping)
 946{
 947        return F2FS_I_SB(mapping->host);
 948}
 949
 950static inline struct f2fs_sb_info *F2FS_P_SB(struct page *page)
 951{
 952        return F2FS_M_SB(page->mapping);
 953}
 954
 955static inline struct f2fs_super_block *F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
 956{
 957        return (struct f2fs_super_block *)(sbi->raw_super);
 958}
 959
 960static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi)
 961{
 962        return (struct f2fs_checkpoint *)(sbi->ckpt);
 963}
 964
 965static inline struct f2fs_node *F2FS_NODE(struct page *page)
 966{
 967        return (struct f2fs_node *)page_address(page);
 968}
 969
 970static inline struct f2fs_inode *F2FS_INODE(struct page *page)
 971{
 972        return &((struct f2fs_node *)page_address(page))->i;
 973}
 974
 975static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi)
 976{
 977        return (struct f2fs_nm_info *)(sbi->nm_info);
 978}
 979
 980static inline struct f2fs_sm_info *SM_I(struct f2fs_sb_info *sbi)
 981{
 982        return (struct f2fs_sm_info *)(sbi->sm_info);
 983}
 984
 985static inline struct sit_info *SIT_I(struct f2fs_sb_info *sbi)
 986{
 987        return (struct sit_info *)(SM_I(sbi)->sit_info);
 988}
 989
 990static inline struct free_segmap_info *FREE_I(struct f2fs_sb_info *sbi)
 991{
 992        return (struct free_segmap_info *)(SM_I(sbi)->free_info);
 993}
 994
 995static inline struct dirty_seglist_info *DIRTY_I(struct f2fs_sb_info *sbi)
 996{
 997        return (struct dirty_seglist_info *)(SM_I(sbi)->dirty_info);
 998}
 999
1000static inline struct address_space *META_MAPPING(struct f2fs_sb_info *sbi)
1001{
1002        return sbi->meta_inode->i_mapping;
1003}
1004
1005static inline struct address_space *NODE_MAPPING(struct f2fs_sb_info *sbi)
1006{
1007        return sbi->node_inode->i_mapping;
1008}
1009
1010static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
1011{
1012        return sbi->s_flag & (0x01 << type);
1013}
1014
1015static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
1016{
1017        sbi->s_flag |= (0x01 << type);
1018}
1019
1020static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
1021{
1022        sbi->s_flag &= ~(0x01 << type);
1023}
1024
1025static inline unsigned long long cur_cp_version(struct f2fs_checkpoint *cp)
1026{
1027        return le64_to_cpu(cp->checkpoint_ver);
1028}
1029
1030static inline bool is_set_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
1031{
1032        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
1033        return ckpt_flags & f;
1034}
1035
1036static inline void set_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
1037{
1038        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
1039        ckpt_flags |= f;
1040        cp->ckpt_flags = cpu_to_le32(ckpt_flags);
1041}
1042
1043static inline void clear_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
1044{
1045        unsigned int ckpt_flags = le32_to_cpu(cp->ckpt_flags);
1046        ckpt_flags &= (~f);
1047        cp->ckpt_flags = cpu_to_le32(ckpt_flags);
1048}
1049
1050static inline void f2fs_lock_op(struct f2fs_sb_info *sbi)
1051{
1052        down_read(&sbi->cp_rwsem);
1053}
1054
1055static inline void f2fs_unlock_op(struct f2fs_sb_info *sbi)
1056{
1057        up_read(&sbi->cp_rwsem);
1058}
1059
1060static inline void f2fs_lock_all(struct f2fs_sb_info *sbi)
1061{
1062        down_write(&sbi->cp_rwsem);
1063}
1064
1065static inline void f2fs_unlock_all(struct f2fs_sb_info *sbi)
1066{
1067        up_write(&sbi->cp_rwsem);
1068}
1069
1070static inline int __get_cp_reason(struct f2fs_sb_info *sbi)
1071{
1072        int reason = CP_SYNC;
1073
1074        if (test_opt(sbi, FASTBOOT))
1075                reason = CP_FASTBOOT;
1076        if (is_sbi_flag_set(sbi, SBI_IS_CLOSE))
1077                reason = CP_UMOUNT;
1078        return reason;
1079}
1080
1081static inline bool __remain_node_summaries(int reason)
1082{
1083        return (reason == CP_UMOUNT || reason == CP_FASTBOOT);
1084}
1085
1086static inline bool __exist_node_summaries(struct f2fs_sb_info *sbi)
1087{
1088        return (is_set_ckpt_flags(F2FS_CKPT(sbi), CP_UMOUNT_FLAG) ||
1089                        is_set_ckpt_flags(F2FS_CKPT(sbi), CP_FASTBOOT_FLAG));
1090}
1091
1092/*
1093 * Check whether the given nid is within node id range.
1094 */
1095static inline int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
1096{
1097        if (unlikely(nid < F2FS_ROOT_INO(sbi)))
1098                return -EINVAL;
1099        if (unlikely(nid >= NM_I(sbi)->max_nid))
1100                return -EINVAL;
1101        return 0;
1102}
1103
1104#define F2FS_DEFAULT_ALLOCATED_BLOCKS   1
1105
1106/*
1107 * Check whether the inode has blocks or not
1108 */
1109static inline int F2FS_HAS_BLOCKS(struct inode *inode)
1110{
1111        if (F2FS_I(inode)->i_xattr_nid)
1112                return inode->i_blocks > F2FS_DEFAULT_ALLOCATED_BLOCKS + 1;
1113        else
1114                return inode->i_blocks > F2FS_DEFAULT_ALLOCATED_BLOCKS;
1115}
1116
1117static inline bool f2fs_has_xattr_block(unsigned int ofs)
1118{
1119        return ofs == XATTR_NODE_OFFSET;
1120}
1121
1122static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi,
1123                                 struct inode *inode, blkcnt_t *count)
1124{
1125        block_t valid_block_count;
1126
1127        spin_lock(&sbi->stat_lock);
1128#ifdef CONFIG_F2FS_FAULT_INJECTION
1129        if (time_to_inject(FAULT_BLOCK)) {
1130                spin_unlock(&sbi->stat_lock);
1131                return false;
1132        }
1133#endif
1134        valid_block_count =
1135                sbi->total_valid_block_count + (block_t)(*count);
1136        if (unlikely(valid_block_count > sbi->user_block_count)) {
1137                *count = sbi->user_block_count - sbi->total_valid_block_count;
1138                if (!*count) {
1139                        spin_unlock(&sbi->stat_lock);
1140                        return false;
1141                }
1142        }
1143        /* *count can be recalculated */
1144        inode->i_blocks += *count;
1145        sbi->total_valid_block_count =
1146                sbi->total_valid_block_count + (block_t)(*count);
1147        spin_unlock(&sbi->stat_lock);
1148
1149        percpu_counter_add(&sbi->alloc_valid_block_count, (*count));
1150        return true;
1151}
1152
1153static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
1154                                                struct inode *inode,
1155                                                blkcnt_t count)
1156{
1157        spin_lock(&sbi->stat_lock);
1158        f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count);
1159        f2fs_bug_on(sbi, inode->i_blocks < count);
1160        inode->i_blocks -= count;
1161        sbi->total_valid_block_count -= (block_t)count;
1162        spin_unlock(&sbi->stat_lock);
1163}
1164
1165static inline void inc_page_count(struct f2fs_sb_info *sbi, int count_type)
1166{
1167        percpu_counter_inc(&sbi->nr_pages[count_type]);
1168        set_sbi_flag(sbi, SBI_IS_DIRTY);
1169}
1170
1171static inline void inode_inc_dirty_pages(struct inode *inode)
1172{
1173        percpu_counter_inc(&F2FS_I(inode)->dirty_pages);
1174        inc_page_count(F2FS_I_SB(inode), S_ISDIR(inode->i_mode) ?
1175                                F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA);
1176}
1177
1178static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type)
1179{
1180        percpu_counter_dec(&sbi->nr_pages[count_type]);
1181}
1182
1183static inline void inode_dec_dirty_pages(struct inode *inode)
1184{
1185        if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) &&
1186                        !S_ISLNK(inode->i_mode))
1187                return;
1188
1189        percpu_counter_dec(&F2FS_I(inode)->dirty_pages);
1190        dec_page_count(F2FS_I_SB(inode), S_ISDIR(inode->i_mode) ?
1191                                F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA);
1192}
1193
1194static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type)
1195{
1196        return percpu_counter_sum_positive(&sbi->nr_pages[count_type]);
1197}
1198
1199static inline s64 get_dirty_pages(struct inode *inode)
1200{
1201        return percpu_counter_sum_positive(&F2FS_I(inode)->dirty_pages);
1202}
1203
1204static inline int get_blocktype_secs(struct f2fs_sb_info *sbi, int block_type)
1205{
1206        unsigned int pages_per_sec = sbi->segs_per_sec * sbi->blocks_per_seg;
1207        unsigned int segs = (get_pages(sbi, block_type) + pages_per_sec - 1) >>
1208                                                sbi->log_blocks_per_seg;
1209
1210        return segs / sbi->segs_per_sec;
1211}
1212
1213static inline block_t valid_user_blocks(struct f2fs_sb_info *sbi)
1214{
1215        return sbi->total_valid_block_count;
1216}
1217
1218static inline unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag)
1219{
1220        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1221
1222        /* return NAT or SIT bitmap */
1223        if (flag == NAT_BITMAP)
1224                return le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
1225        else if (flag == SIT_BITMAP)
1226                return le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
1227
1228        return 0;
1229}
1230
1231static inline block_t __cp_payload(struct f2fs_sb_info *sbi)
1232{
1233        return le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_payload);
1234}
1235
1236static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag)
1237{
1238        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1239        int offset;
1240
1241        if (__cp_payload(sbi) > 0) {
1242                if (flag == NAT_BITMAP)
1243                        return &ckpt->sit_nat_version_bitmap;
1244                else
1245                        return (unsigned char *)ckpt + F2FS_BLKSIZE;
1246        } else {
1247                offset = (flag == NAT_BITMAP) ?
1248                        le32_to_cpu(ckpt->sit_ver_bitmap_bytesize) : 0;
1249                return &ckpt->sit_nat_version_bitmap + offset;
1250        }
1251}
1252
1253static inline block_t __start_cp_addr(struct f2fs_sb_info *sbi)
1254{
1255        block_t start_addr;
1256        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
1257        unsigned long long ckpt_version = cur_cp_version(ckpt);
1258
1259        start_addr = le32_to_cpu(F2FS_RAW_SUPER(sbi)->cp_blkaddr);
1260
1261        /*
1262         * odd numbered checkpoint should at cp segment 0
1263         * and even segment must be at cp segment 1
1264         */
1265        if (!(ckpt_version & 1))
1266                start_addr += sbi->blocks_per_seg;
1267
1268        return start_addr;
1269}
1270
1271static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi)
1272{
1273        return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum);
1274}
1275
1276static inline bool inc_valid_node_count(struct f2fs_sb_info *sbi,
1277                                                struct inode *inode)
1278{
1279        block_t valid_block_count;
1280        unsigned int valid_node_count;
1281
1282        spin_lock(&sbi->stat_lock);
1283
1284        valid_block_count = sbi->total_valid_block_count + 1;
1285        if (unlikely(valid_block_count > sbi->user_block_count)) {
1286                spin_unlock(&sbi->stat_lock);
1287                return false;
1288        }
1289
1290        valid_node_count = sbi->total_valid_node_count + 1;
1291        if (unlikely(valid_node_count > sbi->total_node_count)) {
1292                spin_unlock(&sbi->stat_lock);
1293                return false;
1294        }
1295
1296        if (inode)
1297                inode->i_blocks++;
1298
1299        sbi->total_valid_node_count++;
1300        sbi->total_valid_block_count++;
1301        spin_unlock(&sbi->stat_lock);
1302
1303        percpu_counter_inc(&sbi->alloc_valid_block_count);
1304        return true;
1305}
1306
1307static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
1308                                                struct inode *inode)
1309{
1310        spin_lock(&sbi->stat_lock);
1311
1312        f2fs_bug_on(sbi, !sbi->total_valid_block_count);
1313        f2fs_bug_on(sbi, !sbi->total_valid_node_count);
1314        f2fs_bug_on(sbi, !inode->i_blocks);
1315
1316        inode->i_blocks--;
1317        sbi->total_valid_node_count--;
1318        sbi->total_valid_block_count--;
1319
1320        spin_unlock(&sbi->stat_lock);
1321}
1322
1323static inline unsigned int valid_node_count(struct f2fs_sb_info *sbi)
1324{
1325        return sbi->total_valid_node_count;
1326}
1327
1328static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi)
1329{
1330        percpu_counter_inc(&sbi->total_valid_inode_count);
1331}
1332
1333static inline void dec_valid_inode_count(struct f2fs_sb_info *sbi)
1334{
1335        percpu_counter_dec(&sbi->total_valid_inode_count);
1336}
1337
1338static inline s64 valid_inode_count(struct f2fs_sb_info *sbi)
1339{
1340        return percpu_counter_sum_positive(&sbi->total_valid_inode_count);
1341}
1342
1343static inline struct page *f2fs_grab_cache_page(struct address_space *mapping,
1344                                                pgoff_t index, bool for_write)
1345{
1346#ifdef CONFIG_F2FS_FAULT_INJECTION
1347        struct page *page = find_lock_page(mapping, index);
1348        if (page)
1349                return page;
1350
1351        if (time_to_inject(FAULT_PAGE_ALLOC))
1352                return NULL;
1353#endif
1354        if (!for_write)
1355                return grab_cache_page(mapping, index);
1356        return grab_cache_page_write_begin(mapping, index, AOP_FLAG_NOFS);
1357}
1358
1359static inline void f2fs_copy_page(struct page *src, struct page *dst)
1360{
1361        char *src_kaddr = kmap(src);
1362        char *dst_kaddr = kmap(dst);
1363
1364        memcpy(dst_kaddr, src_kaddr, PAGE_SIZE);
1365        kunmap(dst);
1366        kunmap(src);
1367}
1368
1369static inline void f2fs_put_page(struct page *page, int unlock)
1370{
1371        if (!page)
1372                return;
1373
1374        if (unlock) {
1375                f2fs_bug_on(F2FS_P_SB(page), !PageLocked(page));
1376                unlock_page(page);
1377        }
1378        put_page(page);
1379}
1380
1381static inline void f2fs_put_dnode(struct dnode_of_data *dn)
1382{
1383        if (dn->node_page)
1384                f2fs_put_page(dn->node_page, 1);
1385        if (dn->inode_page && dn->node_page != dn->inode_page)
1386                f2fs_put_page(dn->inode_page, 0);
1387        dn->node_page = NULL;
1388        dn->inode_page = NULL;
1389}
1390
1391static inline struct kmem_cache *f2fs_kmem_cache_create(const char *name,
1392                                        size_t size)
1393{
1394        return kmem_cache_create(name, size, 0, SLAB_RECLAIM_ACCOUNT, NULL);
1395}
1396
1397static inline void *f2fs_kmem_cache_alloc(struct kmem_cache *cachep,
1398                                                gfp_t flags)
1399{
1400        void *entry;
1401
1402        entry = kmem_cache_alloc(cachep, flags);
1403        if (!entry)
1404                entry = kmem_cache_alloc(cachep, flags | __GFP_NOFAIL);
1405        return entry;
1406}
1407
1408static inline struct bio *f2fs_bio_alloc(int npages)
1409{
1410        struct bio *bio;
1411
1412        /* No failure on bio allocation */
1413        bio = bio_alloc(GFP_NOIO, npages);
1414        if (!bio)
1415                bio = bio_alloc(GFP_NOIO | __GFP_NOFAIL, npages);
1416        return bio;
1417}
1418
1419static inline void f2fs_radix_tree_insert(struct radix_tree_root *root,
1420                                unsigned long index, void *item)
1421{
1422        while (radix_tree_insert(root, index, item))
1423                cond_resched();
1424}
1425
1426#define RAW_IS_INODE(p) ((p)->footer.nid == (p)->footer.ino)
1427
1428static inline bool IS_INODE(struct page *page)
1429{
1430        struct f2fs_node *p = F2FS_NODE(page);
1431        return RAW_IS_INODE(p);
1432}
1433
1434static inline __le32 *blkaddr_in_node(struct f2fs_node *node)
1435{
1436        return RAW_IS_INODE(node) ? node->i.i_addr : node->dn.addr;
1437}
1438
1439static inline block_t datablock_addr(struct page *node_page,
1440                unsigned int offset)
1441{
1442        struct f2fs_node *raw_node;
1443        __le32 *addr_array;
1444        raw_node = F2FS_NODE(node_page);
1445        addr_array = blkaddr_in_node(raw_node);
1446        return le32_to_cpu(addr_array[offset]);
1447}
1448
1449static inline int f2fs_test_bit(unsigned int nr, char *addr)
1450{
1451        int mask;
1452
1453        addr += (nr >> 3);
1454        mask = 1 << (7 - (nr & 0x07));
1455        return mask & *addr;
1456}
1457
1458static inline void f2fs_set_bit(unsigned int nr, char *addr)
1459{
1460        int mask;
1461
1462        addr += (nr >> 3);
1463        mask = 1 << (7 - (nr & 0x07));
1464        *addr |= mask;
1465}
1466
1467static inline void f2fs_clear_bit(unsigned int nr, char *addr)
1468{
1469        int mask;
1470
1471        addr += (nr >> 3);
1472        mask = 1 << (7 - (nr & 0x07));
1473        *addr &= ~mask;
1474}
1475
1476static inline int f2fs_test_and_set_bit(unsigned int nr, char *addr)
1477{
1478        int mask;
1479        int ret;
1480
1481        addr += (nr >> 3);
1482        mask = 1 << (7 - (nr & 0x07));
1483        ret = mask & *addr;
1484        *addr |= mask;
1485        return ret;
1486}
1487
1488static inline int f2fs_test_and_clear_bit(unsigned int nr, char *addr)
1489{
1490        int mask;
1491        int ret;
1492
1493        addr += (nr >> 3);
1494        mask = 1 << (7 - (nr & 0x07));
1495        ret = mask & *addr;
1496        *addr &= ~mask;
1497        return ret;
1498}
1499
1500static inline void f2fs_change_bit(unsigned int nr, char *addr)
1501{
1502        int mask;
1503
1504        addr += (nr >> 3);
1505        mask = 1 << (7 - (nr & 0x07));
1506        *addr ^= mask;
1507}
1508
1509/* used for f2fs_inode_info->flags */
1510enum {
1511        FI_NEW_INODE,           /* indicate newly allocated inode */
1512        FI_DIRTY_INODE,         /* indicate inode is dirty or not */
1513        FI_DIRTY_DIR,           /* indicate directory has dirty pages */
1514        FI_INC_LINK,            /* need to increment i_nlink */
1515        FI_ACL_MODE,            /* indicate acl mode */
1516        FI_NO_ALLOC,            /* should not allocate any blocks */
1517        FI_FREE_NID,            /* free allocated nide */
1518        FI_UPDATE_DIR,          /* should update inode block for consistency */
1519        FI_NO_EXTENT,           /* not to use the extent cache */
1520        FI_INLINE_XATTR,        /* used for inline xattr */
1521        FI_INLINE_DATA,         /* used for inline data*/
1522        FI_INLINE_DENTRY,       /* used for inline dentry */
1523        FI_APPEND_WRITE,        /* inode has appended data */
1524        FI_UPDATE_WRITE,        /* inode has in-place-update data */
1525        FI_NEED_IPU,            /* used for ipu per file */
1526        FI_ATOMIC_FILE,         /* indicate atomic file */
1527        FI_VOLATILE_FILE,       /* indicate volatile file */
1528        FI_FIRST_BLOCK_WRITTEN, /* indicate #0 data block was written */
1529        FI_DROP_CACHE,          /* drop dirty page cache */
1530        FI_DATA_EXIST,          /* indicate data exists */
1531        FI_INLINE_DOTS,         /* indicate inline dot dentries */
1532        FI_DO_DEFRAG,           /* indicate defragment is running */
1533        FI_DIRTY_FILE,          /* indicate regular/symlink has dirty pages */
1534};
1535
1536static inline void set_inode_flag(struct f2fs_inode_info *fi, int flag)
1537{
1538        if (!test_bit(flag, &fi->flags))
1539                set_bit(flag, &fi->flags);
1540}
1541
1542static inline int is_inode_flag_set(struct f2fs_inode_info *fi, int flag)
1543{
1544        return test_bit(flag, &fi->flags);
1545}
1546
1547static inline void clear_inode_flag(struct f2fs_inode_info *fi, int flag)
1548{
1549        if (test_bit(flag, &fi->flags))
1550                clear_bit(flag, &fi->flags);
1551}
1552
1553static inline void set_acl_inode(struct f2fs_inode_info *fi, umode_t mode)
1554{
1555        fi->i_acl_mode = mode;
1556        set_inode_flag(fi, FI_ACL_MODE);
1557}
1558
1559static inline void get_inline_info(struct f2fs_inode_info *fi,
1560                                        struct f2fs_inode *ri)
1561{
1562        if (ri->i_inline & F2FS_INLINE_XATTR)
1563                set_inode_flag(fi, FI_INLINE_XATTR);
1564        if (ri->i_inline & F2FS_INLINE_DATA)
1565                set_inode_flag(fi, FI_INLINE_DATA);
1566        if (ri->i_inline & F2FS_INLINE_DENTRY)
1567                set_inode_flag(fi, FI_INLINE_DENTRY);
1568        if (ri->i_inline & F2FS_DATA_EXIST)
1569                set_inode_flag(fi, FI_DATA_EXIST);
1570        if (ri->i_inline & F2FS_INLINE_DOTS)
1571                set_inode_flag(fi, FI_INLINE_DOTS);
1572}
1573
1574static inline void set_raw_inline(struct f2fs_inode_info *fi,
1575                                        struct f2fs_inode *ri)
1576{
1577        ri->i_inline = 0;
1578
1579        if (is_inode_flag_set(fi, FI_INLINE_XATTR))
1580                ri->i_inline |= F2FS_INLINE_XATTR;
1581        if (is_inode_flag_set(fi, FI_INLINE_DATA))
1582                ri->i_inline |= F2FS_INLINE_DATA;
1583        if (is_inode_flag_set(fi, FI_INLINE_DENTRY))
1584                ri->i_inline |= F2FS_INLINE_DENTRY;
1585        if (is_inode_flag_set(fi, FI_DATA_EXIST))
1586                ri->i_inline |= F2FS_DATA_EXIST;
1587        if (is_inode_flag_set(fi, FI_INLINE_DOTS))
1588                ri->i_inline |= F2FS_INLINE_DOTS;
1589}
1590
1591static inline int f2fs_has_inline_xattr(struct inode *inode)
1592{
1593        return is_inode_flag_set(F2FS_I(inode), FI_INLINE_XATTR);
1594}
1595
1596static inline unsigned int addrs_per_inode(struct inode *inode)
1597{
1598        if (f2fs_has_inline_xattr(inode))
1599                return DEF_ADDRS_PER_INODE - F2FS_INLINE_XATTR_ADDRS;
1600        return DEF_ADDRS_PER_INODE;
1601}
1602
1603static inline void *inline_xattr_addr(struct page *page)
1604{
1605        struct f2fs_inode *ri = F2FS_INODE(page);
1606        return (void *)&(ri->i_addr[DEF_ADDRS_PER_INODE -
1607                                        F2FS_INLINE_XATTR_ADDRS]);
1608}
1609
1610static inline int inline_xattr_size(struct inode *inode)
1611{
1612        if (f2fs_has_inline_xattr(inode))
1613                return F2FS_INLINE_XATTR_ADDRS << 2;
1614        else
1615                return 0;
1616}
1617
1618static inline int f2fs_has_inline_data(struct inode *inode)
1619{
1620        return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DATA);
1621}
1622
1623static inline void f2fs_clear_inline_inode(struct inode *inode)
1624{
1625        clear_inode_flag(F2FS_I(inode), FI_INLINE_DATA);
1626        clear_inode_flag(F2FS_I(inode), FI_DATA_EXIST);
1627}
1628
1629static inline int f2fs_exist_data(struct inode *inode)
1630{
1631        return is_inode_flag_set(F2FS_I(inode), FI_DATA_EXIST);
1632}
1633
1634static inline int f2fs_has_inline_dots(struct inode *inode)
1635{
1636        return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DOTS);
1637}
1638
1639static inline bool f2fs_is_atomic_file(struct inode *inode)
1640{
1641        return is_inode_flag_set(F2FS_I(inode), FI_ATOMIC_FILE);
1642}
1643
1644static inline bool f2fs_is_volatile_file(struct inode *inode)
1645{
1646        return is_inode_flag_set(F2FS_I(inode), FI_VOLATILE_FILE);
1647}
1648
1649static inline bool f2fs_is_first_block_written(struct inode *inode)
1650{
1651        return is_inode_flag_set(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN);
1652}
1653
1654static inline bool f2fs_is_drop_cache(struct inode *inode)
1655{
1656        return is_inode_flag_set(F2FS_I(inode), FI_DROP_CACHE);
1657}
1658
1659static inline void *inline_data_addr(struct page *page)
1660{
1661        struct f2fs_inode *ri = F2FS_INODE(page);
1662        return (void *)&(ri->i_addr[1]);
1663}
1664
1665static inline int f2fs_has_inline_dentry(struct inode *inode)
1666{
1667        return is_inode_flag_set(F2FS_I(inode), FI_INLINE_DENTRY);
1668}
1669
1670static inline void f2fs_dentry_kunmap(struct inode *dir, struct page *page)
1671{
1672        if (!f2fs_has_inline_dentry(dir))
1673                kunmap(page);
1674}
1675
1676static inline int is_file(struct inode *inode, int type)
1677{
1678        return F2FS_I(inode)->i_advise & type;
1679}
1680
1681static inline void set_file(struct inode *inode, int type)
1682{
1683        F2FS_I(inode)->i_advise |= type;
1684}
1685
1686static inline void clear_file(struct inode *inode, int type)
1687{
1688        F2FS_I(inode)->i_advise &= ~type;
1689}
1690
1691static inline int f2fs_readonly(struct super_block *sb)
1692{
1693        return sb->s_flags & MS_RDONLY;
1694}
1695
1696static inline bool f2fs_cp_error(struct f2fs_sb_info *sbi)
1697{
1698        return is_set_ckpt_flags(sbi->ckpt, CP_ERROR_FLAG);
1699}
1700
1701static inline bool is_dot_dotdot(const struct qstr *str)
1702{
1703        if (str->len == 1 && str->name[0] == '.')
1704                return true;
1705
1706        if (str->len == 2 && str->name[0] == '.' && str->name[1] == '.')
1707                return true;
1708
1709        return false;
1710}
1711
1712static inline bool f2fs_may_extent_tree(struct inode *inode)
1713{
1714        if (!test_opt(F2FS_I_SB(inode), EXTENT_CACHE) ||
1715                        is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT))
1716                return false;
1717
1718        return S_ISREG(inode->i_mode);
1719}
1720
1721static inline void *f2fs_kmalloc(size_t size, gfp_t flags)
1722{
1723#ifdef CONFIG_F2FS_FAULT_INJECTION
1724        if (time_to_inject(FAULT_KMALLOC))
1725                return NULL;
1726#endif
1727        return kmalloc(size, flags);
1728}
1729
1730static inline void *f2fs_kvmalloc(size_t size, gfp_t flags)
1731{
1732        void *ret;
1733
1734        ret = kmalloc(size, flags | __GFP_NOWARN);
1735        if (!ret)
1736                ret = __vmalloc(size, flags, PAGE_KERNEL);
1737        return ret;
1738}
1739
1740static inline void *f2fs_kvzalloc(size_t size, gfp_t flags)
1741{
1742        void *ret;
1743
1744        ret = kzalloc(size, flags | __GFP_NOWARN);
1745        if (!ret)
1746                ret = __vmalloc(size, flags | __GFP_ZERO, PAGE_KERNEL);
1747        return ret;
1748}
1749
1750#define get_inode_mode(i) \
1751        ((is_inode_flag_set(F2FS_I(i), FI_ACL_MODE)) ? \
1752         (F2FS_I(i)->i_acl_mode) : ((i)->i_mode))
1753
1754/* get offset of first page in next direct node */
1755#define PGOFS_OF_NEXT_DNODE(pgofs, inode)                               \
1756        ((pgofs < ADDRS_PER_INODE(inode)) ? ADDRS_PER_INODE(inode) :    \
1757        (pgofs - ADDRS_PER_INODE(inode) + ADDRS_PER_BLOCK) /    \
1758        ADDRS_PER_BLOCK * ADDRS_PER_BLOCK + ADDRS_PER_INODE(inode))
1759
1760/*
1761 * file.c
1762 */
1763int f2fs_sync_file(struct file *, loff_t, loff_t, int);
1764void truncate_data_blocks(struct dnode_of_data *);
1765int truncate_blocks(struct inode *, u64, bool);
1766int f2fs_truncate(struct inode *, bool);
1767int f2fs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
1768int f2fs_setattr(struct dentry *, struct iattr *);
1769int truncate_hole(struct inode *, pgoff_t, pgoff_t);
1770int truncate_data_blocks_range(struct dnode_of_data *, int);
1771long f2fs_ioctl(struct file *, unsigned int, unsigned long);
1772long f2fs_compat_ioctl(struct file *, unsigned int, unsigned long);
1773
1774/*
1775 * inode.c
1776 */
1777void f2fs_set_inode_flags(struct inode *);
1778struct inode *f2fs_iget(struct super_block *, unsigned long);
1779int try_to_free_nats(struct f2fs_sb_info *, int);
1780int update_inode(struct inode *, struct page *);
1781int update_inode_page(struct inode *);
1782int f2fs_write_inode(struct inode *, struct writeback_control *);
1783void f2fs_evict_inode(struct inode *);
1784void handle_failed_inode(struct inode *);
1785
1786/*
1787 * namei.c
1788 */
1789struct dentry *f2fs_get_parent(struct dentry *child);
1790
1791/*
1792 * dir.c
1793 */
1794extern unsigned char f2fs_filetype_table[F2FS_FT_MAX];
1795void set_de_type(struct f2fs_dir_entry *, umode_t);
1796unsigned char get_de_type(struct f2fs_dir_entry *);
1797struct f2fs_dir_entry *find_target_dentry(struct fscrypt_name *,
1798                        f2fs_hash_t, int *, struct f2fs_dentry_ptr *);
1799bool f2fs_fill_dentries(struct dir_context *, struct f2fs_dentry_ptr *,
1800                        unsigned int, struct fscrypt_str *);
1801void do_make_empty_dir(struct inode *, struct inode *,
1802                        struct f2fs_dentry_ptr *);
1803struct page *init_inode_metadata(struct inode *, struct inode *,
1804                        const struct qstr *, struct page *);
1805void update_parent_metadata(struct inode *, struct inode *, unsigned int);
1806int room_for_filename(const void *, int, int);
1807void f2fs_drop_nlink(struct inode *, struct inode *, struct page *);
1808struct f2fs_dir_entry *f2fs_find_entry(struct inode *, struct qstr *,
1809                                                        struct page **);
1810struct f2fs_dir_entry *f2fs_parent_dir(struct inode *, struct page **);
1811ino_t f2fs_inode_by_name(struct inode *, struct qstr *);
1812void f2fs_set_link(struct inode *, struct f2fs_dir_entry *,
1813                                struct page *, struct inode *);
1814int update_dent_inode(struct inode *, struct inode *, const struct qstr *);
1815void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *,
1816                        const struct qstr *, f2fs_hash_t , unsigned int);
1817int f2fs_add_regular_entry(struct inode *, const struct qstr *,
1818                                                struct inode *, nid_t, umode_t);
1819int __f2fs_add_link(struct inode *, const struct qstr *, struct inode *, nid_t,
1820                        umode_t);
1821void f2fs_delete_entry(struct f2fs_dir_entry *, struct page *, struct inode *,
1822                                                        struct inode *);
1823int f2fs_do_tmpfile(struct inode *, struct inode *);
1824bool f2fs_empty_dir(struct inode *);
1825
1826static inline int f2fs_add_link(struct dentry *dentry, struct inode *inode)
1827{
1828        return __f2fs_add_link(d_inode(dentry->d_parent), &dentry->d_name,
1829                                inode, inode->i_ino, inode->i_mode);
1830}
1831
1832/*
1833 * super.c
1834 */
1835int f2fs_commit_super(struct f2fs_sb_info *, bool);
1836int f2fs_sync_fs(struct super_block *, int);
1837extern __printf(3, 4)
1838void f2fs_msg(struct super_block *, const char *, const char *, ...);
1839int sanity_check_ckpt(struct f2fs_sb_info *sbi);
1840
1841/*
1842 * hash.c
1843 */
1844f2fs_hash_t f2fs_dentry_hash(const struct qstr *);
1845
1846/*
1847 * node.c
1848 */
1849struct dnode_of_data;
1850struct node_info;
1851
1852bool available_free_memory(struct f2fs_sb_info *, int);
1853int need_dentry_mark(struct f2fs_sb_info *, nid_t);
1854bool is_checkpointed_node(struct f2fs_sb_info *, nid_t);
1855bool need_inode_block_update(struct f2fs_sb_info *, nid_t);
1856void get_node_info(struct f2fs_sb_info *, nid_t, struct node_info *);
1857pgoff_t get_next_page_offset(struct dnode_of_data *, pgoff_t);
1858int get_dnode_of_data(struct dnode_of_data *, pgoff_t, int);
1859int truncate_inode_blocks(struct inode *, pgoff_t);
1860int truncate_xattr_node(struct inode *, struct page *);
1861int wait_on_node_pages_writeback(struct f2fs_sb_info *, nid_t);
1862int remove_inode_page(struct inode *);
1863struct page *new_inode_page(struct inode *);
1864struct page *new_node_page(struct dnode_of_data *, unsigned int, struct page *);
1865void ra_node_page(struct f2fs_sb_info *, nid_t);
1866struct page *get_node_page(struct f2fs_sb_info *, pgoff_t);
1867struct page *get_node_page_ra(struct page *, int);
1868void sync_inode_page(struct dnode_of_data *);
1869void move_node_page(struct page *, int);
1870int fsync_node_pages(struct f2fs_sb_info *, nid_t, struct writeback_control *,
1871                                                                bool);
1872int sync_node_pages(struct f2fs_sb_info *, struct writeback_control *);
1873bool alloc_nid(struct f2fs_sb_info *, nid_t *);
1874void alloc_nid_done(struct f2fs_sb_info *, nid_t);
1875void alloc_nid_failed(struct f2fs_sb_info *, nid_t);
1876int try_to_free_nids(struct f2fs_sb_info *, int);
1877void recover_inline_xattr(struct inode *, struct page *);
1878void recover_xattr_data(struct inode *, struct page *, block_t);
1879int recover_inode_page(struct f2fs_sb_info *, struct page *);
1880int restore_node_summary(struct f2fs_sb_info *, unsigned int,
1881                                struct f2fs_summary_block *);
1882void flush_nat_entries(struct f2fs_sb_info *);
1883int build_node_manager(struct f2fs_sb_info *);
1884void destroy_node_manager(struct f2fs_sb_info *);
1885int __init create_node_manager_caches(void);
1886void destroy_node_manager_caches(void);
1887
1888/*
1889 * segment.c
1890 */
1891void register_inmem_page(struct inode *, struct page *);
1892void drop_inmem_pages(struct inode *);
1893int commit_inmem_pages(struct inode *);
1894void f2fs_balance_fs(struct f2fs_sb_info *, bool);
1895void f2fs_balance_fs_bg(struct f2fs_sb_info *);
1896int f2fs_issue_flush(struct f2fs_sb_info *);
1897int create_flush_cmd_control(struct f2fs_sb_info *);
1898void destroy_flush_cmd_control(struct f2fs_sb_info *);
1899void invalidate_blocks(struct f2fs_sb_info *, block_t);
1900bool is_checkpointed_data(struct f2fs_sb_info *, block_t);
1901void refresh_sit_entry(struct f2fs_sb_info *, block_t, block_t);
1902void clear_prefree_segments(struct f2fs_sb_info *, struct cp_control *);
1903void release_discard_addrs(struct f2fs_sb_info *);
1904bool discard_next_dnode(struct f2fs_sb_info *, block_t);
1905int npages_for_summary_flush(struct f2fs_sb_info *, bool);
1906void allocate_new_segments(struct f2fs_sb_info *);
1907int f2fs_trim_fs(struct f2fs_sb_info *, struct fstrim_range *);
1908struct page *get_sum_page(struct f2fs_sb_info *, unsigned int);
1909void update_meta_page(struct f2fs_sb_info *, void *, block_t);
1910void write_meta_page(struct f2fs_sb_info *, struct page *);
1911void write_node_page(unsigned int, struct f2fs_io_info *);
1912void write_data_page(struct dnode_of_data *, struct f2fs_io_info *);
1913void rewrite_data_page(struct f2fs_io_info *);
1914void __f2fs_replace_block(struct f2fs_sb_info *, struct f2fs_summary *,
1915                                        block_t, block_t, bool, bool);
1916void f2fs_replace_block(struct f2fs_sb_info *, struct dnode_of_data *,
1917                                block_t, block_t, unsigned char, bool, bool);
1918void allocate_data_block(struct f2fs_sb_info *, struct page *,
1919                block_t, block_t *, struct f2fs_summary *, int);
1920void f2fs_wait_on_page_writeback(struct page *, enum page_type, bool);
1921void f2fs_wait_on_encrypted_page_writeback(struct f2fs_sb_info *, block_t);
1922void write_data_summaries(struct f2fs_sb_info *, block_t);
1923void write_node_summaries(struct f2fs_sb_info *, block_t);
1924int lookup_journal_in_cursum(struct f2fs_journal *, int, unsigned int, int);
1925void flush_sit_entries(struct f2fs_sb_info *, struct cp_control *);
1926int build_segment_manager(struct f2fs_sb_info *);
1927void destroy_segment_manager(struct f2fs_sb_info *);
1928int __init create_segment_manager_caches(void);
1929void destroy_segment_manager_caches(void);
1930
1931/*
1932 * checkpoint.c
1933 */
1934void f2fs_stop_checkpoint(struct f2fs_sb_info *, bool);
1935struct page *grab_meta_page(struct f2fs_sb_info *, pgoff_t);
1936struct page *get_meta_page(struct f2fs_sb_info *, pgoff_t);
1937struct page *get_tmp_page(struct f2fs_sb_info *, pgoff_t);
1938bool is_valid_blkaddr(struct f2fs_sb_info *, block_t, int);
1939int ra_meta_pages(struct f2fs_sb_info *, block_t, int, int, bool);
1940void ra_meta_pages_cond(struct f2fs_sb_info *, pgoff_t);
1941long sync_meta_pages(struct f2fs_sb_info *, enum page_type, long);
1942void add_ino_entry(struct f2fs_sb_info *, nid_t, int type);
1943void remove_ino_entry(struct f2fs_sb_info *, nid_t, int type);
1944void release_ino_entry(struct f2fs_sb_info *, bool);
1945bool exist_written_data(struct f2fs_sb_info *, nid_t, int);
1946int acquire_orphan_inode(struct f2fs_sb_info *);
1947void release_orphan_inode(struct f2fs_sb_info *);
1948void add_orphan_inode(struct f2fs_sb_info *, nid_t);
1949void remove_orphan_inode(struct f2fs_sb_info *, nid_t);
1950int recover_orphan_inodes(struct f2fs_sb_info *);
1951int get_valid_checkpoint(struct f2fs_sb_info *);
1952void update_dirty_page(struct inode *, struct page *);
1953void remove_dirty_inode(struct inode *);
1954int sync_dirty_inodes(struct f2fs_sb_info *, enum inode_type);
1955int write_checkpoint(struct f2fs_sb_info *, struct cp_control *);
1956void init_ino_entry_info(struct f2fs_sb_info *);
1957int __init create_checkpoint_caches(void);
1958void destroy_checkpoint_caches(void);
1959
1960/*
1961 * data.c
1962 */
1963void f2fs_submit_merged_bio(struct f2fs_sb_info *, enum page_type, int);
1964void f2fs_submit_merged_bio_cond(struct f2fs_sb_info *, struct inode *,
1965                                struct page *, nid_t, enum page_type, int);
1966void f2fs_flush_merged_bios(struct f2fs_sb_info *);
1967int f2fs_submit_page_bio(struct f2fs_io_info *);
1968void f2fs_submit_page_mbio(struct f2fs_io_info *);
1969void set_data_blkaddr(struct dnode_of_data *);
1970void f2fs_update_data_blkaddr(struct dnode_of_data *, block_t);
1971int reserve_new_blocks(struct dnode_of_data *, blkcnt_t);
1972int reserve_new_block(struct dnode_of_data *);
1973int f2fs_get_block(struct dnode_of_data *, pgoff_t);
1974ssize_t f2fs_preallocate_blocks(struct kiocb *, struct iov_iter *);
1975int f2fs_reserve_block(struct dnode_of_data *, pgoff_t);
1976struct page *get_read_data_page(struct inode *, pgoff_t, int, bool);
1977struct page *find_data_page(struct inode *, pgoff_t);
1978struct page *get_lock_data_page(struct inode *, pgoff_t, bool);
1979struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool);
1980int do_write_data_page(struct f2fs_io_info *);
1981int f2fs_map_blocks(struct inode *, struct f2fs_map_blocks *, int, int);
1982int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64);
1983void f2fs_invalidate_page(struct page *, unsigned int, unsigned int);
1984int f2fs_release_page(struct page *, gfp_t);
1985
1986/*
1987 * gc.c
1988 */
1989int start_gc_thread(struct f2fs_sb_info *);
1990void stop_gc_thread(struct f2fs_sb_info *);
1991block_t start_bidx_of_node(unsigned int, struct inode *);
1992int f2fs_gc(struct f2fs_sb_info *, bool);
1993void build_gc_manager(struct f2fs_sb_info *);
1994
1995/*
1996 * recovery.c
1997 */
1998int recover_fsync_data(struct f2fs_sb_info *, bool);
1999bool space_for_roll_forward(struct f2fs_sb_info *);
2000
2001/*
2002 * debug.c
2003 */
2004#ifdef CONFIG_F2FS_STAT_FS
2005struct f2fs_stat_info {
2006        struct list_head stat_list;
2007        struct f2fs_sb_info *sbi;
2008        int all_area_segs, sit_area_segs, nat_area_segs, ssa_area_segs;
2009        int main_area_segs, main_area_sections, main_area_zones;
2010        unsigned long long hit_largest, hit_cached, hit_rbtree;
2011        unsigned long long hit_total, total_ext;
2012        int ext_tree, zombie_tree, ext_node;
2013        s64 ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, inmem_pages;
2014        unsigned int ndirty_dirs, ndirty_files;
2015        int nats, dirty_nats, sits, dirty_sits, fnids;
2016        int total_count, utilization;
2017        int bg_gc, wb_bios;
2018        int inline_xattr, inline_inode, inline_dir, orphans;
2019        unsigned int valid_count, valid_node_count, valid_inode_count;
2020        unsigned int bimodal, avg_vblocks;
2021        int util_free, util_valid, util_invalid;
2022        int rsvd_segs, overp_segs;
2023        int dirty_count, node_pages, meta_pages;
2024        int prefree_count, call_count, cp_count, bg_cp_count;
2025        int tot_segs, node_segs, data_segs, free_segs, free_secs;
2026        int bg_node_segs, bg_data_segs;
2027        int tot_blks, data_blks, node_blks;
2028        int bg_data_blks, bg_node_blks;
2029        int curseg[NR_CURSEG_TYPE];
2030        int cursec[NR_CURSEG_TYPE];
2031        int curzone[NR_CURSEG_TYPE];
2032
2033        unsigned int segment_count[2];
2034        unsigned int block_count[2];
2035        unsigned int inplace_count;
2036        unsigned long long base_mem, cache_mem, page_mem;
2037};
2038
2039static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
2040{
2041        return (struct f2fs_stat_info *)sbi->stat_info;
2042}
2043
2044#define stat_inc_cp_count(si)           ((si)->cp_count++)
2045#define stat_inc_bg_cp_count(si)        ((si)->bg_cp_count++)
2046#define stat_inc_call_count(si)         ((si)->call_count++)
2047#define stat_inc_bggc_count(sbi)        ((sbi)->bg_gc++)
2048#define stat_inc_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]++)
2049#define stat_dec_dirty_inode(sbi, type) ((sbi)->ndirty_inode[type]--)
2050#define stat_inc_total_hit(sbi)         (atomic64_inc(&(sbi)->total_hit_ext))
2051#define stat_inc_rbtree_node_hit(sbi)   (atomic64_inc(&(sbi)->read_hit_rbtree))
2052#define stat_inc_largest_node_hit(sbi)  (atomic64_inc(&(sbi)->read_hit_largest))
2053#define stat_inc_cached_node_hit(sbi)   (atomic64_inc(&(sbi)->read_hit_cached))
2054#define stat_inc_inline_xattr(inode)                                    \
2055        do {                                                            \
2056                if (f2fs_has_inline_xattr(inode))                       \
2057                        (atomic_inc(&F2FS_I_SB(inode)->inline_xattr));  \
2058        } while (0)
2059#define stat_dec_inline_xattr(inode)                                    \
2060        do {                                                            \
2061                if (f2fs_has_inline_xattr(inode))                       \
2062                        (atomic_dec(&F2FS_I_SB(inode)->inline_xattr));  \
2063        } while (0)
2064#define stat_inc_inline_inode(inode)                                    \
2065        do {                                                            \
2066                if (f2fs_has_inline_data(inode))                        \
2067                        (atomic_inc(&F2FS_I_SB(inode)->inline_inode));  \
2068        } while (0)
2069#define stat_dec_inline_inode(inode)                                    \
2070        do {                                                            \
2071                if (f2fs_has_inline_data(inode))                        \
2072                        (atomic_dec(&F2FS_I_SB(inode)->inline_inode));  \
2073        } while (0)
2074#define stat_inc_inline_dir(inode)                                      \
2075        do {                                                            \
2076                if (f2fs_has_inline_dentry(inode))                      \
2077                        (atomic_inc(&F2FS_I_SB(inode)->inline_dir));    \
2078        } while (0)
2079#define stat_dec_inline_dir(inode)                                      \
2080        do {                                                            \
2081                if (f2fs_has_inline_dentry(inode))                      \
2082                        (atomic_dec(&F2FS_I_SB(inode)->inline_dir));    \
2083        } while (0)
2084#define stat_inc_seg_type(sbi, curseg)                                  \
2085                ((sbi)->segment_count[(curseg)->alloc_type]++)
2086#define stat_inc_block_count(sbi, curseg)                               \
2087                ((sbi)->block_count[(curseg)->alloc_type]++)
2088#define stat_inc_inplace_blocks(sbi)                                    \
2089                (atomic_inc(&(sbi)->inplace_count))
2090#define stat_inc_seg_count(sbi, type, gc_type)                          \
2091        do {                                                            \
2092                struct f2fs_stat_info *si = F2FS_STAT(sbi);             \
2093                (si)->tot_segs++;                                       \
2094                if (type == SUM_TYPE_DATA) {                            \
2095                        si->data_segs++;                                \
2096                        si->bg_data_segs += (gc_type == BG_GC) ? 1 : 0; \
2097                } else {                                                \
2098                        si->node_segs++;                                \
2099                        si->bg_node_segs += (gc_type == BG_GC) ? 1 : 0; \
2100                }                                                       \
2101        } while (0)
2102
2103#define stat_inc_tot_blk_count(si, blks)                                \
2104        (si->tot_blks += (blks))
2105
2106#define stat_inc_data_blk_count(sbi, blks, gc_type)                     \
2107        do {                                                            \
2108                struct f2fs_stat_info *si = F2FS_STAT(sbi);             \
2109                stat_inc_tot_blk_count(si, blks);                       \
2110                si->data_blks += (blks);                                \
2111                si->bg_data_blks += (gc_type == BG_GC) ? (blks) : 0;    \
2112        } while (0)
2113
2114#define stat_inc_node_blk_count(sbi, blks, gc_type)                     \
2115        do {                                                            \
2116                struct f2fs_stat_info *si = F2FS_STAT(sbi);             \
2117                stat_inc_tot_blk_count(si, blks);                       \
2118                si->node_blks += (blks);                                \
2119                si->bg_node_blks += (gc_type == BG_GC) ? (blks) : 0;    \
2120        } while (0)
2121
2122int f2fs_build_stats(struct f2fs_sb_info *);
2123void f2fs_destroy_stats(struct f2fs_sb_info *);
2124int __init f2fs_create_root_stats(void);
2125void f2fs_destroy_root_stats(void);
2126#else
2127#define stat_inc_cp_count(si)
2128#define stat_inc_bg_cp_count(si)
2129#define stat_inc_call_count(si)
2130#define stat_inc_bggc_count(si)
2131#define stat_inc_dirty_inode(sbi, type)
2132#define stat_dec_dirty_inode(sbi, type)
2133#define stat_inc_total_hit(sb)
2134#define stat_inc_rbtree_node_hit(sb)
2135#define stat_inc_largest_node_hit(sbi)
2136#define stat_inc_cached_node_hit(sbi)
2137#define stat_inc_inline_xattr(inode)
2138#define stat_dec_inline_xattr(inode)
2139#define stat_inc_inline_inode(inode)
2140#define stat_dec_inline_inode(inode)
2141#define stat_inc_inline_dir(inode)
2142#define stat_dec_inline_dir(inode)
2143#define stat_inc_seg_type(sbi, curseg)
2144#define stat_inc_block_count(sbi, curseg)
2145#define stat_inc_inplace_blocks(sbi)
2146#define stat_inc_seg_count(sbi, type, gc_type)
2147#define stat_inc_tot_blk_count(si, blks)
2148#define stat_inc_data_blk_count(sbi, blks, gc_type)
2149#define stat_inc_node_blk_count(sbi, blks, gc_type)
2150
2151static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
2152static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
2153static inline int __init f2fs_create_root_stats(void) { return 0; }
2154static inline void f2fs_destroy_root_stats(void) { }
2155#endif
2156
2157extern const struct file_operations f2fs_dir_operations;
2158extern const struct file_operations f2fs_file_operations;
2159extern const struct inode_operations f2fs_file_inode_operations;
2160extern const struct address_space_operations f2fs_dblock_aops;
2161extern const struct address_space_operations f2fs_node_aops;
2162extern const struct address_space_operations f2fs_meta_aops;
2163extern const struct inode_operations f2fs_dir_inode_operations;
2164extern const struct inode_operations f2fs_symlink_inode_operations;
2165extern const struct inode_operations f2fs_encrypted_symlink_inode_operations;
2166extern const struct inode_operations f2fs_special_inode_operations;
2167extern struct kmem_cache *inode_entry_slab;
2168
2169/*
2170 * inline.c
2171 */
2172bool f2fs_may_inline_data(struct inode *);
2173bool f2fs_may_inline_dentry(struct inode *);
2174void read_inline_data(struct page *, struct page *);
2175bool truncate_inline_inode(struct page *, u64);
2176int f2fs_read_inline_data(struct inode *, struct page *);
2177int f2fs_convert_inline_page(struct dnode_of_data *, struct page *);
2178int f2fs_convert_inline_inode(struct inode *);
2179int f2fs_write_inline_data(struct inode *, struct page *);
2180bool recover_inline_data(struct inode *, struct page *);
2181struct f2fs_dir_entry *find_in_inline_dir(struct inode *,
2182                                struct fscrypt_name *, struct page **);
2183struct f2fs_dir_entry *f2fs_parent_inline_dir(struct inode *, struct page **);
2184int make_empty_inline_dir(struct inode *inode, struct inode *, struct page *);
2185int f2fs_add_inline_entry(struct inode *, const struct qstr *, struct inode *,
2186                                                nid_t, umode_t);
2187void f2fs_delete_inline_entry(struct f2fs_dir_entry *, struct page *,
2188                                                struct inode *, struct inode *);
2189bool f2fs_empty_inline_dir(struct inode *);
2190int f2fs_read_inline_dir(struct file *, struct dir_context *,
2191                                                struct fscrypt_str *);
2192int f2fs_inline_data_fiemap(struct inode *,
2193                struct fiemap_extent_info *, __u64, __u64);
2194
2195/*
2196 * shrinker.c
2197 */
2198unsigned long f2fs_shrink_count(struct shrinker *, struct shrink_control *);
2199unsigned long f2fs_shrink_scan(struct shrinker *, struct shrink_control *);
2200void f2fs_join_shrinker(struct f2fs_sb_info *);
2201void f2fs_leave_shrinker(struct f2fs_sb_info *);
2202
2203/*
2204 * extent_cache.c
2205 */
2206unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *, int);
2207bool f2fs_init_extent_tree(struct inode *, struct f2fs_extent *);
2208unsigned int f2fs_destroy_extent_node(struct inode *);
2209void f2fs_destroy_extent_tree(struct inode *);
2210bool f2fs_lookup_extent_cache(struct inode *, pgoff_t, struct extent_info *);
2211void f2fs_update_extent_cache(struct dnode_of_data *);
2212void f2fs_update_extent_cache_range(struct dnode_of_data *dn,
2213                                                pgoff_t, block_t, unsigned int);
2214void init_extent_cache_info(struct f2fs_sb_info *);
2215int __init create_extent_cache(void);
2216void destroy_extent_cache(void);
2217
2218/*
2219 * crypto support
2220 */
2221static inline bool f2fs_encrypted_inode(struct inode *inode)
2222{
2223        return file_is_encrypt(inode);
2224}
2225
2226static inline void f2fs_set_encrypted_inode(struct inode *inode)
2227{
2228#ifdef CONFIG_F2FS_FS_ENCRYPTION
2229        file_set_encrypt(inode);
2230#endif
2231}
2232
2233static inline bool f2fs_bio_encrypted(struct bio *bio)
2234{
2235        return bio->bi_private != NULL;
2236}
2237
2238static inline int f2fs_sb_has_crypto(struct super_block *sb)
2239{
2240        return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_ENCRYPT);
2241}
2242
2243static inline bool f2fs_may_encrypt(struct inode *inode)
2244{
2245#ifdef CONFIG_F2FS_FS_ENCRYPTION
2246        umode_t mode = inode->i_mode;
2247
2248        return (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode));
2249#else
2250        return 0;
2251#endif
2252}
2253
2254#ifndef CONFIG_F2FS_FS_ENCRYPTION
2255#define fscrypt_set_d_op(i)
2256#define fscrypt_get_ctx                 fscrypt_notsupp_get_ctx
2257#define fscrypt_release_ctx             fscrypt_notsupp_release_ctx
2258#define fscrypt_encrypt_page            fscrypt_notsupp_encrypt_page
2259#define fscrypt_decrypt_page            fscrypt_notsupp_decrypt_page
2260#define fscrypt_decrypt_bio_pages       fscrypt_notsupp_decrypt_bio_pages
2261#define fscrypt_pullback_bio_page       fscrypt_notsupp_pullback_bio_page
2262#define fscrypt_restore_control_page    fscrypt_notsupp_restore_control_page
2263#define fscrypt_zeroout_range           fscrypt_notsupp_zeroout_range
2264#define fscrypt_process_policy          fscrypt_notsupp_process_policy
2265#define fscrypt_get_policy              fscrypt_notsupp_get_policy
2266#define fscrypt_has_permitted_context   fscrypt_notsupp_has_permitted_context
2267#define fscrypt_inherit_context         fscrypt_notsupp_inherit_context
2268#define fscrypt_get_encryption_info     fscrypt_notsupp_get_encryption_info
2269#define fscrypt_put_encryption_info     fscrypt_notsupp_put_encryption_info
2270#define fscrypt_setup_filename          fscrypt_notsupp_setup_filename
2271#define fscrypt_free_filename           fscrypt_notsupp_free_filename
2272#define fscrypt_fname_encrypted_size    fscrypt_notsupp_fname_encrypted_size
2273#define fscrypt_fname_alloc_buffer      fscrypt_notsupp_fname_alloc_buffer
2274#define fscrypt_fname_free_buffer       fscrypt_notsupp_fname_free_buffer
2275#define fscrypt_fname_disk_to_usr       fscrypt_notsupp_fname_disk_to_usr
2276#define fscrypt_fname_usr_to_disk       fscrypt_notsupp_fname_usr_to_disk
2277#endif
2278#endif
2279