[Ocfs2-tools-devel] [PATCH 5/6] debugfs.ocfs2: Swap blocks we're dumping from the journal.
Joel Becker
Joel.Becker at oracle.com
Fri Jan 9 16:17:56 PST 2009
The 'logdump' command reads blocks from the journal and tries to guess
what kind of block they are. If it finds a known block type, it then
dumps the block.
However, there is a bug. The dump_*() functions of degugfs.ocfs2 assume
the block has already been brought to cpu-endian. The other callers
(regular debugfs commands) swap the blocks. So we need to swap the
blocks in dump_jbd_metadata() before we call the dump_*() functions.
Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
debugfs.ocfs2/dump.c | 3 +++
include/ocfs2/ocfs2.h | 2 ++
libocfs2/extents.c | 5 +++--
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/debugfs.ocfs2/dump.c b/debugfs.ocfs2/dump.c
index c29f580..f1a2560 100644
--- a/debugfs.ocfs2/dump.c
+++ b/debugfs.ocfs2/dump.c
@@ -649,16 +649,19 @@ void dump_jbd_metadata (FILE *out, enum dump_block_type type, char *buf,
switch (type) {
case DUMP_BLOCK_INODE:
fprintf(out, "Inode\n");
+ ocfs2_swap_inode_to_cpu((struct ocfs2_dinode *)buf);
dump_inode (out, (struct ocfs2_dinode *)buf);
fprintf (out, "\n");
break;
case DUMP_BLOCK_EXTENT_BLOCK:
fprintf(out, "Extent\n");
+ ocfs2_swap_extent_block_to_cpu((struct ocfs2_extent_block *)buf);
dump_extent_block (out, (struct ocfs2_extent_block *)buf);
fprintf (out, "\n");
break;
case DUMP_BLOCK_GROUP_DESCRIPTOR:
fprintf(out, "Group\n");
+ ocfs2_swap_group_desc((struct ocfs2_group_desc *)buf);
dump_group_descriptor (out, (struct ocfs2_group_desc *)buf, 0);
fprintf (out, "\n");
break;
diff --git a/include/ocfs2/ocfs2.h b/include/ocfs2/ocfs2.h
index e515205..7f00786 100644
--- a/include/ocfs2/ocfs2.h
+++ b/include/ocfs2/ocfs2.h
@@ -298,6 +298,8 @@ extern size_t ocfs2_journal_tag_bytes(journal_superblock_t *jsb);
extern uint64_t ocfs2_journal_tag_block(journal_block_tag_t *tag,
size_t tag_bytes);
+void ocfs2_swap_extent_block_to_cpu(struct ocfs2_extent_block *eb);
+void ocfs2_swap_extent_block_from_cpu(struct ocfs2_extent_block *eb);
errcode_t ocfs2_read_extent_block(ocfs2_filesys *fs, uint64_t blkno,
char *eb_buf);
errcode_t ocfs2_read_extent_block_nocheck(ocfs2_filesys *fs, uint64_t blkno,
diff --git a/libocfs2/extents.c b/libocfs2/extents.c
index 5f16789..a014437 100644
--- a/libocfs2/extents.c
+++ b/libocfs2/extents.c
@@ -85,7 +85,7 @@ static void ocfs2_swap_extent_block_header(struct ocfs2_extent_block *eb)
eb->h_next_leaf_blk = bswap_64(eb->h_next_leaf_blk);
}
-static void ocfs2_swap_extent_block_from_cpu(struct ocfs2_extent_block *eb)
+void ocfs2_swap_extent_block_from_cpu(struct ocfs2_extent_block *eb)
{
if (cpu_is_little_endian)
return;
@@ -93,7 +93,8 @@ static void ocfs2_swap_extent_block_from_cpu(struct ocfs2_extent_block *eb)
ocfs2_swap_extent_block_header(eb);
ocfs2_swap_extent_list_from_cpu(&eb->h_list);
}
-static void ocfs2_swap_extent_block_to_cpu(struct ocfs2_extent_block *eb)
+
+void ocfs2_swap_extent_block_to_cpu(struct ocfs2_extent_block *eb)
{
if (cpu_is_little_endian)
return;
--
1.5.6.5
--
Life's Little Instruction Book #444
"Never underestimate the power of a kind word or deed."
Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127
More information about the Ocfs2-tools-devel
mailing list