On Mon, Jun 10, 2013 at 03:32:00PM -0400, Paul Gortmaker wrote: > The state lock is taken after we are doing an assert on the state > value, not before. It is also taken after the jbd_debug() call. > Noting that 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 "*"): This is only a cosmetic fix, but instead of trying to fix it by moving a lock --- which would only fix this issue, but there are probably others cases where this might be an issue, I'd suggest fixing it with something like this: /* in fs/jbd2/journal.c */ void __jbd2_debug(int level, const char *func, unsigned int line, const char *fmt, ...) { struct va_format vaf; va_list args; if (level < jbd2_journal_enable_debug) return; va_start(args, fmt); vaf.fmt = fmt; vaf.va = &args printk(KERN_DEBUG, "jbd2: (%s, %u): %pV\n", func, line, &vaf); va_end(args); } /* in jbd2.h */ #define jbd_debug(n, fmt, a...) __jbd2_debug((n), __func__, __LINE__, (fmt), ##a) Could you give this approach a try? Thanks, - Ted -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html