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