fsck.h revision 1118af29cae53275851c3b1f7ef266e67cc7e2a7
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_orphan_node(struct f2fs_sb_info *);
81extern int fsck_chk_node_blk(struct f2fs_sb_info *, struct f2fs_inode *, u32,
82		enum FILE_TYPE, enum NODE_TYPE, u32 *);
83extern void fsck_chk_inode_blk(struct f2fs_sb_info *, u32, enum FILE_TYPE,
84		struct f2fs_node *, u32 *, struct node_info *);
85extern int fsck_chk_dnode_blk(struct f2fs_sb_info *, struct f2fs_inode *,
86		u32, enum FILE_TYPE, struct f2fs_node *, u32 *,
87		struct node_info *);
88extern int fsck_chk_idnode_blk(struct f2fs_sb_info *, struct f2fs_inode *,
89		enum FILE_TYPE, struct f2fs_node *, u32 *);
90extern int fsck_chk_didnode_blk(struct f2fs_sb_info *, struct f2fs_inode *,
91		enum FILE_TYPE, struct f2fs_node *, u32 *);
92extern int fsck_chk_data_blk(struct f2fs_sb_info *sbi, u32, u32 *, u32 *,
93		int, enum FILE_TYPE, u32, u16, u8);
94extern int fsck_chk_dentry_blk(struct f2fs_sb_info *, u32, u32 *, u32 *, int);
95
96extern void print_node_info(struct f2fs_node *);
97extern void print_inode_info(struct f2fs_inode *);
98extern struct seg_entry *get_seg_entry(struct f2fs_sb_info *, unsigned int);
99extern int get_sum_block(struct f2fs_sb_info *, unsigned int,
100				struct f2fs_summary_block *);
101extern int get_sum_entry(struct f2fs_sb_info *, u32, struct f2fs_summary *);
102extern void get_node_info(struct f2fs_sb_info *, nid_t, struct node_info *);
103extern void build_nat_area_bitmap(struct f2fs_sb_info *);
104extern void build_sit_area_bitmap(struct f2fs_sb_info *);
105extern void fsck_init(struct f2fs_sb_info *);
106extern int fsck_verify(struct f2fs_sb_info *);
107extern void fsck_free(struct f2fs_sb_info *);
108extern int f2fs_do_mount(struct f2fs_sb_info *);
109extern void f2fs_do_umount(struct f2fs_sb_info *);
110
111/* dump.c */
112struct dump_option {
113	nid_t nid;
114	int start_sit;
115	int end_sit;
116	int start_ssa;
117	int end_ssa;
118	int32_t blk_addr;
119};
120
121extern void sit_dump(struct f2fs_sb_info *, int, int);
122extern void ssa_dump(struct f2fs_sb_info *, int, int);
123extern void dump_node(struct f2fs_sb_info *, nid_t);
124extern int dump_inode_from_blkaddr(struct f2fs_sb_info *, u32);
125
126#endif /* _FSCK_H_ */
127