f2fs.h (f847c699cff3f050286ee0a08632046468e7a511) | f2fs.h (4354994f097d068a894aa1a0860da54571df3582) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/f2fs.h 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#ifndef _LINUX_F2FS_H --- 85 unchanged lines hidden (view full) --- 94#define F2FS_MOUNT_ADAPTIVE 0x00020000 95#define F2FS_MOUNT_LFS 0x00040000 96#define F2FS_MOUNT_USRQUOTA 0x00080000 97#define F2FS_MOUNT_GRPQUOTA 0x00100000 98#define F2FS_MOUNT_PRJQUOTA 0x00200000 99#define F2FS_MOUNT_QUOTA 0x00400000 100#define F2FS_MOUNT_INLINE_XATTR_SIZE 0x00800000 101#define F2FS_MOUNT_RESERVE_ROOT 0x01000000 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/f2fs.h 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#ifndef _LINUX_F2FS_H --- 85 unchanged lines hidden (view full) --- 94#define F2FS_MOUNT_ADAPTIVE 0x00020000 95#define F2FS_MOUNT_LFS 0x00040000 96#define F2FS_MOUNT_USRQUOTA 0x00080000 97#define F2FS_MOUNT_GRPQUOTA 0x00100000 98#define F2FS_MOUNT_PRJQUOTA 0x00200000 99#define F2FS_MOUNT_QUOTA 0x00400000 100#define F2FS_MOUNT_INLINE_XATTR_SIZE 0x00800000 101#define F2FS_MOUNT_RESERVE_ROOT 0x01000000 |
102#define F2FS_MOUNT_DISABLE_CHECKPOINT 0x02000000 |
|
102 103#define F2FS_OPTION(sbi) ((sbi)->mount_opt) 104#define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option) 105#define set_opt(sbi, option) (F2FS_OPTION(sbi).opt |= F2FS_MOUNT_##option) 106#define test_opt(sbi, option) (F2FS_OPTION(sbi).opt & F2FS_MOUNT_##option) 107 108#define ver_after(a, b) (typecheck(unsigned long long, a) && \ 109 typecheck(unsigned long long, b) && \ --- 63 unchanged lines hidden (view full) --- 173}; 174 175#define CP_UMOUNT 0x00000001 176#define CP_FASTBOOT 0x00000002 177#define CP_SYNC 0x00000004 178#define CP_RECOVERY 0x00000008 179#define CP_DISCARD 0x00000010 180#define CP_TRIMMED 0x00000020 | 103 104#define F2FS_OPTION(sbi) ((sbi)->mount_opt) 105#define clear_opt(sbi, option) (F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option) 106#define set_opt(sbi, option) (F2FS_OPTION(sbi).opt |= F2FS_MOUNT_##option) 107#define test_opt(sbi, option) (F2FS_OPTION(sbi).opt & F2FS_MOUNT_##option) 108 109#define ver_after(a, b) (typecheck(unsigned long long, a) && \ 110 typecheck(unsigned long long, b) && \ --- 63 unchanged lines hidden (view full) --- 174}; 175 176#define CP_UMOUNT 0x00000001 177#define CP_FASTBOOT 0x00000002 178#define CP_SYNC 0x00000004 179#define CP_RECOVERY 0x00000008 180#define CP_DISCARD 0x00000010 181#define CP_TRIMMED 0x00000020 |
182#define CP_PAUSE 0x00000040 |
|
181 182#define MAX_DISCARD_BLOCKS(sbi) BLKS_PER_SEC(sbi) 183#define DEF_MAX_DISCARD_REQUEST 8 /* issue 8 discards per round */ 184#define DEF_MIN_DISCARD_ISSUE_TIME 50 /* 50 ms, if exists */ 185#define DEF_MID_DISCARD_ISSUE_TIME 500 /* 500 ms, if device busy */ 186#define DEF_MAX_DISCARD_ISSUE_TIME 60000 /* 60 s, if no candidates */ 187#define DEF_DISCARD_URGENT_UTIL 80 /* do more discard over 80% */ 188#define DEF_CP_INTERVAL 60 /* 60 secs */ 189#define DEF_IDLE_INTERVAL 5 /* 5 secs */ | 183 184#define MAX_DISCARD_BLOCKS(sbi) BLKS_PER_SEC(sbi) 185#define DEF_MAX_DISCARD_REQUEST 8 /* issue 8 discards per round */ 186#define DEF_MIN_DISCARD_ISSUE_TIME 50 /* 50 ms, if exists */ 187#define DEF_MID_DISCARD_ISSUE_TIME 500 /* 500 ms, if device busy */ 188#define DEF_MAX_DISCARD_ISSUE_TIME 60000 /* 60 s, if no candidates */ 189#define DEF_DISCARD_URGENT_UTIL 80 /* do more discard over 80% */ 190#define DEF_CP_INTERVAL 60 /* 60 secs */ 191#define DEF_IDLE_INTERVAL 5 /* 5 secs */ |
192#define DEF_DISABLE_INTERVAL 5 /* 5 secs */ |
|
190 191struct cp_control { 192 int reason; 193 __u64 trim_start; 194 __u64 trim_end; 195 __u64 trim_minlen; 196}; 197 --- 889 unchanged lines hidden (view full) --- 1087 SBI_IS_DIRTY, /* dirty flag for checkpoint */ 1088 SBI_IS_CLOSE, /* specify unmounting */ 1089 SBI_NEED_FSCK, /* need fsck.f2fs to fix */ 1090 SBI_POR_DOING, /* recovery is doing or not */ 1091 SBI_NEED_SB_WRITE, /* need to recover superblock */ 1092 SBI_NEED_CP, /* need to checkpoint */ 1093 SBI_IS_SHUTDOWN, /* shutdown by ioctl */ 1094 SBI_IS_RECOVERED, /* recovered orphan/data */ | 193 194struct cp_control { 195 int reason; 196 __u64 trim_start; 197 __u64 trim_end; 198 __u64 trim_minlen; 199}; 200 --- 889 unchanged lines hidden (view full) --- 1090 SBI_IS_DIRTY, /* dirty flag for checkpoint */ 1091 SBI_IS_CLOSE, /* specify unmounting */ 1092 SBI_NEED_FSCK, /* need fsck.f2fs to fix */ 1093 SBI_POR_DOING, /* recovery is doing or not */ 1094 SBI_NEED_SB_WRITE, /* need to recover superblock */ 1095 SBI_NEED_CP, /* need to checkpoint */ 1096 SBI_IS_SHUTDOWN, /* shutdown by ioctl */ 1097 SBI_IS_RECOVERED, /* recovered orphan/data */ |
1098 SBI_CP_DISABLED, /* CP was disabled last mount */ |
|
1095}; 1096 1097enum { 1098 CP_TIME, 1099 REQ_TIME, 1100 DISCARD_TIME, 1101 GC_TIME, | 1099}; 1100 1101enum { 1102 CP_TIME, 1103 REQ_TIME, 1104 DISCARD_TIME, 1105 GC_TIME, |
1106 DISABLE_TIME, |
|
1102 MAX_TIME, 1103}; 1104 1105enum { 1106 GC_NORMAL, 1107 GC_IDLE_CB, 1108 GC_IDLE_GREEDY, 1109 GC_URGENT, --- 110 unchanged lines hidden (view full) --- 1220 1221 block_t user_block_count; /* # of user blocks */ 1222 block_t total_valid_block_count; /* # of valid blocks */ 1223 block_t discard_blks; /* discard command candidats */ 1224 block_t last_valid_block_count; /* for recovery */ 1225 block_t reserved_blocks; /* configurable reserved blocks */ 1226 block_t current_reserved_blocks; /* current reserved blocks */ 1227 | 1107 MAX_TIME, 1108}; 1109 1110enum { 1111 GC_NORMAL, 1112 GC_IDLE_CB, 1113 GC_IDLE_GREEDY, 1114 GC_URGENT, --- 110 unchanged lines hidden (view full) --- 1225 1226 block_t user_block_count; /* # of user blocks */ 1227 block_t total_valid_block_count; /* # of valid blocks */ 1228 block_t discard_blks; /* discard command candidats */ 1229 block_t last_valid_block_count; /* for recovery */ 1230 block_t reserved_blocks; /* configurable reserved blocks */ 1231 block_t current_reserved_blocks; /* current reserved blocks */ 1232 |
1233 /* Additional tracking for no checkpoint mode */ 1234 block_t unusable_block_count; /* # of blocks saved by last cp */ 1235 |
|
1228 unsigned int nquota_files; /* # of quota sysfile */ 1229 1230 u32 s_next_generation; /* for NFS support */ 1231 1232 /* # of pages, see count_type */ 1233 atomic_t nr_pages[NR_COUNT_TYPE]; 1234 /* # of allocated blocks */ 1235 struct percpu_counter alloc_valid_block_count; --- 494 unchanged lines hidden (view full) --- 1730 1731 spin_lock(&sbi->stat_lock); 1732 sbi->total_valid_block_count += (block_t)(*count); 1733 avail_user_block_count = sbi->user_block_count - 1734 sbi->current_reserved_blocks; 1735 1736 if (!__allow_reserved_blocks(sbi, inode, true)) 1737 avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks; | 1236 unsigned int nquota_files; /* # of quota sysfile */ 1237 1238 u32 s_next_generation; /* for NFS support */ 1239 1240 /* # of pages, see count_type */ 1241 atomic_t nr_pages[NR_COUNT_TYPE]; 1242 /* # of allocated blocks */ 1243 struct percpu_counter alloc_valid_block_count; --- 494 unchanged lines hidden (view full) --- 1738 1739 spin_lock(&sbi->stat_lock); 1740 sbi->total_valid_block_count += (block_t)(*count); 1741 avail_user_block_count = sbi->user_block_count - 1742 sbi->current_reserved_blocks; 1743 1744 if (!__allow_reserved_blocks(sbi, inode, true)) 1745 avail_user_block_count -= F2FS_OPTION(sbi).root_reserved_blocks; |
1738 | 1746 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) 1747 avail_user_block_count -= sbi->unusable_block_count; |
1739 if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) { 1740 diff = sbi->total_valid_block_count - avail_user_block_count; 1741 if (diff > *count) 1742 diff = *count; 1743 *count -= diff; 1744 release = diff; 1745 sbi->total_valid_block_count -= diff; 1746 if (!*count) { --- 190 unchanged lines hidden (view full) --- 1937 1938 spin_lock(&sbi->stat_lock); 1939 1940 valid_block_count = sbi->total_valid_block_count + 1941 sbi->current_reserved_blocks + 1; 1942 1943 if (!__allow_reserved_blocks(sbi, inode, false)) 1944 valid_block_count += F2FS_OPTION(sbi).root_reserved_blocks; | 1748 if (unlikely(sbi->total_valid_block_count > avail_user_block_count)) { 1749 diff = sbi->total_valid_block_count - avail_user_block_count; 1750 if (diff > *count) 1751 diff = *count; 1752 *count -= diff; 1753 release = diff; 1754 sbi->total_valid_block_count -= diff; 1755 if (!*count) { --- 190 unchanged lines hidden (view full) --- 1946 1947 spin_lock(&sbi->stat_lock); 1948 1949 valid_block_count = sbi->total_valid_block_count + 1950 sbi->current_reserved_blocks + 1; 1951 1952 if (!__allow_reserved_blocks(sbi, inode, false)) 1953 valid_block_count += F2FS_OPTION(sbi).root_reserved_blocks; |
1954 if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) 1955 valid_block_count += sbi->unusable_block_count; |
|
1945 1946 if (unlikely(valid_block_count > sbi->user_block_count)) { 1947 spin_unlock(&sbi->stat_lock); 1948 goto enospc; 1949 } 1950 1951 valid_node_count = sbi->total_valid_node_count + 1; 1952 if (unlikely(valid_node_count > sbi->total_node_count)) { --- 987 unchanged lines hidden (view full) --- 2940void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free); 2941void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr); 2942bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr); 2943void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi); 2944void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi); 2945bool f2fs_wait_discard_bios(struct f2fs_sb_info *sbi); 2946void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi, 2947 struct cp_control *cpc); | 1956 1957 if (unlikely(valid_block_count > sbi->user_block_count)) { 1958 spin_unlock(&sbi->stat_lock); 1959 goto enospc; 1960 } 1961 1962 valid_node_count = sbi->total_valid_node_count + 1; 1963 if (unlikely(valid_node_count > sbi->total_node_count)) { --- 987 unchanged lines hidden (view full) --- 2951void f2fs_destroy_flush_cmd_control(struct f2fs_sb_info *sbi, bool free); 2952void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr); 2953bool f2fs_is_checkpointed_data(struct f2fs_sb_info *sbi, block_t blkaddr); 2954void f2fs_drop_discard_cmd(struct f2fs_sb_info *sbi); 2955void f2fs_stop_discard_thread(struct f2fs_sb_info *sbi); 2956bool f2fs_wait_discard_bios(struct f2fs_sb_info *sbi); 2957void f2fs_clear_prefree_segments(struct f2fs_sb_info *sbi, 2958 struct cp_control *cpc); |
2959void f2fs_dirty_to_prefree(struct f2fs_sb_info *sbi); 2960int f2fs_disable_cp_again(struct f2fs_sb_info *sbi); |
|
2948void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi); 2949int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra); 2950void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi); 2951int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range); 2952bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi, 2953 struct cp_control *cpc); 2954struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno); 2955void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src, --- 571 unchanged lines hidden (view full) --- 3527 * for blkzoned device, fallback direct IO to buffered IO, so 3528 * all IOs can be serialized by log-structured write. 3529 */ 3530 if (f2fs_sb_has_blkzoned(sbi->sb)) 3531 return true; 3532 if (test_opt(sbi, LFS) && (rw == WRITE) && 3533 block_unaligned_IO(inode, iocb, iter)) 3534 return true; | 2961void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi); 2962int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra); 2963void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi); 2964int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range); 2965bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi, 2966 struct cp_control *cpc); 2967struct page *f2fs_get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno); 2968void f2fs_update_meta_page(struct f2fs_sb_info *sbi, void *src, --- 571 unchanged lines hidden (view full) --- 3540 * for blkzoned device, fallback direct IO to buffered IO, so 3541 * all IOs can be serialized by log-structured write. 3542 */ 3543 if (f2fs_sb_has_blkzoned(sbi->sb)) 3544 return true; 3545 if (test_opt(sbi, LFS) && (rw == WRITE) && 3546 block_unaligned_IO(inode, iocb, iter)) 3547 return true; |
3548 if (is_sbi_flag_set(F2FS_I_SB(inode), SBI_CP_DISABLED)) 3549 return true; 3550 |
|
3535 return false; 3536} 3537 3538#ifdef CONFIG_F2FS_FAULT_INJECTION 3539extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate, 3540 unsigned int type); 3541#else 3542#define f2fs_build_fault_attr(sbi, rate, type) do { } while (0) 3543#endif 3544 3545#endif | 3551 return false; 3552} 3553 3554#ifdef CONFIG_F2FS_FAULT_INJECTION 3555extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate, 3556 unsigned int type); 3557#else 3558#define f2fs_build_fault_attr(sbi, rate, type) do { } while (0) 3559#endif 3560 3561#endif |