fsck.h revision 3b4b82634489b2f9d367b1f897d51a341208d163
1/**
2 * fsck.h
3 *
4 * Copyright (c) 2013 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 _FSCK_H_
12#define _FSCK_H_
13
14#include "f2fs.h"
15
16/* fsck.c */
17struct orphan_info {
18	u32 nr_inodes;
19	u32 *ino_list;
20};
21
22struct f2fs_fsck {
23	struct f2fs_sb_info sbi;
24
25	struct orphan_info orphani;
26	struct chk_result {
27		u64 valid_blk_cnt;
28		u32 valid_nat_entry_cnt;
29		u32 valid_node_cnt;
30		u32 valid_inode_cnt;
31		u32 multi_hard_link_files;
32		u64 sit_valid_blocks;
33		u32 sit_free_segs;
34	} chk;
35
36	struct hard_link_node *hard_link_list_head;
37
38	char *main_seg_usage;
39	char *main_area_bitmap;
40	char *nat_area_bitmap;
41	char *sit_area_bitmap;
42
43	u64 main_area_bitmap_sz;
44	u32 nat_area_bitmap_sz;
45	u32 sit_area_bitmap_sz;
46
47	u64 nr_main_blks;
48	u32 nr_nat_entries;
49
50	u32 dentry_depth;
51};
52
53#define BLOCK_SZ		4096
54struct block {
55	unsigned char buf[BLOCK_SZ];
56};
57
58enum NODE_TYPE {
59	TYPE_INODE = 37,
60	TYPE_DIRECT_NODE = 43,
61	TYPE_INDIRECT_NODE = 53,
62	TYPE_DOUBLE_INDIRECT_NODE = 67,
63	TYPE_XATTR = 77
64};
65
66struct hard_link_node {
67	u32 nid;
68	u32 links;
69	struct hard_link_node *next;
70};
71
72enum seg_type {
73	SEG_TYPE_DATA,
74	SEG_TYPE_CUR_DATA,
75	SEG_TYPE_NODE,
76	SEG_TYPE_CUR_NODE,
77	SEG_TYPE_MAX,
78};
79
80extern void fsck_chk_xattr_blk(struct f2fs_sb_info *, u32, u32, u32 *);
81extern void fsck_chk_orphan_node(struct f2fs_sb_info *);
82extern int fsck_chk_node_blk(struct f2fs_sb_info *, struct f2fs_inode *, u32,
83		enum FILE_TYPE, enum NODE_TYPE, u32 *);
84extern void fsck_chk_inode_blk(struct f2fs_sb_info *, u32, enum FILE_TYPE,
85		struct f2fs_node *, u32 *, struct node_info *);
86extern int fsck_chk_dnode_blk(struct f2fs_sb_info *, struct f2fs_inode *,
87		u32, enum FILE_TYPE, struct f2fs_node *, u32 *,
88		struct node_info *);
89extern int fsck_chk_idnode_blk(struct f2fs_sb_info *, struct f2fs_inode *,
90		enum FILE_TYPE, struct f2fs_node *, u32 *);
91extern int fsck_chk_didnode_blk(struct f2fs_sb_info *, struct f2fs_inode *,
92		enum FILE_TYPE, struct f2fs_node *, u32 *);
93extern int fsck_chk_data_blk(struct f2fs_sb_info *sbi, u32, u32 *, u32 *,
94		int, enum FILE_TYPE, u32, u16, u8);
95extern int fsck_chk_dentry_blk(struct f2fs_sb_info *, u32, u32 *, u32 *, int);
96
97extern void print_node_info(struct f2fs_node *);
98extern void print_inode_info(struct f2fs_inode *);
99extern struct seg_entry *get_seg_entry(struct f2fs_sb_info *, unsigned int);
100extern int get_sum_block(struct f2fs_sb_info *, unsigned int,
101				struct f2fs_summary_block *);
102extern int get_sum_entry(struct f2fs_sb_info *, u32, struct f2fs_summary *);
103extern void get_node_info(struct f2fs_sb_info *, nid_t, struct node_info *);
104extern void build_nat_area_bitmap(struct f2fs_sb_info *);
105extern int build_sit_area_bitmap(struct f2fs_sb_info *);
106extern void fsck_init(struct f2fs_sb_info *);
107extern int fsck_verify(struct f2fs_sb_info *);
108extern void fsck_free(struct f2fs_sb_info *);
109extern int f2fs_do_mount(struct f2fs_sb_info *);
110extern void f2fs_do_umount(struct f2fs_sb_info *);
111
112/* dump.c */
113struct dump_option {
114	nid_t nid;
115	int start_sit;
116	int end_sit;
117	int start_ssa;
118	int end_ssa;
119	int32_t blk_addr;
120};
121
122extern void sit_dump(struct f2fs_sb_info *, int, int);
123extern void ssa_dump(struct f2fs_sb_info *, int, int);
124extern void dump_node(struct f2fs_sb_info *, nid_t);
125extern int dump_inode_from_blkaddr(struct f2fs_sb_info *, u32);
126
127#endif /* _FSCK_H_ */
128