diff options
| -rw-r--r-- | Documentation/filesystems/ubifs.txt | 25 | ||||
| -rw-r--r-- | fs/ubifs/debug.c | 3 | ||||
| -rw-r--r-- | fs/ubifs/debug.h | 132 |
3 files changed, 43 insertions, 117 deletions
diff --git a/Documentation/filesystems/ubifs.txt b/Documentation/filesystems/ubifs.txt index 7d17e5b91ff4..8e4fab639d9c 100644 --- a/Documentation/filesystems/ubifs.txt +++ b/Documentation/filesystems/ubifs.txt | |||
| @@ -115,28 +115,8 @@ ubi.mtd=0 root=ubi0:rootfs rootfstype=ubifs | |||
| 115 | Module Parameters for Debugging | 115 | Module Parameters for Debugging |
| 116 | =============================== | 116 | =============================== |
| 117 | 117 | ||
| 118 | When UBIFS has been compiled with debugging enabled, there are 3 module | 118 | When UBIFS has been compiled with debugging enabled, there are 2 module |
| 119 | parameters that are available to control aspects of testing and debugging. | 119 | parameters that are available to control aspects of testing and debugging. |
| 120 | The parameters are unsigned integers where each bit controls an option. | ||
| 121 | The parameters are: | ||
| 122 | |||
| 123 | debug_msgs Selects which debug messages to display, as follows: | ||
| 124 | |||
| 125 | Message Type Flag value | ||
| 126 | |||
| 127 | General messages 1 | ||
| 128 | Journal messages 2 | ||
| 129 | Mount messages 4 | ||
| 130 | Commit messages 8 | ||
| 131 | LEB search messages 16 | ||
| 132 | Budgeting messages 32 | ||
| 133 | Garbage collection messages 64 | ||
| 134 | Tree Node Cache (TNC) messages 128 | ||
| 135 | LEB properties (lprops) messages 256 | ||
| 136 | Input/output messages 512 | ||
| 137 | Log messages 1024 | ||
| 138 | Scan messages 2048 | ||
| 139 | Recovery messages 4096 | ||
| 140 | 120 | ||
| 141 | debug_chks Selects extra checks that UBIFS can do while running: | 121 | debug_chks Selects extra checks that UBIFS can do while running: |
| 142 | 122 | ||
| @@ -156,8 +136,7 @@ debug_tsts Selects a mode of testing, as follows: | |||
| 156 | 136 | ||
| 157 | Failure mode for recovery testing 4 | 137 | Failure mode for recovery testing 4 |
| 158 | 138 | ||
| 159 | For example, set debug_msgs to 5 to display General messages and Mount | 139 | For example, set debug_chks to 3 to enable general and TNC checks. |
| 160 | messages. | ||
| 161 | 140 | ||
| 162 | 141 | ||
| 163 | References | 142 | References |
diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index f46d77e9f031..0bb2bcef0de9 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c | |||
| @@ -42,15 +42,12 @@ DEFINE_SPINLOCK(dbg_lock); | |||
| 42 | static char dbg_key_buf0[128]; | 42 | static char dbg_key_buf0[128]; |
| 43 | static char dbg_key_buf1[128]; | 43 | static char dbg_key_buf1[128]; |
| 44 | 44 | ||
| 45 | unsigned int ubifs_msg_flags; | ||
| 46 | unsigned int ubifs_chk_flags; | 45 | unsigned int ubifs_chk_flags; |
| 47 | unsigned int ubifs_tst_flags; | 46 | unsigned int ubifs_tst_flags; |
| 48 | 47 | ||
| 49 | module_param_named(debug_msgs, ubifs_msg_flags, uint, S_IRUGO | S_IWUSR); | ||
| 50 | module_param_named(debug_chks, ubifs_chk_flags, uint, S_IRUGO | S_IWUSR); | 48 | module_param_named(debug_chks, ubifs_chk_flags, uint, S_IRUGO | S_IWUSR); |
| 51 | module_param_named(debug_tsts, ubifs_tst_flags, uint, S_IRUGO | S_IWUSR); | 49 | module_param_named(debug_tsts, ubifs_tst_flags, uint, S_IRUGO | S_IWUSR); |
| 52 | 50 | ||
| 53 | MODULE_PARM_DESC(debug_msgs, "Debug message type flags"); | ||
| 54 | MODULE_PARM_DESC(debug_chks, "Debug check flags"); | 51 | MODULE_PARM_DESC(debug_chks, "Debug check flags"); |
| 55 | MODULE_PARM_DESC(debug_tsts, "Debug special test flags"); | 52 | MODULE_PARM_DESC(debug_tsts, "Debug special test flags"); |
| 56 | 53 | ||
diff --git a/fs/ubifs/debug.h b/fs/ubifs/debug.h index 7538bf23c243..a811ac4a26bb 100644 --- a/fs/ubifs/debug.h +++ b/fs/ubifs/debug.h | |||
| @@ -109,19 +109,6 @@ struct ubifs_debug_info { | |||
| 109 | 109 | ||
| 110 | #define dbg_dump_stack() dump_stack() | 110 | #define dbg_dump_stack() dump_stack() |
| 111 | 111 | ||
| 112 | /* Generic debugging messages */ | ||
| 113 | #define dbg_msg(fmt, ...) do { \ | ||
| 114 | spin_lock(&dbg_lock); \ | ||
| 115 | printk(KERN_DEBUG "UBIFS DBG (pid %d): %s: " fmt "\n", current->pid, \ | ||
| 116 | __func__, ##__VA_ARGS__); \ | ||
| 117 | spin_unlock(&dbg_lock); \ | ||
| 118 | } while (0) | ||
| 119 | |||
| 120 | #define dbg_do_msg(typ, fmt, ...) do { \ | ||
| 121 | if (ubifs_msg_flags & typ) \ | ||
| 122 | dbg_msg(fmt, ##__VA_ARGS__); \ | ||
| 123 | } while (0) | ||
| 124 | |||
| 125 | #define dbg_err(fmt, ...) do { \ | 112 | #define dbg_err(fmt, ...) do { \ |
| 126 | spin_lock(&dbg_lock); \ | 113 | spin_lock(&dbg_lock); \ |
| 127 | ubifs_err(fmt, ##__VA_ARGS__); \ | 114 | ubifs_err(fmt, ##__VA_ARGS__); \ |
| @@ -140,77 +127,40 @@ const char *dbg_key_str1(const struct ubifs_info *c, | |||
| 140 | #define DBGKEY(key) dbg_key_str0(c, (key)) | 127 | #define DBGKEY(key) dbg_key_str0(c, (key)) |
| 141 | #define DBGKEY1(key) dbg_key_str1(c, (key)) | 128 | #define DBGKEY1(key) dbg_key_str1(c, (key)) |
| 142 | 129 | ||
| 143 | /* General messages */ | 130 | #define ubifs_dbg_msg(type, fmt, ...) do { \ |
| 144 | #define dbg_gen(fmt, ...) dbg_do_msg(UBIFS_MSG_GEN, fmt, ##__VA_ARGS__) | 131 | spin_lock(&dbg_lock); \ |
| 132 | pr_debug("UBIFS DBG " type ": " fmt "\n", ##__VA_ARGS__); \ | ||
| 133 | spin_unlock(&dbg_lock); \ | ||
| 134 | } while (0) | ||
| 145 | 135 | ||
| 136 | /* Just a debugging messages not related to any specific UBIFS subsystem */ | ||
| 137 | #define dbg_msg(fmt, ...) ubifs_dbg_msg("msg", fmt, ##__VA_ARGS__) | ||
| 138 | /* General messages */ | ||
| 139 | #define dbg_gen(fmt, ...) ubifs_dbg_msg("gen", fmt, ##__VA_ARGS__) | ||
| 146 | /* Additional journal messages */ | 140 | /* Additional journal messages */ |
| 147 | #define dbg_jnl(fmt, ...) dbg_do_msg(UBIFS_MSG_JNL, fmt, ##__VA_ARGS__) | 141 | #define dbg_jnl(fmt, ...) ubifs_dbg_msg("jnl", fmt, ##__VA_ARGS__) |
| 148 | |||
| 149 | /* Additional TNC messages */ | 142 | /* Additional TNC messages */ |
| 150 | #define dbg_tnc(fmt, ...) dbg_do_msg(UBIFS_MSG_TNC, fmt, ##__VA_ARGS__) | 143 | #define dbg_tnc(fmt, ...) ubifs_dbg_msg("tnc", fmt, ##__VA_ARGS__) |
| 151 | |||
| 152 | /* Additional lprops messages */ | 144 | /* Additional lprops messages */ |
| 153 | #define dbg_lp(fmt, ...) dbg_do_msg(UBIFS_MSG_LP, fmt, ##__VA_ARGS__) | 145 | #define dbg_lp(fmt, ...) ubifs_dbg_msg("lp", fmt, ##__VA_ARGS__) |
| 154 | |||
| 155 | /* Additional LEB find messages */ | 146 | /* Additional LEB find messages */ |
| 156 | #define dbg_find(fmt, ...) dbg_do_msg(UBIFS_MSG_FIND, fmt, ##__VA_ARGS__) | 147 | #define dbg_find(fmt, ...) ubifs_dbg_msg("find", fmt, ##__VA_ARGS__) |
| 157 | |||
| 158 | /* Additional mount messages */ | 148 | /* Additional mount messages */ |
| 159 | #define dbg_mnt(fmt, ...) dbg_do_msg(UBIFS_MSG_MNT, fmt, ##__VA_ARGS__) | 149 | #define dbg_mnt(fmt, ...) ubifs_dbg_msg("mnt", fmt, ##__VA_ARGS__) |
| 160 | |||
| 161 | /* Additional I/O messages */ | 150 | /* Additional I/O messages */ |
| 162 | #define dbg_io(fmt, ...) dbg_do_msg(UBIFS_MSG_IO, fmt, ##__VA_ARGS__) | 151 | #define dbg_io(fmt, ...) ubifs_dbg_msg("io", fmt, ##__VA_ARGS__) |
| 163 | |||
| 164 | /* Additional commit messages */ | 152 | /* Additional commit messages */ |
| 165 | #define dbg_cmt(fmt, ...) dbg_do_msg(UBIFS_MSG_CMT, fmt, ##__VA_ARGS__) | 153 | #define dbg_cmt(fmt, ...) ubifs_dbg_msg("cmt", fmt, ##__VA_ARGS__) |
| 166 | |||
| 167 | /* Additional budgeting messages */ | 154 | /* Additional budgeting messages */ |
| 168 | #define dbg_budg(fmt, ...) dbg_do_msg(UBIFS_MSG_BUDG, fmt, ##__VA_ARGS__) | 155 | #define dbg_budg(fmt, ...) ubifs_dbg_msg("budg", fmt, ##__VA_ARGS__) |
| 169 | |||
| 170 | /* Additional log messages */ | 156 | /* Additional log messages */ |
| 171 | #define dbg_log(fmt, ...) dbg_do_msg(UBIFS_MSG_LOG, fmt, ##__VA_ARGS__) | 157 | #define dbg_log(fmt, ...) ubifs_dbg_msg("log", fmt, ##__VA_ARGS__) |
| 172 | |||
| 173 | /* Additional gc messages */ | 158 | /* Additional gc messages */ |
| 174 | #define dbg_gc(fmt, ...) dbg_do_msg(UBIFS_MSG_GC, fmt, ##__VA_ARGS__) | 159 | #define dbg_gc(fmt, ...) ubifs_dbg_msg("gc", fmt, ##__VA_ARGS__) |
| 175 | |||
| 176 | /* Additional scan messages */ | 160 | /* Additional scan messages */ |
| 177 | #define dbg_scan(fmt, ...) dbg_do_msg(UBIFS_MSG_SCAN, fmt, ##__VA_ARGS__) | 161 | #define dbg_scan(fmt, ...) ubifs_dbg_msg("scan", fmt, ##__VA_ARGS__) |
| 178 | |||
| 179 | /* Additional recovery messages */ | 162 | /* Additional recovery messages */ |
| 180 | #define dbg_rcvry(fmt, ...) dbg_do_msg(UBIFS_MSG_RCVRY, fmt, ##__VA_ARGS__) | 163 | #define dbg_rcvry(fmt, ...) ubifs_dbg_msg("rcvry", fmt, ##__VA_ARGS__) |
| 181 | |||
| 182 | /* | ||
| 183 | * Debugging message type flags. | ||
| 184 | * | ||
| 185 | * UBIFS_MSG_GEN: general messages | ||
| 186 | * UBIFS_MSG_JNL: journal messages | ||
| 187 | * UBIFS_MSG_MNT: mount messages | ||
| 188 | * UBIFS_MSG_CMT: commit messages | ||
| 189 | * UBIFS_MSG_FIND: LEB find messages | ||
| 190 | * UBIFS_MSG_BUDG: budgeting messages | ||
| 191 | * UBIFS_MSG_GC: garbage collection messages | ||
| 192 | * UBIFS_MSG_TNC: TNC messages | ||
| 193 | * UBIFS_MSG_LP: lprops messages | ||
| 194 | * UBIFS_MSG_IO: I/O messages | ||
| 195 | * UBIFS_MSG_LOG: log messages | ||
| 196 | * UBIFS_MSG_SCAN: scan messages | ||
| 197 | * UBIFS_MSG_RCVRY: recovery messages | ||
| 198 | */ | ||
| 199 | enum { | ||
| 200 | UBIFS_MSG_GEN = 0x1, | ||
| 201 | UBIFS_MSG_JNL = 0x2, | ||
| 202 | UBIFS_MSG_MNT = 0x4, | ||
| 203 | UBIFS_MSG_CMT = 0x8, | ||
| 204 | UBIFS_MSG_FIND = 0x10, | ||
| 205 | UBIFS_MSG_BUDG = 0x20, | ||
| 206 | UBIFS_MSG_GC = 0x40, | ||
| 207 | UBIFS_MSG_TNC = 0x80, | ||
| 208 | UBIFS_MSG_LP = 0x100, | ||
| 209 | UBIFS_MSG_IO = 0x200, | ||
| 210 | UBIFS_MSG_LOG = 0x400, | ||
| 211 | UBIFS_MSG_SCAN = 0x800, | ||
| 212 | UBIFS_MSG_RCVRY = 0x1000, | ||
| 213 | }; | ||
| 214 | 164 | ||
| 215 | /* | 165 | /* |
| 216 | * Debugging check flags. | 166 | * Debugging check flags. |
| @@ -368,33 +318,33 @@ void dbg_debugfs_exit_fs(struct ubifs_info *c); | |||
| 368 | __func__, __LINE__, current->pid); \ | 318 | __func__, __LINE__, current->pid); \ |
| 369 | } while (0) | 319 | } while (0) |
| 370 | 320 | ||
| 371 | #define dbg_err(fmt, ...) do { \ | 321 | #define dbg_err(fmt, ...) do { \ |
| 372 | if (0) \ | 322 | if (0) \ |
| 373 | ubifs_err(fmt, ##__VA_ARGS__); \ | 323 | ubifs_err(fmt, ##__VA_ARGS__); \ |
| 374 | } while (0) | 324 | } while (0) |
| 375 | 325 | ||
| 376 | #define dbg_msg(fmt, ...) do { \ | 326 | #define ubifs_dbg_msg(fmt, ...) do { \ |
| 377 | if (0) \ | 327 | if (0) \ |
| 378 | printk(KERN_DEBUG "UBIFS DBG (pid %d): %s: " fmt "\n", \ | 328 | pr_debug(fmt "\n", ##__VA_ARGS__); \ |
| 379 | current->pid, __func__, ##__VA_ARGS__); \ | ||
| 380 | } while (0) | 329 | } while (0) |
| 381 | 330 | ||
| 382 | #define dbg_dump_stack() | 331 | #define dbg_dump_stack() |
| 383 | #define ubifs_assert_cmt_locked(c) | 332 | #define ubifs_assert_cmt_locked(c) |
| 384 | 333 | ||
| 385 | #define dbg_gen(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 334 | #define dbg_msg(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 386 | #define dbg_jnl(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 335 | #define dbg_gen(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 387 | #define dbg_tnc(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 336 | #define dbg_jnl(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 388 | #define dbg_lp(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 337 | #define dbg_tnc(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 389 | #define dbg_find(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 338 | #define dbg_lp(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 390 | #define dbg_mnt(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 339 | #define dbg_find(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 391 | #define dbg_io(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 340 | #define dbg_mnt(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 392 | #define dbg_cmt(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 341 | #define dbg_io(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 393 | #define dbg_budg(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 342 | #define dbg_cmt(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 394 | #define dbg_log(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 343 | #define dbg_budg(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 395 | #define dbg_gc(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 344 | #define dbg_log(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 396 | #define dbg_scan(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 345 | #define dbg_gc(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 397 | #define dbg_rcvry(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__) | 346 | #define dbg_scan(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) |
| 347 | #define dbg_rcvry(fmt, ...) ubifs_dbg_msg(fmt, ##__VA_ARGS__) | ||
| 398 | 348 | ||
| 399 | #define DBGKEY(key) ((char *)(key)) | 349 | #define DBGKEY(key) ((char *)(key)) |
| 400 | #define DBGKEY1(key) ((char *)(key)) | 350 | #define DBGKEY1(key) ((char *)(key)) |
