From: Chunguang Xu <broo...@tencent.com> In order to support jbd2 per device debugging switch, here we need to replace jbd_debug with a new log interface. But there is a small disadvantage here. Because the debugging switch is placed in the journal_t object, the log before the object is initialized will be lost. However, usually this will not have much impact on debugging.
Signed-off-by: Chunguang Xu <broo...@tencent.com> --- fs/ext4/balloc.c | 2 +- fs/ext4/ext4_jbd2.c | 3 +- fs/ext4/fast_commit.c | 64 +++++++++++++++++++++++-------------------- fs/ext4/indirect.c | 4 +-- fs/ext4/inode.c | 3 +- fs/ext4/namei.c | 10 +++---- fs/ext4/super.c | 16 ++++++----- 7 files changed, 56 insertions(+), 46 deletions(-) diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index f45f9feebe59..469aec970b36 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -645,7 +645,7 @@ int ext4_should_retry_alloc(struct super_block *sb, int *retries) if (EXT4_SB(sb)->s_mb_free_pending == 0) return 0; - jbd_debug(1, "%s: retrying operation after ENOSPC\n", sb->s_id); + jbd2_err(EXT4_SB(sb)->s_journal, "%s: retrying operation after ENOSPC\n", sb->s_id); jbd2_journal_force_commit_nested(EXT4_SB(sb)->s_journal); return 1; } diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c index be799040a415..5c1c06662019 100644 --- a/fs/ext4/ext4_jbd2.c +++ b/fs/ext4/ext4_jbd2.c @@ -259,7 +259,8 @@ int __ext4_forget(const char *where, unsigned int line, handle_t *handle, trace_ext4_forget(inode, is_metadata, blocknr); BUFFER_TRACE(bh, "enter"); - jbd_debug(4, "forgetting bh %p: is_metadata = %d, mode %o, " + jbd2_info(EXT4_SB(inode->i_sb)->s_journal, + "forgetting bh %p: is_metadata = %d, mode %o, " "data mode %x\n", bh, is_metadata, inode->i_mode, test_opt(inode->i_sb, DATA_FLAGS)); diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c index 0a14a7c87bf8..1356b7063c99 100644 --- a/fs/ext4/fast_commit.c +++ b/fs/ext4/fast_commit.c @@ -865,8 +865,9 @@ static int ext4_fc_write_inode_data(struct inode *inode, u32 *crc) mutex_unlock(&ei->i_fc_lock); cur_lblk_off = old_blk_size; - jbd_debug(1, "%s: will try writing %d to %d for inode %ld\n", - __func__, cur_lblk_off, new_blk_size, inode->i_ino); + jbd2_err(EXT4_SB(inode->i_sb)->s_journal, + "%s: will try writing %d to %d for inode %ld\n", + __func__, cur_lblk_off, new_blk_size, inode->i_ino); while (cur_lblk_off <= new_blk_size) { map.m_lblk = cur_lblk_off; @@ -1207,7 +1208,7 @@ int ext4_fc_commit(journal_t *journal, tid_t commit_tid) sbi->s_fc_avg_commit_time * 3) / 4; else sbi->s_fc_avg_commit_time = commit_time; - jbd_debug(1, + jbd2_err(sbi->s_journal, "Fast commit ended with blks = %d, reason = %d, subtid - %d", nblks, reason, subtid); if (reason == EXT4_FC_REASON_FC_FAILED) @@ -1319,14 +1320,15 @@ static int ext4_fc_replay_unlink(struct super_block *sb, struct ext4_fc_tl *tl) inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "Inode %d not found", darg.ino); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode %d not found", darg.ino); return 0; } old_parent = ext4_iget(sb, darg.parent_ino, EXT4_IGET_NORMAL); if (IS_ERR(old_parent)) { - jbd_debug(1, "Dir with inode %d not found", darg.parent_ino); + jbd2_err(EXT4_SB(sb)->s_journal, "Dir with inode %d not found", + darg.parent_ino); iput(inode); return 0; } @@ -1351,21 +1353,22 @@ static int ext4_fc_replay_link_internal(struct super_block *sb, dir = ext4_iget(sb, darg->parent_ino, EXT4_IGET_NORMAL); if (IS_ERR(dir)) { - jbd_debug(1, "Dir with inode %d not found.", darg->parent_ino); + jbd2_err(EXT4_SB(sb)->s_journal, "Dir with inode %d not found.", + darg->parent_ino); dir = NULL; goto out; } dentry_dir = d_obtain_alias(dir); if (IS_ERR(dentry_dir)) { - jbd_debug(1, "Failed to obtain dentry"); + jbd2_err(EXT4_SB(sb)->s_journal, "Failed to obtain dentry"); dentry_dir = NULL; goto out; } dentry_inode = d_alloc(dentry_dir, &qstr_dname); if (!dentry_inode) { - jbd_debug(1, "Inode dentry not created."); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode dentry not created."); ret = -ENOMEM; goto out; } @@ -1378,7 +1381,7 @@ static int ext4_fc_replay_link_internal(struct super_block *sb, * could complete. */ if (ret && ret != -EEXIST) { - jbd_debug(1, "Failed to link\n"); + jbd2_err(EXT4_SB(sb)->s_journal, "Failed to link\n"); goto out; } @@ -1411,7 +1414,7 @@ static int ext4_fc_replay_link(struct super_block *sb, struct ext4_fc_tl *tl) inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "Inode not found."); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode not found."); return 0; } @@ -1514,7 +1517,7 @@ static int ext4_fc_replay_inode(struct super_block *sb, struct ext4_fc_tl *tl) /* Given that we just wrote the inode on disk, this SHOULD succeed. */ inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "Inode not found."); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode not found."); return -EFSCORRUPTED; } @@ -1566,7 +1569,7 @@ static int ext4_fc_replay_create(struct super_block *sb, struct ext4_fc_tl *tl) inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "inode %d not found.", darg.ino); + jbd2_err(EXT4_SB(sb)->s_journal, "inode %d not found.", darg.ino); inode = NULL; ret = -EINVAL; goto out; @@ -1579,7 +1582,7 @@ static int ext4_fc_replay_create(struct super_block *sb, struct ext4_fc_tl *tl) */ dir = ext4_iget(sb, darg.parent_ino, EXT4_IGET_NORMAL); if (IS_ERR(dir)) { - jbd_debug(1, "Dir %d not found.", darg.ino); + jbd2_err(EXT4_SB(sb)->s_journal, "Dir %d not found.", darg.ino); goto out; } ret = ext4_init_new_dir(NULL, dir, inode); @@ -1655,7 +1658,7 @@ static int ext4_fc_replay_add_range(struct super_block *sb, inode = ext4_iget(sb, le32_to_cpu(fc_add_ex->fc_ino), EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "Inode not found."); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode not found."); return 0; } @@ -1667,7 +1670,8 @@ static int ext4_fc_replay_add_range(struct super_block *sb, cur = start; remaining = len; - jbd_debug(1, "ADD_RANGE, lblk %d, pblk %lld, len %d, unwritten %d, inode %ld\n", + jbd2_err(EXT4_SB(sb)->s_journal, + "ADD_RANGE, lblk %d, pblk %lld, len %d, unwritten %d, inode %ld\n", start, start_pblk, len, ext4_ext_is_unwritten(ex), inode->i_ino); @@ -1736,8 +1740,9 @@ static int ext4_fc_replay_add_range(struct super_block *sb, } /* Range is mapped and needs a state change */ - jbd_debug(1, "Converting from %d to %d %lld", - map.m_flags & EXT4_MAP_UNWRITTEN, + jbd2_err(EXT4_SB(sb)->s_journal, + "Converting from %d to %d %lld", + map.m_flags & EXT4_MAP_UNWRITTEN, ext4_ext_is_unwritten(ex), map.m_pblk); ret = ext4_ext_replay_update_ex(inode, cur, map.m_len, ext4_ext_is_unwritten(ex), map.m_pblk); @@ -1779,15 +1784,16 @@ ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl) inode = ext4_iget(sb, le32_to_cpu(lrange->fc_ino), EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "Inode %d not found", le32_to_cpu(lrange->fc_ino)); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode %d not found", + le32_to_cpu(lrange->fc_ino)); return 0; } ret = ext4_fc_record_modified_inode(sb, inode->i_ino); - jbd_debug(1, "DEL_RANGE, inode %ld, lblk %d, len %d\n", - inode->i_ino, le32_to_cpu(lrange->fc_lblk), - le32_to_cpu(lrange->fc_len)); + jbd2_err(EXT4_SB(sb)->s_journal, "DEL_RANGE, inode %ld, lblk %d, len %d\n", + inode->i_ino, le32_to_cpu(lrange->fc_lblk), + le32_to_cpu(lrange->fc_len)); while (remaining > 0) { map.m_lblk = cur; map.m_len = remaining; @@ -1811,7 +1817,7 @@ ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl) le32_to_cpu(lrange->fc_lblk) << sb->s_blocksize_bits, le32_to_cpu(lrange->fc_len) << sb->s_blocksize_bits); if (ret) - jbd_debug(1, "ext4_punch_hole returned %d", ret); + jbd2_err(EXT4_SB(sb)->s_journal, "ext4_punch_hole returned %d", ret); ext4_ext_replay_shrink_inode(inode, i_size_read(inode) >> sb->s_blocksize_bits); ext4_mark_inode_dirty(NULL, inode); @@ -1834,8 +1840,8 @@ static void ext4_fc_set_bitmaps_and_counters(struct super_block *sb) inode = ext4_iget(sb, state->fc_modified_inodes[i], EXT4_IGET_NORMAL); if (IS_ERR(inode)) { - jbd_debug(1, "Inode %d not found.", - state->fc_modified_inodes[i]); + jbd2_err(EXT4_SB(sb)->s_journal, "Inode %d not found.", + state->fc_modified_inodes[i]); continue; } cur = 0; @@ -1957,8 +1963,8 @@ static int ext4_fc_replay_scan(journal_t *journal, state->fc_replay_expected_off++; fc_for_each_tl(start, end, tl) { - jbd_debug(3, "Scan phase, tag:%s, blk %lld\n", - tag2str(le16_to_cpu(tl->fc_tag)), bh->b_blocknr); + jbd2_notice(sbi->s_journal, "Scan phase, tag:%s, blk %lld\n", + tag2str(le16_to_cpu(tl->fc_tag)), bh->b_blocknr); switch (le16_to_cpu(tl->fc_tag)) { case EXT4_FC_TAG_ADD_RANGE: ext = (struct ext4_fc_add_range *)ext4_fc_tag_val(tl); @@ -2052,7 +2058,7 @@ static int ext4_fc_replay(journal_t *journal, struct buffer_head *bh, sbi->s_mount_state |= EXT4_FC_REPLAY; } if (!sbi->s_fc_replay_state.fc_replay_num_tags) { - jbd_debug(1, "Replay stops\n"); + jbd2_err(journal, "Replay stops\n"); ext4_fc_set_bitmaps_and_counters(sb); return 0; } @@ -2073,8 +2079,8 @@ static int ext4_fc_replay(journal_t *journal, struct buffer_head *bh, ext4_fc_set_bitmaps_and_counters(sb); break; } - jbd_debug(3, "Replay phase, tag:%s\n", - tag2str(le16_to_cpu(tl->fc_tag))); + jbd2_notice(journal, "Replay phase, tag:%s\n", + tag2str(le16_to_cpu(tl->fc_tag))); state->fc_replay_num_tags--; switch (le16_to_cpu(tl->fc_tag)) { case EXT4_FC_TAG_LINK: diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c index 1223a18c3ff9..f544f0530e14 100644 --- a/fs/ext4/indirect.c +++ b/fs/ext4/indirect.c @@ -458,7 +458,7 @@ static int ext4_splice_branch(handle_t *handle, * the new i_size. But that is not done here - it is done in * generic_commit_write->__mark_inode_dirty->ext4_dirty_inode. */ - jbd_debug(5, "splicing indirect only\n"); + jbd2_debug(EXT4_SB(ar->inode->i_sb)->s_journal, "splicing indirect only\n"); BUFFER_TRACE(where->bh, "call ext4_handle_dirty_metadata"); err = ext4_handle_dirty_metadata(handle, ar->inode, where->bh); if (err) @@ -470,7 +470,7 @@ static int ext4_splice_branch(handle_t *handle, err = ext4_mark_inode_dirty(handle, ar->inode); if (unlikely(err)) goto err_out; - jbd_debug(5, "splicing direct\n"); + jbd2_debug(EXT4_SB(ar->inode->i_sb)->s_journal, "splicing direct\n"); } return err; diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index c173c8405856..89683b7f1a48 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5212,7 +5212,8 @@ int ext4_write_inode(struct inode *inode, struct writeback_control *wbc) if (EXT4_SB(inode->i_sb)->s_journal) { if (ext4_journal_current_handle()) { - jbd_debug(1, "called recursively, non-PF_MEMALLOC!\n"); + jbd2_err(EXT4_SB(inode->i_sb)->s_journal, + "called recursively, non-PF_MEMALLOC!\n"); dump_stack(); return -EIO; } diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index cf652ba3e74d..0e8da7f010d1 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -3003,8 +3003,8 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode) } else brelse(iloc.bh); - jbd_debug(4, "superblock will point to %lu\n", inode->i_ino); - jbd_debug(4, "orphan inode %lu will point to %d\n", + jbd2_info(sbi->s_journal, "superblock will point to %lu\n", inode->i_ino); + jbd2_info(sbi->s_journal, "orphan inode %lu will point to %d\n", inode->i_ino, NEXT_ORPHAN(inode)); out: ext4_std_error(sb, err); @@ -3039,7 +3039,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) } mutex_lock(&sbi->s_orphan_lock); - jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino); + jbd2_info(sbi->s_journal, "remove inode %lu from orphan list\n", inode->i_ino); prev = ei->i_orphan.prev; list_del_init(&ei->i_orphan); @@ -3055,7 +3055,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) ino_next = NEXT_ORPHAN(inode); if (prev == &sbi->s_orphan) { - jbd_debug(4, "superblock will point to %u\n", ino_next); + jbd2_info(sbi->s_journal, "superblock will point to %u\n", ino_next); BUFFER_TRACE(sbi->s_sbh, "get_write_access"); err = ext4_journal_get_write_access(handle, sbi->s_sbh); if (err) { @@ -3073,7 +3073,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) struct inode *i_prev = &list_entry(prev, struct ext4_inode_info, i_orphan)->vfs_inode; - jbd_debug(4, "orphan inode %lu will point to %u\n", + jbd2_info(sbi->s_journal, "orphan inode %lu will point to %u\n", i_prev->i_ino, ino_next); err = ext4_reserve_inode_write(handle, i_prev, &iloc2); if (err) { diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 9a6f9875aa34..e4ee88bd698c 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -2989,7 +2989,7 @@ static void ext4_orphan_cleanup(struct super_block *sb, int i; #endif if (!es->s_last_orphan) { - jbd_debug(4, "no orphan inodes to clean up\n"); + jbd2_info(EXT4_SB(sb)->s_journal, "no orphan inodes to clean up\n"); return; } @@ -3013,7 +3013,8 @@ static void ext4_orphan_cleanup(struct super_block *sb, "clearing orphan list.\n"); es->s_last_orphan = 0; } - jbd_debug(1, "Skipping orphan recovery on fs with errors.\n"); + jbd2_err(EXT4_SB(sb)->s_journal, + "Skipping orphan recovery on fs with errors.\n"); return; } @@ -3062,7 +3063,8 @@ static void ext4_orphan_cleanup(struct super_block *sb, * so, skip the rest. */ if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { - jbd_debug(1, "Skipping orphan recovery on fs with errors.\n"); + jbd2_err(EXT4_SB(sb)->s_journal, + "Skipping orphan recovery on fs with errors.\n"); es->s_last_orphan = 0; break; } @@ -3080,7 +3082,8 @@ static void ext4_orphan_cleanup(struct super_block *sb, ext4_msg(sb, KERN_DEBUG, "%s: truncating inode %lu to %lld bytes", __func__, inode->i_ino, inode->i_size); - jbd_debug(2, "truncating inode %lu to %lld bytes\n", + jbd2_warn(EXT4_SB(sb)->s_journal, + "truncating inode %lu to %lld bytes\n", inode->i_ino, inode->i_size); inode_lock(inode); truncate_inode_pages(inode->i_mapping, inode->i_size); @@ -3094,7 +3097,8 @@ static void ext4_orphan_cleanup(struct super_block *sb, ext4_msg(sb, KERN_DEBUG, "%s: deleting unreferenced inode %lu", __func__, inode->i_ino); - jbd_debug(2, "deleting unreferenced inode %lu\n", + jbd2_warn(EXT4_SB(sb)->s_journal, + "deleting unreferenced inode %lu\n", inode->i_ino); nr_orphans++; } @@ -5226,8 +5230,6 @@ static struct inode *ext4_get_journal_inode(struct super_block *sb, return NULL; } - jbd_debug(2, "Journal inode found at %p: %lld bytes\n", - journal_inode, journal_inode->i_size); if (!S_ISREG(journal_inode->i_mode)) { ext4_msg(sb, KERN_ERR, "invalid journal inode"); iput(journal_inode); -- 2.30.0