13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * debugfs.h --- header file for the debugfs program
33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
5e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "ss/ss.h"
654c637d4d29af3e6365779f8b12976abe95a4753Theodore Ts'o#include "ext2fs/ext2_fs.h"
73839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include "ext2fs/ext2fs.h"
83839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#ifdef __STDC__
1050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define NOARGS void
1150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#else
1250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define NOARGS
1350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#define const
1450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
1550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
16e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o/*
17e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o * Flags used by the common argument processing functions
18e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o */
19e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o#define CHECK_FS_RW		0x0001
20e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o#define CHECK_FS_BITMAPS	0x0002
21e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o#define CHECK_FS_NOTOPEN	0x0004
22e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o
23fc6d9d519aef67735918bf02c0fa8c9222008f76Theodore Ts'oextern ext2_filsys current_fs;
24b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'oextern ext2_ino_t	root, cwd;
25e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern int sci_idx;
26e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern ss_request_table debug_cmds, extent_cmds;
273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
2888494bb6d440f703db98b6cc4452f63d7aa392b9Theodore Ts'oextern void reset_getopt(void);
293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern FILE *open_pager(void);
303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern void close_pager(FILE *stream);
313839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int check_fs_open(char *name);
323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oextern int check_fs_not_open(char *name);
33fc6d9d519aef67735918bf02c0fa8c9222008f76Theodore Ts'oextern int check_fs_read_write(char *name);
34d61f6176024865007d5a0da49c61c21e9d498007Theodore Ts'oextern int check_fs_bitmaps(char *name);
35b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'oextern ext2_ino_t string_to_inode(char *str);
36fc6d9d519aef67735918bf02c0fa8c9222008f76Theodore Ts'oextern char *time_to_string(__u32);
374efae606bf3159f2134fa29a5ad78fb9f6331f92Theodore Ts'oextern time_t string_to_time(const char *);
38e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oextern unsigned long parse_ulong(const char *str, const char *cmd,
39e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o				 const char *descr, int *err);
40e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern unsigned long long parse_ulonglong(const char *str, const char *cmd,
41e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall					  const char *descr, int *err);
42e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern int strtoblk(const char *cmd, const char *str, blk64_t *ret);
43e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oextern int common_args_process(int argc, char *argv[], int min_argc,
44e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o			       int max_argc, const char *cmd,
45e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o			       const char *usage, int flags);
46e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oextern int common_inode_args_process(int argc, char *argv[],
47e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o				     ext2_ino_t *inode, int flags);
48e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oextern int common_block_args_process(int argc, char *argv[],
49e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				     blk64_t *block, blk64_t *count);
50e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oextern int debugfs_read_inode(ext2_ino_t ino, struct ext2_inode * inode,
51e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o			      const char *cmd);
529b9a780f5a5823865f62f0c9fd194d262f63a06fTheodore Ts'oextern int debugfs_read_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
539b9a780f5a5823865f62f0c9fd194d262f63a06fTheodore Ts'o				   const char *cmd, int bufsize);
54e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'oextern int debugfs_write_inode(ext2_ino_t ino, struct ext2_inode * inode,
55e1018eeaa3285cd0ca26986d929194c1b577d211Theodore Ts'o			       const char *cmd);
56e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern int debugfs_write_inode_full(ext2_ino_t ino, struct ext2_inode * inode,
57e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall				    const char *cmd, int bufsize);
58030970ed750b6a169c32ffb8b19bce3150198629Theodore Ts'oextern int debugfs_write_new_inode(ext2_ino_t ino, struct ext2_inode * inode,
59030970ed750b6a169c32ffb8b19bce3150198629Theodore Ts'o				   const char *cmd);
60e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern int ext2_file_type(unsigned int mode);
613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
6250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* ss command functions */
6350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
6450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* dump.c */
6550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_dump(int argc, char **argv);
6650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_cat(int argc, char **argv);
67b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'oextern void do_rdump(int argc, char **argv);
6850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
69e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* extent_inode.c */
70e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_extent_open(int argc, char **argv);
71e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_extent_close(int argc, char **argv);
72e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_current_node(int argc, char **argv);
73e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_root_node(int argc, char **argv);
74e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_last_leaf(int argc, char **argv);
75e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_first_sib(int argc, char **argv);
76e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_last_sib(int argc, char **argv);
77e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_next_sib(int argc, char **argv);
78e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_prev_sib(int argc, char **argv);
79e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_next_leaf(int argc, char **argv);
80e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_prev_leaf(int argc, char **argv);
81e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_next(int argc, char **argv);
82e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_prev(int argc, char **argv);
83e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_up(int argc, char **argv);
84e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_down(int argc, char **argv);
85e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_delete_node(int argc, char **argv);
86e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_replace_node(int argc, char **argv);
87e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_split_node(int argc, char **argv);
88e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_insert_node(int argc, char **argv);
89e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_set_bmap(int argc, char **argv);
90e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_print_all(int argc, char **argv);
91e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_fix_parents(int argc, char **argv);
92e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_info(int argc, char **argv);
93e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_goto_block(int argc, char **argv);
94e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
953e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'o/* htree.c */
963e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'oextern void do_htree_dump(int argc, char **argv);
973e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'oextern void do_dx_hash(int argc, char **argv);
983e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'oextern void do_dirsearch(int argc, char **argv);
993e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'o
1005e4f070952bb4472e28a925f591b551baf2db278Theodore Ts'o/* logdump.c */
1015e4f070952bb4472e28a925f591b551baf2db278Theodore Ts'oextern void do_logdump(int argc, char **argv);
1025e4f070952bb4472e28a925f591b551baf2db278Theodore Ts'o
10350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* lsdel.c */
10450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_lsdel(int argc, char **argv);
10550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
10650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* icheck.c */
10750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_icheck(int argc, char **argv);
10850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
10950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* ncheck.c */
11050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_ncheck(int argc, char **argv);
11150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
1127dec050a807eec171e29c9a7966347633a5992bfTheodore Ts'o/* set_fields.c */
113b74d1d89eb478f1dee108adc1a274b69ce4b2557Theodore Ts'oextern void do_set_super(int argc, char **);
1147dec050a807eec171e29c9a7966347633a5992bfTheodore Ts'oextern void do_set_inode(int argc, char **);
115d4e0b1c6f5aa8c6a248d9149ed5634a310952411Theodore Ts'oextern void do_set_block_group_descriptor(int argc, char **);
116b74d1d89eb478f1dee108adc1a274b69ce4b2557Theodore Ts'o
117544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o/* unused.c */
118544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'oextern void do_dump_unused(int argc, char **argv);
119544349270e4c74a6feb971123884a8cf5052a7eeTheodore Ts'o
12050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o/* debugfs.c */
121efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'oextern void internal_dump_inode(FILE *, const char *, ext2_ino_t,
122da81e3fcfe075922e995a1c5f1efded5768d519aTheodore Ts'o				struct ext2_inode *, int);
123da81e3fcfe075922e995a1c5f1efded5768d519aTheodore Ts'o
1244a31c48b827f378f386b28461fd14b41d709e4ebTheodore Ts'oextern void do_dirty_filesys(int argc, char **argv);
12550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_open_filesys(int argc, char **argv);
12650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_close_filesys(int argc, char **argv);
127b044c2e02af46c54206f0f6e29896ab32681a7dbTheodore Ts'oextern void do_lcd(int argc, char **argv);
12850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_init_filesys(int argc, char **argv);
12950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_show_super_stats(int argc, char **argv);
13050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_kill_file(int argc, char **argv);
13150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_rm(int argc, char **argv);
13250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_link(int argc, char **argv);
133682720a41b70cbe5291b524184983712124035b2Theodore Ts'oextern void do_undel(int argc, char **argv);
13450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_unlink(int argc, char **argv);
13550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_find_free_block(int argc, char **argv);
13650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_find_free_inode(int argc, char **argv);
13750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_stat(int argc, char **argv);
138e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_dump_extents(int argc, char **argv);
139e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_blocks(int argc, char *argv[]);
14050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o
14150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_chroot(int argc, char **argv);
14250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_clri(int argc, char **argv);
14350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_freei(int argc, char **argv);
14450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_seti(int argc, char **argv);
14550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_testi(int argc, char **argv);
14650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_freeb(int argc, char **argv);
14750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_setb(int argc, char **argv);
14850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_testb(int argc, char **argv);
14950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_modify_inode(int argc, char **argv);
15050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_list_dir(int argc, char **argv);
15150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_change_working_dir(int argc, char **argv);
15250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_print_working_directory(int argc, char **argv);
15350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_write(int argc, char **argv);
15450e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_mknod(int argc, char **argv);
15550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_mkdir(int argc, char **argv);
15650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_rmdir(int argc, char **argv);
15750e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_show_debugfs_params(int argc, char **argv);
15850e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'oextern void do_expand_dir(int argc, char **argv);
1593e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'oextern void do_features(int argc, char **argv);
1603e69906495d5898849a6154b0311b5d4a84a27aeTheodore Ts'oextern void do_bmap(int argc, char **argv);
161becf36f6ace508fd091052b9e9bcdea192bfbc48Theodore Ts'oextern void do_imap(int argc, char **argv);
1629b9a780f5a5823865f62f0c9fd194d262f63a06fTheodore Ts'oextern void do_set_current_time(int argc, char **argv);
16342080a8656895eddb0e054c3af86667a5a6aff9fTheodore Ts'oextern void do_supported_features(int argc, char **argv);
164e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_punch(int argc, char **argv);
165e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_symlink(int argc, char **argv);
166e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
167e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_dump_mmp(int argc, char **argv);
168e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_set_mmp_value(int argc, char **argv);
169e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
170e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_freefrag(int argc, char **argv);
171e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_filefrag(int argc, char *argv[]);
172e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall
173e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* util.c */
174e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern time_t string_to_time(const char *arg);
175f404167dda29a59d2be2882328aeb074b9899669Theodore Ts'o
176e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* zap.c */
177e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_zap_block(int argc, char **argv);
178e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallextern void do_block_dump(int argc, char **argv);
179