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