28#ifdef HAVE_MACH_TIME_H
29#include <mach/mach_time.h>
32#ifdef HAVE_SYS_IOCTL_H
35#ifdef HAVE_SYS_MOUNT_H
40#define EXIT_ERR_CODE (-1)
41#define ver_after(a, b) (typecheck(unsigned long long, a) && \
42 typecheck(unsigned long long, b) && \
43 ((long long)((a) - (b)) > 0))
45#define container_of(ptr, type, member) ({ \
46 const typeof(((type *)0)->member) * __mptr = (ptr); \
47 (type *)((char *)__mptr - offsetof(type, member)); })
79#define LIST_HEAD_INIT(name) { &(name), &(name) }
81#define list_entry(ptr, type, member) \
82 container_of(ptr, type, member)
84#define list_first_entry(ptr, type, member) \
85 list_entry((ptr)->next, type, member)
87#define list_next_entry(pos, member) \
88 list_entry((pos)->member.next, typeof(*(pos)), member)
90#define list_for_each_entry(pos, head, member) \
91 for (pos = list_first_entry(head, typeof(*pos), member); \
92 &pos->member != (head); \
93 pos = list_next_entry(pos, member))
95#define list_for_each_entry_safe(pos, n, head, member) \
96 for (pos = list_first_entry(head, typeof(*pos), member), \
97 n = list_next_entry(pos, member); \
98 &pos->member != (head); \
99 pos = n, n = list_next_entry(n, member))
114#define MAX_RA_BLOCKS 64
329 return (
void *)&(node_blk->
i.
i_addr[ofs]);
352 return ckpt_flags & f ? 1 : 0;
379 unsigned int chksum_size = 0;
386 chksum_size =
sizeof(
__le32);
424#define BLKS_PER_SEC(sbi) \
425 ((sbi)->segs_per_sec * (sbi)->blocks_per_seg)
426#define GET_ZONENO_FROM_SEGNO(sbi, segno) \
427 ((segno / sbi->segs_per_sec) / sbi->secs_per_zone)
429#define IS_DATASEG(t) \
430 ((t == CURSEG_HOT_DATA) || (t == CURSEG_COLD_DATA) || \
431 (t == CURSEG_WARM_DATA))
433#define IS_NODESEG(t) \
434 ((t == CURSEG_HOT_NODE) || (t == CURSEG_COLD_NODE) || \
435 (t == CURSEG_WARM_NODE))
437#define MAIN_BLKADDR(sbi) \
438 (SM_I(sbi) ? SM_I(sbi)->main_blkaddr : \
439 le32_to_cpu(F2FS_RAW_SUPER(sbi)->main_blkaddr))
440#define SEG0_BLKADDR(sbi) \
441 (SM_I(sbi) ? SM_I(sbi)->seg0_blkaddr : \
442 le32_to_cpu(F2FS_RAW_SUPER(sbi)->segment0_blkaddr))
444#define GET_SUM_BLKADDR(sbi, segno) \
445 ((sbi->sm_info->ssa_blkaddr) + segno)
447#define GET_SEGOFF_FROM_SEG0(sbi, blk_addr) \
448 ((blk_addr) - SM_I(sbi)->seg0_blkaddr)
450#define GET_SEGNO_FROM_SEG0(sbi, blk_addr) \
451 (GET_SEGOFF_FROM_SEG0(sbi, blk_addr) >> sbi->log_blocks_per_seg)
453#define GET_BLKOFF_FROM_SEG0(sbi, blk_addr) \
454 (GET_SEGOFF_FROM_SEG0(sbi, blk_addr) & (sbi->blocks_per_seg - 1))
456#define GET_SEC_FROM_SEG(sbi, segno) \
457 ((segno) / (sbi)->segs_per_sec)
458#define GET_SEG_FROM_SEC(sbi, secno) \
459 ((secno) * (sbi)->segs_per_sec)
461#define FREE_I_START_SEGNO(sbi) \
462 GET_SEGNO_FROM_SEG0(sbi, SM_I(sbi)->main_blkaddr)
463#define GET_R2L_SEGNO(sbi, segno) (segno + FREE_I_START_SEGNO(sbi))
465#define MAIN_SEGS(sbi) (SM_I(sbi)->main_segments)
466#define TOTAL_SEGS(sbi) (SM_I(sbi)->segment_count)
467#define TOTAL_BLKS(sbi) (TOTAL_SEGS(sbi) << (sbi)->log_blocks_per_seg)
468#define MAX_BLKADDR(sbi) (SEG0_BLKADDR(sbi) + TOTAL_BLKS(sbi))
470#define START_BLOCK(sbi, segno) (SM_I(sbi)->main_blkaddr + \
471 ((segno) << sbi->log_blocks_per_seg))
473#define NEXT_FREE_BLKADDR(sbi, curseg) \
474 (START_BLOCK(sbi, (curseg)->segno) + (curseg)->next_blkoff)
476#define SIT_BLK_CNT(sbi) \
477 ((MAIN_SEGS(sbi) + SIT_ENTRY_PER_BLOCK - 1) / SIT_ENTRY_PER_BLOCK)
503#define nats_in_cursum(jnl) (le16_to_cpu(jnl->n_nats))
504#define sits_in_cursum(jnl) (le16_to_cpu(jnl->n_sits))
506#define nat_in_journal(jnl, i) (jnl->nat_j.entries[i].ne)
507#define nid_in_journal(jnl, i) (jnl->nat_j.entries[i].nid)
508#define sit_in_journal(jnl, i) (jnl->sit_j.entries[i].se)
509#define segno_in_journal(jnl, i) (jnl->sit_j.entries[i].segno)
511#define SIT_ENTRY_OFFSET(sit_i, segno) \
512 ((segno) % sit_i->sents_per_block)
513#define SIT_BLOCK_OFFSET(sit_i, segno) \
514 ((segno) / SIT_ENTRY_PER_BLOCK)
610#define IS_SUM_NODE_SEG(sum) (F2FS_SUMMARY_BLOCK_FOOTER(sum)->entry_type == SUM_TYPE_NODE)
611#define IS_SUM_DATA_SEG(sum) (F2FS_SUMMARY_BLOCK_FOOTER(sum)->entry_type == SUM_TYPE_DATA)
613static inline unsigned int dir_buckets(
unsigned int level,
int dir_level)
616 return 1 << (level + dir_level);
630 int dir_level,
unsigned int idx)
633 unsigned long bidx = 0;
635 for (i = 0; i < level; i++)
643 if (len == 1 &&
name[0] ==
'.')
645 if (len == 2 &&
name[0] ==
'.' &&
name[1] ==
'.')
unsigned long long __u64
Definition: blkid_types.h:16
__u32 __bitwise __le32
Definition: blkid_types.h:39
unsigned int u32
Definition: ext4_utils.h:68
#define cpu_to_le32(x)
Definition: ext4_utils.h:52
#define le32_to_cpu(x)
Definition: ext4_utils.h:54
#define le16_to_cpu(x)
Definition: ext4_utils.h:55
unsigned short int u16
Definition: ext4_utils.h:69
unsigned long long u64
Definition: ext4_utils.h:63
unsigned char u8
Definition: ext4_utils.h:70
#define cpu_to_le16(x)
Definition: ext4_utils.h:53
static struct f2fs_sm_info * SM_I(struct f2fs_sb_info *sbi)
Definition: f2fs.h:315
static void set_summary(struct f2fs_summary *sum, nid_t nid, unsigned int ofs_in_node, unsigned char version)
Definition: f2fs.h:570
static block_t __start_cp_addr(struct f2fs_sb_info *sbi)
Definition: f2fs.h:403
static struct f2fs_nm_info * NM_I(struct f2fs_sb_info *sbi)
Definition: f2fs.h:310
static void __list_del(struct list_head *prev, struct list_head *next)
Definition: f2fs.h:63
static bool is_set_ckpt_flags(struct f2fs_checkpoint *cp, unsigned int f)
Definition: f2fs.h:349
static void * inline_data_addr(struct f2fs_node *node_blk)
Definition: f2fs.h:325
static u64 BLKOFF_FROM_MAIN(struct f2fs_sb_info *sbi, u64 blk_addr)
Definition: f2fs.h:544
static struct f2fs_fsck * F2FS_FSCK(struct f2fs_sb_info *sbi)
Definition: f2fs.h:305
static bool is_valid_data_blkaddr(block_t blkaddr)
Definition: f2fs.h:523
static struct f2fs_super_block * F2FS_RAW_SUPER(struct f2fs_sb_info *sbi)
Definition: f2fs.h:295
static int inline_xattr_size(struct f2fs_inode *inode)
Definition: f2fs.h:604
static unsigned int ofs_of_node(struct f2fs_node *node_blk)
Definition: f2fs.h:332
@ META_NAT
Definition: f2fs.h:106
@ META_POR
Definition: f2fs.h:110
@ META_SIT
Definition: f2fs.h:107
@ META_CP
Definition: f2fs.h:105
@ META_MAX
Definition: f2fs.h:109
@ META_SSA
Definition: f2fs.h:108
@ DATA_GENERIC
Definition: f2fs.h:111
static void list_add_tail(struct list_head *new, struct list_head *head)
Definition: f2fs.h:74
static struct curseg_info * CURSEG_I(struct f2fs_sb_info *sbi, int type)
Definition: f2fs.h:479
static unsigned int dir_buckets(unsigned int level, int dir_level)
Definition: f2fs.h:613
static void * __bitmap_ptr(struct f2fs_sb_info *sbi, int flag)
Definition: f2fs.h:373
static block_t __start_sum_addr(struct f2fs_sb_info *sbi)
Definition: f2fs.h:412
static void * inline_xattr_addr(struct f2fs_inode *inode)
Definition: f2fs.h:598
static block_t __end_block_addr(struct f2fs_sb_info *sbi)
Definition: f2fs.h:417
static unsigned long __bitmap_size(struct f2fs_sb_info *sbi, int flag)
Definition: f2fs.h:355
static unsigned int bucket_blocks(unsigned int level)
Definition: f2fs.h:621
static void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next)
Definition: f2fs.h:53
static int map_de_type(umode_t mode)
Definition: f2fs.h:593
static unsigned long dir_block_index(unsigned int level, int dir_level, unsigned int idx)
Definition: f2fs.h:629
static void node_info_from_raw_nat(struct node_info *ni, struct f2fs_nat_entry *raw_nat)
Definition: f2fs.h:562
static int get_encoding(struct f2fs_sb_info *sbi)
Definition: f2fs.h:650
static unsigned long long cur_cp_version(struct f2fs_checkpoint *cp)
Definition: f2fs.h:338
static __u64 cur_cp_crc(struct f2fs_checkpoint *cp)
Definition: f2fs.h:343
static int is_dot_dotdot(const unsigned char *name, const int len)
Definition: f2fs.h:641
static void list_del(struct list_head *entry)
Definition: f2fs.h:69
static unsigned char f2fs_type_by_mode[S_IFMT > > S_SHIFT]
Definition: f2fs.h:579
static u32 GET_SEGNO(struct f2fs_sb_info *sbi, u64 blk_addr)
Definition: f2fs.h:550
static struct sit_info * SIT_I(struct f2fs_sb_info *sbi)
Definition: f2fs.h:320
static bool IS_VALID_NID(struct f2fs_sb_info *sbi, u32 nid)
Definition: f2fs.h:516
static block_t sum_blk_addr(struct f2fs_sb_info *sbi, int base, int type)
Definition: f2fs.h:489
static block_t __cp_payload(struct f2fs_sb_info *sbi)
Definition: f2fs.h:368
static struct f2fs_checkpoint * F2FS_CKPT(struct f2fs_sb_info *sbi)
Definition: f2fs.h:300
@ SIT_BITMAP
Definition: f2fs.h:118
@ NAT_BITMAP
Definition: f2fs.h:117
int lookup_nat_in_journal(struct f2fs_sb_info *sbi, u32 nid, struct f2fs_nat_entry *ne)
Definition: mount.c:3270
#define S_SHIFT
Definition: f2fs.h:578
static block_t start_sum_block(struct f2fs_sb_info *sbi)
Definition: f2fs.h:484
static int IS_CUR_SEGNO(struct f2fs_sb_info *sbi, u32 segno)
Definition: f2fs.h:531
static u32 OFFSET_IN_SEG(struct f2fs_sb_info *sbi, u64 blk_addr)
Definition: f2fs.h:556
__le32 nid
Definition: f2fs_fs.h:0
#define ASSERT(exp)
Definition: f2fs_fs.h:272
#define le64_to_cpu(x)
Definition: f2fs_fs.h:225
#define F2FS_NODE_FOOTER(blk)
Definition: f2fs_fs.h:1130
__le32 cp_blkaddr
Definition: f2fs_fs.h:20
__le32 cp_payload
Definition: f2fs_fs.h:32
#define NEW_ADDR
Definition: f2fs_fs.h:663
__le32 main_blkaddr
Definition: f2fs_fs.h:24
#define NULL_ADDR
Definition: f2fs_fs.h:662
#define CP_LARGE_NAT_BITMAP_FLAG
Definition: f2fs_fs.h:831
u32 block_t
Definition: f2fs_fs.h:122
#define get_extra_isize(node)
Definition: f2fs_fs.h:1741
#define F2FS_SLOT_LEN
Definition: f2fs_fs.h:1363
@ OFFSET_BIT_SHIFT
Definition: f2fs_fs.h:1109
@ NO_CHECK_TYPE
Definition: f2fs_fs.h:632
#define MAX_DIR_BUCKETS
Definition: f2fs_fs.h:1375
static int get_inline_xattr_addrs(struct f2fs_inode *inode)
Definition: f2fs_fs.h:1730
#define MAX_DIR_HASH_DEPTH
Definition: f2fs_fs.h:1372
u32 nid_t
Definition: f2fs_fs.h:123
#define CP_MIN_CHKSUM_OFFSET
Definition: f2fs_fs.h:880
__le16 ofs_in_node
Definition: f2fs_fs.h:1
@ F2FS_FT_CHRDEV
Definition: f2fs_fs.h:1438
@ F2FS_FT_DIR
Definition: f2fs_fs.h:1437
@ F2FS_FT_REG_FILE
Definition: f2fs_fs.h:1436
@ F2FS_FT_FIFO
Definition: f2fs_fs.h:1440
@ F2FS_FT_SYMLINK
Definition: f2fs_fs.h:1442
@ F2FS_FT_SOCK
Definition: f2fs_fs.h:1441
@ F2FS_FT_BLKDEV
Definition: f2fs_fs.h:1439
unsigned short umode_t
Definition: f2fs_fs.h:125
__le32 segno
Definition: f2fs_fs.h:0
#define F2FS_BLKSIZE
Definition: f2fs_fs.h:657
#define DEF_ADDRS_PER_INODE
Definition: f2fs_fs.h:945
__le32 segment_count_nat
Definition: f2fs_fs.h:16
#define COMPRESS_ADDR
Definition: f2fs_fs.h:664
struct f2fs_nat_entry ne
Definition: f2fs_fs.h:1
__le16 s_encoding
Definition: f2fs_fs.h:41
__le32 segment_count_main
Definition: f2fs_fs.h:18
#define NAT_ENTRY_PER_BLOCK
Definition: f2fs_fs.h:1136
#define DEF_INLINE_RESERVED_SIZE
Definition: f2fs_fs.h:1420
char * name
Definition: libf2fs.c:1403
uint8_t version
Definition: pairing_connection.cpp:0
uint8_t type
Definition: pairing_connection.h:0
unsigned int next_segno
Definition: f2fs.h:186
unsigned short next_blkoff
Definition: f2fs.h:184
struct f2fs_summary_block * sum_blk
Definition: f2fs.h:181
unsigned char alloc_type
Definition: f2fs.h:182
unsigned int segno
Definition: f2fs.h:183
unsigned int zone
Definition: f2fs.h:185
u16 mode
Definition: f2fs.h:222
u64 from_devino
Definition: f2fs.h:231
unsigned long size
Definition: f2fs.h:220
char * path
Definition: f2fs.h:215
u32 mtime
Definition: f2fs.h:226
const u8 * name
Definition: f2fs.h:217
uint64_t capabilities
Definition: f2fs.h:228
int len
Definition: f2fs.h:218
char * link
Definition: f2fs.h:219
u8 file_type
Definition: f2fs.h:221
char * secon
Definition: f2fs.h:227
nid_t ino
Definition: f2fs.h:229
u16 uid
Definition: f2fs.h:223
char * full_path
Definition: f2fs.h:216
nid_t pino
Definition: f2fs.h:230
u16 gid
Definition: f2fs.h:224
u32 * inode
Definition: f2fs.h:225
struct f2fs_node * node_blk
Definition: f2fs.h:237
block_t data_blkaddr
Definition: f2fs.h:240
block_t node_blkaddr
Definition: f2fs.h:241
int ndirty
Definition: f2fs.h:242
int alloced
Definition: f2fs.h:242
unsigned int ofs_in_node
Definition: f2fs.h:239
int idirty
Definition: f2fs.h:242
struct f2fs_node * inode_blk
Definition: f2fs.h:236
nid_t nid
Definition: f2fs.h:238
Definition: f2fs_fs.h:845
__le32 cp_pack_start_sum
Definition: f2fs_fs.h:861
unsigned char sit_nat_version_bitmap[]
Definition: f2fs_fs.h:873
__le64 checkpoint_ver
Definition: f2fs_fs.h:846
__le32 sit_ver_bitmap_bytesize
Definition: f2fs_fs.h:865
__le32 nat_ver_bitmap_bytesize
Definition: f2fs_fs.h:866
__le32 checksum_offset
Definition: f2fs_fs.h:867
__le32 ckpt_flags
Definition: f2fs_fs.h:859
struct f2fs_dir_entry * dentry
Definition: f2fs.h:208
int max
Definition: f2fs.h:210
struct inode * inode
Definition: f2fs.h:206
u8 * bitmap
Definition: f2fs.h:207
int nr_bitmap
Definition: f2fs.h:211
__u8(* filename)[F2FS_SLOT_LEN]
Definition: f2fs.h:209
Definition: f2fs_fs.h:1386
struct f2fs_sb_info sbi
Definition: fsck.h:91
Definition: f2fs_fs.h:1034
__le32 i_addr[0]
Definition: f2fs_fs.h:1083
Definition: f2fs_fs.h:1141
__le32 ino
Definition: f2fs_fs.h:1143
__le32 block_addr
Definition: f2fs_fs.h:1144
__u8 version
Definition: f2fs_fs.h:1142
char * nid_bitmap
Definition: f2fs.h:140
block_t nat_blocks
Definition: f2fs.h:130
char * nat_bitmap
Definition: f2fs.h:138
nid_t next_scan_nid
Definition: f2fs.h:133
unsigned int fcnt
Definition: f2fs.h:136
nid_t init_scan_nid
Definition: f2fs.h:132
int bitmap_size
Definition: f2fs.h:139
unsigned int nat_cnt
Definition: f2fs.h:135
nid_t max_nid
Definition: f2fs.h:131
block_t nat_blkaddr
Definition: f2fs.h:129
Definition: f2fs_fs.h:1122
struct f2fs_inode i
Definition: f2fs_fs.h:1125
struct f2fs_checkpoint * ckpt
Definition: f2fs.h:257
unsigned int cur_victim_sec
Definition: f2fs.h:283
block_t total_valid_block_count
Definition: f2fs.h:278
unsigned int total_valid_node_count
Definition: f2fs.h:273
int cp_backuped
Definition: f2fs.h:286
struct f2fs_sm_info * sm_info
Definition: f2fs.h:256
unsigned int blocks_per_seg
Definition: f2fs.h:268
unsigned int log_blocksize
Definition: f2fs.h:262
block_t last_valid_block_count
Definition: f2fs.h:280
unsigned int segs_per_sec
Definition: f2fs.h:269
bool seg_manager_done
Definition: f2fs.h:289
unsigned int root_ino_num
Definition: f2fs.h:264
unsigned int total_valid_inode_count
Definition: f2fs.h:274
struct f2fs_nm_info * nm_info
Definition: f2fs.h:255
int cur_cp
Definition: f2fs.h:258
void * hardlink_cache
Definition: f2fs.h:292
unsigned int node_ino_num
Definition: f2fs.h:265
struct f2fs_fsck * fsck
Definition: f2fs.h:252
unsigned int blocksize
Definition: f2fs.h:263
int active_logs
Definition: f2fs.h:275
block_t alloc_valid_block_count
Definition: f2fs.h:279
u32 free_segments
Definition: f2fs.h:284
unsigned int total_sections
Definition: f2fs.h:271
unsigned int log_sectors_per_block
Definition: f2fs.h:261
block_t user_block_count
Definition: f2fs.h:277
unsigned int secs_per_zone
Definition: f2fs.h:270
unsigned int meta_ino_num
Definition: f2fs.h:266
struct f2fs_super_block * raw_super
Definition: f2fs.h:254
unsigned int log_blocks_per_seg
Definition: f2fs.h:267
unsigned int total_node_count
Definition: f2fs.h:272
u32 s_next_generation
Definition: f2fs.h:281
struct curseg_info saved_curseg_warm_node
Definition: f2fs.h:192
block_t ssa_blkaddr
Definition: f2fs.h:196
unsigned int segment_count
Definition: f2fs.h:198
block_t main_blkaddr
Definition: f2fs.h:195
block_t seg0_blkaddr
Definition: f2fs.h:194
unsigned int ovp_segments
Definition: f2fs.h:201
unsigned int reserved_segments
Definition: f2fs.h:200
struct sit_info * sit_info
Definition: f2fs.h:190
unsigned int free_segments
Definition: f2fs.h:202
struct curseg_info * curseg_array
Definition: f2fs.h:191
unsigned int main_segments
Definition: f2fs.h:199
Definition: f2fs_fs.h:1345
Definition: f2fs_fs.h:1227
__le32 nid
Definition: f2fs_fs.h:1228
__u8 version
Definition: f2fs_fs.h:1232
__le16 ofs_in_node
Definition: f2fs_fs.h:1233
Definition: f2fs_fs.h:773
block_t last_dentry
Definition: f2fs.h:500
struct list_head list
Definition: f2fs.h:497
block_t blkaddr
Definition: f2fs.h:499
nid_t ino
Definition: f2fs.h:498
u64 from_devino
Definition: f2fs.h:246
int nbuild
Definition: f2fs.h:248
nid_t to_ino
Definition: f2fs.h:247
struct list_head * prev
Definition: f2fs.h:50
struct list_head * next
Definition: f2fs.h:50
nid_t ino
Definition: f2fs.h:123
nid_t nid
Definition: f2fs.h:122
u32 blk_addr
Definition: f2fs.h:124
unsigned char version
Definition: f2fs.h:125
unsigned int valid_blocks
Definition: f2fs.h:156
unsigned short valid_blocks
Definition: f2fs.h:144
unsigned char type
Definition: f2fs.h:148
unsigned long long mtime
Definition: f2fs.h:151
unsigned char orig_type
Definition: f2fs.h:149
unsigned char * cur_valid_map
Definition: f2fs.h:146
unsigned short ckpt_valid_blocks
Definition: f2fs.h:145
unsigned char * ckpt_valid_map
Definition: f2fs.h:147
int dirty
Definition: f2fs.h:152
unsigned char ckpt_type
Definition: f2fs.h:150
block_t sit_base_addr
Definition: f2fs.h:161
struct sec_entry * sec_entries
Definition: f2fs.h:172
unsigned long long mounted_time
Definition: f2fs.h:175
block_t written_valid_blocks
Definition: f2fs.h:163
char * sit_bitmap
Definition: f2fs.h:165
unsigned char * bitmap
Definition: f2fs.h:164
unsigned long long min_mtime
Definition: f2fs.h:176
unsigned long long elapsed_time
Definition: f2fs.h:174
block_t sit_blocks
Definition: f2fs.h:162
struct seg_entry * sentries
Definition: f2fs.h:171
unsigned int dirty_sentries
Definition: f2fs.h:169
unsigned int bitmap_size
Definition: f2fs.h:166
unsigned long * dirty_sentries_bitmap
Definition: f2fs.h:168
unsigned int sents_per_block
Definition: f2fs.h:170
unsigned long long max_mtime
Definition: f2fs.h:177