f2fs.h (5b0e95398e2bcc18e871758221cc712be4a0a39a) f2fs.h (2ef79ecb5e906d87475d3e0c49b22425499a89f3)
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

--- 603 unchanged lines hidden (view full) ---

612#define file_keep_isize(inode) is_file(inode, FADVISE_KEEP_SIZE_BIT)
613#define file_set_keep_isize(inode) set_file(inode, FADVISE_KEEP_SIZE_BIT)
614#define file_is_hot(inode) is_file(inode, FADVISE_HOT_BIT)
615#define file_set_hot(inode) set_file(inode, FADVISE_HOT_BIT)
616#define file_clear_hot(inode) clear_file(inode, FADVISE_HOT_BIT)
617
618#define DEF_DIR_LEVEL 0
619
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

--- 603 unchanged lines hidden (view full) ---

612#define file_keep_isize(inode) is_file(inode, FADVISE_KEEP_SIZE_BIT)
613#define file_set_keep_isize(inode) set_file(inode, FADVISE_KEEP_SIZE_BIT)
614#define file_is_hot(inode) is_file(inode, FADVISE_HOT_BIT)
615#define file_set_hot(inode) set_file(inode, FADVISE_HOT_BIT)
616#define file_clear_hot(inode) clear_file(inode, FADVISE_HOT_BIT)
617
618#define DEF_DIR_LEVEL 0
619
620enum {
621 GC_FAILURE_PIN,
622 GC_FAILURE_ATOMIC,
623 MAX_GC_FAILURE
624};
625
620struct f2fs_inode_info {
621 struct inode vfs_inode; /* serve a vfs inode */
622 unsigned long i_flags; /* keep an inode flags for ioctl */
623 unsigned char i_advise; /* use to give file attribute hints */
624 unsigned char i_dir_level; /* use for dentry level for large dir */
626struct f2fs_inode_info {
627 struct inode vfs_inode; /* serve a vfs inode */
628 unsigned long i_flags; /* keep an inode flags for ioctl */
629 unsigned char i_advise; /* use to give file attribute hints */
630 unsigned char i_dir_level; /* use for dentry level for large dir */
625 union {
626 unsigned int i_current_depth; /* only for directory depth */
627 unsigned short i_gc_failures; /* only for regular file */
628 };
631 unsigned int i_current_depth; /* only for directory depth */
632 /* for gc failure statistic */
633 unsigned int i_gc_failures[MAX_GC_FAILURE];
629 unsigned int i_pino; /* parent inode number */
630 umode_t i_acl_mode; /* keep file acl mode temporarily */
631
632 /* Use below internally in f2fs*/
633 unsigned long flags; /* use to pass per-file flags */
634 struct rw_semaphore i_sem; /* protect fi info */
635 atomic_t dirty_pages; /* # of dirty pages */
636 f2fs_hash_t chash; /* hash value of given file name */

--- 563 unchanged lines hidden (view full) ---

1200
1201 struct f2fs_mount_info mount_opt; /* mount options */
1202
1203 /* for cleaning operations */
1204 struct mutex gc_mutex; /* mutex for GC */
1205 struct f2fs_gc_kthread *gc_thread; /* GC thread */
1206 unsigned int cur_victim_sec; /* current victim section num */
1207 unsigned int gc_mode; /* current GC state */
634 unsigned int i_pino; /* parent inode number */
635 umode_t i_acl_mode; /* keep file acl mode temporarily */
636
637 /* Use below internally in f2fs*/
638 unsigned long flags; /* use to pass per-file flags */
639 struct rw_semaphore i_sem; /* protect fi info */
640 atomic_t dirty_pages; /* # of dirty pages */
641 f2fs_hash_t chash; /* hash value of given file name */

--- 563 unchanged lines hidden (view full) ---

1205
1206 struct f2fs_mount_info mount_opt; /* mount options */
1207
1208 /* for cleaning operations */
1209 struct mutex gc_mutex; /* mutex for GC */
1210 struct f2fs_gc_kthread *gc_thread; /* GC thread */
1211 unsigned int cur_victim_sec; /* current victim section num */
1212 unsigned int gc_mode; /* current GC state */
1213 /* for skip statistic */
1214 unsigned long long skipped_atomic_files[2]; /* FG_GC and BG_GC */
1208
1209 /* threshold for gc trials on pinned files */
1210 u64 gc_pin_file_threshold;
1211
1212 /* maximum # of trials to find a victim segment for SSR and GC */
1213 unsigned int max_victim_search;
1214
1215 /*

--- 1027 unchanged lines hidden (view full) ---

2243 FI_INLINE_DOTS, /* indicate inline dot dentries */
2244 FI_DO_DEFRAG, /* indicate defragment is running */
2245 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */
2246 FI_NO_PREALLOC, /* indicate skipped preallocated blocks */
2247 FI_HOT_DATA, /* indicate file is hot */
2248 FI_EXTRA_ATTR, /* indicate file has extra attribute */
2249 FI_PROJ_INHERIT, /* indicate file inherits projectid */
2250 FI_PIN_FILE, /* indicate file should not be gced */
1215
1216 /* threshold for gc trials on pinned files */
1217 u64 gc_pin_file_threshold;
1218
1219 /* maximum # of trials to find a victim segment for SSR and GC */
1220 unsigned int max_victim_search;
1221
1222 /*

--- 1027 unchanged lines hidden (view full) ---

2250 FI_INLINE_DOTS, /* indicate inline dot dentries */
2251 FI_DO_DEFRAG, /* indicate defragment is running */
2252 FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */
2253 FI_NO_PREALLOC, /* indicate skipped preallocated blocks */
2254 FI_HOT_DATA, /* indicate file is hot */
2255 FI_EXTRA_ATTR, /* indicate file has extra attribute */
2256 FI_PROJ_INHERIT, /* indicate file inherits projectid */
2257 FI_PIN_FILE, /* indicate file should not be gced */
2258 FI_ATOMIC_REVOKE_REQUEST, /* request to drop atomic data */
2251};
2252
2253static inline void __mark_inode_dirty_flag(struct inode *inode,
2254 int flag, bool set)
2255{
2256 switch (flag) {
2257 case FI_INLINE_XATTR:
2258 case FI_INLINE_DATA:

--- 82 unchanged lines hidden (view full) ---

2341{
2342 F2FS_I(inode)->i_current_depth = depth;
2343 f2fs_mark_inode_dirty_sync(inode, true);
2344}
2345
2346static inline void f2fs_i_gc_failures_write(struct inode *inode,
2347 unsigned int count)
2348{
2259};
2260
2261static inline void __mark_inode_dirty_flag(struct inode *inode,
2262 int flag, bool set)
2263{
2264 switch (flag) {
2265 case FI_INLINE_XATTR:
2266 case FI_INLINE_DATA:

--- 82 unchanged lines hidden (view full) ---

2349{
2350 F2FS_I(inode)->i_current_depth = depth;
2351 f2fs_mark_inode_dirty_sync(inode, true);
2352}
2353
2354static inline void f2fs_i_gc_failures_write(struct inode *inode,
2355 unsigned int count)
2356{
2349 F2FS_I(inode)->i_gc_failures = count;
2357 F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN] = count;
2350 f2fs_mark_inode_dirty_sync(inode, true);
2351}
2352
2353static inline void f2fs_i_xnid_write(struct inode *inode, nid_t xnid)
2354{
2355 F2FS_I(inode)->i_xattr_nid = xnid;
2356 f2fs_mark_inode_dirty_sync(inode, true);
2357}

--- 454 unchanged lines hidden (view full) ---

2812int __init create_node_manager_caches(void);
2813void destroy_node_manager_caches(void);
2814
2815/*
2816 * segment.c
2817 */
2818bool need_SSR(struct f2fs_sb_info *sbi);
2819void register_inmem_page(struct inode *inode, struct page *page);
2358 f2fs_mark_inode_dirty_sync(inode, true);
2359}
2360
2361static inline void f2fs_i_xnid_write(struct inode *inode, nid_t xnid)
2362{
2363 F2FS_I(inode)->i_xattr_nid = xnid;
2364 f2fs_mark_inode_dirty_sync(inode, true);
2365}

--- 454 unchanged lines hidden (view full) ---

2820int __init create_node_manager_caches(void);
2821void destroy_node_manager_caches(void);
2822
2823/*
2824 * segment.c
2825 */
2826bool need_SSR(struct f2fs_sb_info *sbi);
2827void register_inmem_page(struct inode *inode, struct page *page);
2820void drop_inmem_pages_all(struct f2fs_sb_info *sbi);
2828void drop_inmem_pages_all(struct f2fs_sb_info *sbi, bool gc_failure);
2821void drop_inmem_pages(struct inode *inode);
2822void drop_inmem_page(struct inode *inode, struct page *page);
2823int commit_inmem_pages(struct inode *inode);
2824void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
2825void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi);
2826int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
2827int create_flush_cmd_control(struct f2fs_sb_info *sbi);
2828int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);

--- 174 unchanged lines hidden (view full) ---

3003 int util_free, util_valid, util_invalid;
3004 int rsvd_segs, overp_segs;
3005 int dirty_count, node_pages, meta_pages;
3006 int prefree_count, call_count, cp_count, bg_cp_count;
3007 int tot_segs, node_segs, data_segs, free_segs, free_secs;
3008 int bg_node_segs, bg_data_segs;
3009 int tot_blks, data_blks, node_blks;
3010 int bg_data_blks, bg_node_blks;
2829void drop_inmem_pages(struct inode *inode);
2830void drop_inmem_page(struct inode *inode, struct page *page);
2831int commit_inmem_pages(struct inode *inode);
2832void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
2833void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi);
2834int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
2835int create_flush_cmd_control(struct f2fs_sb_info *sbi);
2836int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);

--- 174 unchanged lines hidden (view full) ---

3011 int util_free, util_valid, util_invalid;
3012 int rsvd_segs, overp_segs;
3013 int dirty_count, node_pages, meta_pages;
3014 int prefree_count, call_count, cp_count, bg_cp_count;
3015 int tot_segs, node_segs, data_segs, free_segs, free_secs;
3016 int bg_node_segs, bg_data_segs;
3017 int tot_blks, data_blks, node_blks;
3018 int bg_data_blks, bg_node_blks;
3019 unsigned long long skipped_atomic_files[2];
3011 int curseg[NR_CURSEG_TYPE];
3012 int cursec[NR_CURSEG_TYPE];
3013 int curzone[NR_CURSEG_TYPE];
3014
3015 unsigned int segment_count[2];
3016 unsigned int block_count[2];
3017 unsigned int inplace_count;
3018 unsigned long long base_mem, cache_mem, page_mem;

--- 336 unchanged lines hidden ---
3020 int curseg[NR_CURSEG_TYPE];
3021 int cursec[NR_CURSEG_TYPE];
3022 int curzone[NR_CURSEG_TYPE];
3023
3024 unsigned int segment_count[2];
3025 unsigned int block_count[2];
3026 unsigned int inplace_count;
3027 unsigned long long base_mem, cache_mem, page_mem;

--- 336 unchanged lines hidden ---