• P
    jbd2: use a single printk for jbd_debug() · 169f1a2a
    Paul Gortmaker 提交于
    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.
    Reported-by: NPaul Gortmaker <paul.gortmaker@windriver.com>
    Suggested-by: N"Theodore Ts'o" <tytso@mit.edu>
    Signed-off-by: NPaul Gortmaker <paul.gortmaker@windriver.com>
    Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
    169f1a2a
journal.c 73.6 KB