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