diff options
Diffstat (limited to 'fs/ubifs/debug.h')
-rw-r--r-- | fs/ubifs/debug.h | 117 |
1 files changed, 89 insertions, 28 deletions
diff --git a/fs/ubifs/debug.h b/fs/ubifs/debug.h index 33d6b95071e4..9820d6999f7e 100644 --- a/fs/ubifs/debug.h +++ b/fs/ubifs/debug.h | |||
@@ -25,7 +25,56 @@ | |||
25 | 25 | ||
26 | #ifdef CONFIG_UBIFS_FS_DEBUG | 26 | #ifdef CONFIG_UBIFS_FS_DEBUG |
27 | 27 | ||
28 | #define UBIFS_DBG(op) op | 28 | /** |
29 | * ubifs_debug_info - per-FS debugging information. | ||
30 | * @buf: a buffer of LEB size, used for various purposes | ||
31 | * @old_zroot: old index root - used by 'dbg_check_old_index()' | ||
32 | * @old_zroot_level: old index root level - used by 'dbg_check_old_index()' | ||
33 | * @old_zroot_sqnum: old index root sqnum - used by 'dbg_check_old_index()' | ||
34 | * @failure_mode: failure mode for recovery testing | ||
35 | * @fail_delay: 0=>don't delay, 1=>delay a time, 2=>delay a number of calls | ||
36 | * @fail_timeout: time in jiffies when delay of failure mode expires | ||
37 | * @fail_cnt: current number of calls to failure mode I/O functions | ||
38 | * @fail_cnt_max: number of calls by which to delay failure mode | ||
39 | * @chk_lpt_sz: used by LPT tree size checker | ||
40 | * @chk_lpt_sz2: used by LPT tree size checker | ||
41 | * @chk_lpt_wastage: used by LPT tree size checker | ||
42 | * @chk_lpt_lebs: used by LPT tree size checker | ||
43 | * @new_nhead_offs: used by LPT tree size checker | ||
44 | * @new_ihead_lnum: used by debugging to check ihead_lnum | ||
45 | * @new_ihead_offs: used by debugging to check ihead_offs | ||
46 | * | ||
47 | * debugfs_dir_name: name of debugfs directory containing this file-system's | ||
48 | * files | ||
49 | * debugfs_dir: direntry object of the file-system debugfs directory | ||
50 | * dump_lprops: "dump lprops" debugfs knob | ||
51 | * dump_budg: "dump budgeting information" debugfs knob | ||
52 | * dump_tnc: "dump TNC" debugfs knob | ||
53 | */ | ||
54 | struct ubifs_debug_info { | ||
55 | void *buf; | ||
56 | struct ubifs_zbranch old_zroot; | ||
57 | int old_zroot_level; | ||
58 | unsigned long long old_zroot_sqnum; | ||
59 | int failure_mode; | ||
60 | int fail_delay; | ||
61 | unsigned long fail_timeout; | ||
62 | unsigned int fail_cnt; | ||
63 | unsigned int fail_cnt_max; | ||
64 | long long chk_lpt_sz; | ||
65 | long long chk_lpt_sz2; | ||
66 | long long chk_lpt_wastage; | ||
67 | int chk_lpt_lebs; | ||
68 | int new_nhead_offs; | ||
69 | int new_ihead_lnum; | ||
70 | int new_ihead_offs; | ||
71 | |||
72 | char debugfs_dir_name[100]; | ||
73 | struct dentry *debugfs_dir; | ||
74 | struct dentry *dump_lprops; | ||
75 | struct dentry *dump_budg; | ||
76 | struct dentry *dump_tnc; | ||
77 | }; | ||
29 | 78 | ||
30 | #define ubifs_assert(expr) do { \ | 79 | #define ubifs_assert(expr) do { \ |
31 | if (unlikely(!(expr))) { \ | 80 | if (unlikely(!(expr))) { \ |
@@ -211,14 +260,18 @@ extern unsigned int ubifs_msg_flags; | |||
211 | extern unsigned int ubifs_chk_flags; | 260 | extern unsigned int ubifs_chk_flags; |
212 | extern unsigned int ubifs_tst_flags; | 261 | extern unsigned int ubifs_tst_flags; |
213 | 262 | ||
214 | /* Dump functions */ | 263 | int ubifs_debugging_init(struct ubifs_info *c); |
264 | void ubifs_debugging_exit(struct ubifs_info *c); | ||
215 | 265 | ||
266 | /* Dump functions */ | ||
216 | const char *dbg_ntype(int type); | 267 | const char *dbg_ntype(int type); |
217 | const char *dbg_cstate(int cmt_state); | 268 | const char *dbg_cstate(int cmt_state); |
218 | const char *dbg_get_key_dump(const struct ubifs_info *c, | 269 | const char *dbg_get_key_dump(const struct ubifs_info *c, |
219 | const union ubifs_key *key); | 270 | const union ubifs_key *key); |
220 | void dbg_dump_inode(const struct ubifs_info *c, const struct inode *inode); | 271 | void dbg_dump_inode(const struct ubifs_info *c, const struct inode *inode); |
221 | void dbg_dump_node(const struct ubifs_info *c, const void *node); | 272 | void dbg_dump_node(const struct ubifs_info *c, const void *node); |
273 | void dbg_dump_lpt_node(const struct ubifs_info *c, void *node, int lnum, | ||
274 | int offs); | ||
222 | void dbg_dump_budget_req(const struct ubifs_budget_req *req); | 275 | void dbg_dump_budget_req(const struct ubifs_budget_req *req); |
223 | void dbg_dump_lstats(const struct ubifs_lp_stats *lst); | 276 | void dbg_dump_lstats(const struct ubifs_lp_stats *lst); |
224 | void dbg_dump_budg(struct ubifs_info *c); | 277 | void dbg_dump_budg(struct ubifs_info *c); |
@@ -233,9 +286,9 @@ void dbg_dump_pnode(struct ubifs_info *c, struct ubifs_pnode *pnode, | |||
233 | struct ubifs_nnode *parent, int iip); | 286 | struct ubifs_nnode *parent, int iip); |
234 | void dbg_dump_tnc(struct ubifs_info *c); | 287 | void dbg_dump_tnc(struct ubifs_info *c); |
235 | void dbg_dump_index(struct ubifs_info *c); | 288 | void dbg_dump_index(struct ubifs_info *c); |
289 | void dbg_dump_lpt_lebs(const struct ubifs_info *c); | ||
236 | 290 | ||
237 | /* Checking helper functions */ | 291 | /* Checking helper functions */ |
238 | |||
239 | typedef int (*dbg_leaf_callback)(struct ubifs_info *c, | 292 | typedef int (*dbg_leaf_callback)(struct ubifs_info *c, |
240 | struct ubifs_zbranch *zbr, void *priv); | 293 | struct ubifs_zbranch *zbr, void *priv); |
241 | typedef int (*dbg_znode_callback)(struct ubifs_info *c, | 294 | typedef int (*dbg_znode_callback)(struct ubifs_info *c, |
@@ -274,9 +327,6 @@ int dbg_force_in_the_gaps(void); | |||
274 | 327 | ||
275 | #define dbg_failure_mode (ubifs_tst_flags & UBIFS_TST_RCVRY) | 328 | #define dbg_failure_mode (ubifs_tst_flags & UBIFS_TST_RCVRY) |
276 | 329 | ||
277 | void dbg_failure_mode_registration(struct ubifs_info *c); | ||
278 | void dbg_failure_mode_deregistration(struct ubifs_info *c); | ||
279 | |||
280 | #ifndef UBIFS_DBG_PRESERVE_UBI | 330 | #ifndef UBIFS_DBG_PRESERVE_UBI |
281 | 331 | ||
282 | #define ubi_leb_read dbg_leb_read | 332 | #define ubi_leb_read dbg_leb_read |
@@ -318,9 +368,13 @@ static inline int dbg_change(struct ubi_volume_desc *desc, int lnum, | |||
318 | return dbg_leb_change(desc, lnum, buf, len, UBI_UNKNOWN); | 368 | return dbg_leb_change(desc, lnum, buf, len, UBI_UNKNOWN); |
319 | } | 369 | } |
320 | 370 | ||
321 | #else /* !CONFIG_UBIFS_FS_DEBUG */ | 371 | /* Debugfs-related stuff */ |
372 | int dbg_debugfs_init(void); | ||
373 | void dbg_debugfs_exit(void); | ||
374 | int dbg_debugfs_init_fs(struct ubifs_info *c); | ||
375 | void dbg_debugfs_exit_fs(struct ubifs_info *c); | ||
322 | 376 | ||
323 | #define UBIFS_DBG(op) | 377 | #else /* !CONFIG_UBIFS_FS_DEBUG */ |
324 | 378 | ||
325 | /* Use "if (0)" to make compiler check arguments even if debugging is off */ | 379 | /* Use "if (0)" to make compiler check arguments even if debugging is off */ |
326 | #define ubifs_assert(expr) do { \ | 380 | #define ubifs_assert(expr) do { \ |
@@ -360,23 +414,28 @@ static inline int dbg_change(struct ubi_volume_desc *desc, int lnum, | |||
360 | #define DBGKEY(key) ((char *)(key)) | 414 | #define DBGKEY(key) ((char *)(key)) |
361 | #define DBGKEY1(key) ((char *)(key)) | 415 | #define DBGKEY1(key) ((char *)(key)) |
362 | 416 | ||
363 | #define dbg_ntype(type) "" | 417 | #define ubifs_debugging_init(c) 0 |
364 | #define dbg_cstate(cmt_state) "" | 418 | #define ubifs_debugging_exit(c) ({}) |
365 | #define dbg_get_key_dump(c, key) ({}) | 419 | |
366 | #define dbg_dump_inode(c, inode) ({}) | 420 | #define dbg_ntype(type) "" |
367 | #define dbg_dump_node(c, node) ({}) | 421 | #define dbg_cstate(cmt_state) "" |
368 | #define dbg_dump_budget_req(req) ({}) | 422 | #define dbg_get_key_dump(c, key) ({}) |
369 | #define dbg_dump_lstats(lst) ({}) | 423 | #define dbg_dump_inode(c, inode) ({}) |
370 | #define dbg_dump_budg(c) ({}) | 424 | #define dbg_dump_node(c, node) ({}) |
371 | #define dbg_dump_lprop(c, lp) ({}) | 425 | #define dbg_dump_lpt_node(c, node, lnum, offs) ({}) |
372 | #define dbg_dump_lprops(c) ({}) | 426 | #define dbg_dump_budget_req(req) ({}) |
373 | #define dbg_dump_lpt_info(c) ({}) | 427 | #define dbg_dump_lstats(lst) ({}) |
374 | #define dbg_dump_leb(c, lnum) ({}) | 428 | #define dbg_dump_budg(c) ({}) |
375 | #define dbg_dump_znode(c, znode) ({}) | 429 | #define dbg_dump_lprop(c, lp) ({}) |
376 | #define dbg_dump_heap(c, heap, cat) ({}) | 430 | #define dbg_dump_lprops(c) ({}) |
377 | #define dbg_dump_pnode(c, pnode, parent, iip) ({}) | 431 | #define dbg_dump_lpt_info(c) ({}) |
378 | #define dbg_dump_tnc(c) ({}) | 432 | #define dbg_dump_leb(c, lnum) ({}) |
379 | #define dbg_dump_index(c) ({}) | 433 | #define dbg_dump_znode(c, znode) ({}) |
434 | #define dbg_dump_heap(c, heap, cat) ({}) | ||
435 | #define dbg_dump_pnode(c, pnode, parent, iip) ({}) | ||
436 | #define dbg_dump_tnc(c) ({}) | ||
437 | #define dbg_dump_index(c) ({}) | ||
438 | #define dbg_dump_lpt_lebs(c) ({}) | ||
380 | 439 | ||
381 | #define dbg_walk_index(c, leaf_cb, znode_cb, priv) 0 | 440 | #define dbg_walk_index(c, leaf_cb, znode_cb, priv) 0 |
382 | #define dbg_old_index_check_init(c, zroot) 0 | 441 | #define dbg_old_index_check_init(c, zroot) 0 |
@@ -396,9 +455,11 @@ static inline int dbg_change(struct ubi_volume_desc *desc, int lnum, | |||
396 | #define dbg_force_in_the_gaps_enabled 0 | 455 | #define dbg_force_in_the_gaps_enabled 0 |
397 | #define dbg_force_in_the_gaps() 0 | 456 | #define dbg_force_in_the_gaps() 0 |
398 | #define dbg_failure_mode 0 | 457 | #define dbg_failure_mode 0 |
399 | #define dbg_failure_mode_registration(c) ({}) | ||
400 | #define dbg_failure_mode_deregistration(c) ({}) | ||
401 | 458 | ||
402 | #endif /* !CONFIG_UBIFS_FS_DEBUG */ | 459 | #define dbg_debugfs_init() 0 |
460 | #define dbg_debugfs_exit() | ||
461 | #define dbg_debugfs_init_fs(c) 0 | ||
462 | #define dbg_debugfs_exit_fs(c) 0 | ||
403 | 463 | ||
464 | #endif /* !CONFIG_UBIFS_FS_DEBUG */ | ||
404 | #endif /* !__UBIFS_DEBUG_H__ */ | 465 | #endif /* !__UBIFS_DEBUG_H__ */ |