mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
jbd: use a single printk for jbd_debug()
Backport of jbd2 commit 169f1a2a87
("jbd2: use a single printk for jbd_debug()")
Since the jbd_debug() is implemented with two separate printk()
calls, it can lead to corrupted and misleading debug output like
the following (see lines marked with "*"):
[ 290.339362] (fs/jbd2/journal.c, 203): kjournald2: kjournald2 wakes
[ 290.339365] (fs/jbd2/journal.c, 155): kjournald2: commit_sequence=42103, commit_request=42104
[ 290.339369] (fs/jbd2/journal.c, 158): kjournald2: OK, requests differ
[* 290.339376] (fs/jbd2/journal.c, 648): jbd2_log_wait_commit:
[* 290.339379] (fs/jbd2/commit.c, 370): jbd2_journal_commit_transaction: JBD2: want 42104, j_commit_sequence=42103
[* 290.339382] JBD2: starting commit of transaction 42104
[ 290.339410] (fs/jbd2/revoke.c, 566): jbd2_journal_write_revoke_records: Wrote 0 revoke records
[ 290.376555] (fs/jbd2/commit.c, 1088): jbd2_journal_commit_transaction: JBD2: commit 42104 complete, head 42079
i.e. the debug output from log_wait_commit and journal_commit_transaction
have become interleaved. The output should have been:
(fs/jbd2/journal.c, 648): jbd2_log_wait_commit: JBD2: want 42104, j_commit_sequence=42103
(fs/jbd2/commit.c, 370): jbd2_journal_commit_transaction: JBD2: starting commit of transaction 42104
It is expected that this is not easy to replicate -- I was only able
to cause it on preempt-rt kernels, and even then only under heavy
I/O load.
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
a91de85247
commit
e99a03c6f5
2 changed files with 24 additions and 9 deletions
|
@ -57,16 +57,13 @@
|
|||
#define JBD_EXPENSIVE_CHECKING
|
||||
extern u8 journal_enable_debug;
|
||||
|
||||
#define jbd_debug(n, f, a...) \
|
||||
do { \
|
||||
if ((n) <= journal_enable_debug) { \
|
||||
printk (KERN_DEBUG "(%s, %d): %s: ", \
|
||||
__FILE__, __LINE__, __func__); \
|
||||
printk (f, ## a); \
|
||||
} \
|
||||
} while (0)
|
||||
void __jbd_debug(int level, const char *file, const char *func,
|
||||
unsigned int line, const char *fmt, ...);
|
||||
|
||||
#define jbd_debug(n, fmt, a...) \
|
||||
__jbd_debug((n), __FILE__, __func__, __LINE__, (fmt), ##a)
|
||||
#else
|
||||
#define jbd_debug(f, a...) /**/
|
||||
#define jbd_debug(n, fmt, a...) /**/
|
||||
#endif
|
||||
|
||||
static inline void *jbd_alloc(size_t size, gfp_t flags)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue