[Ocfs2-tools-devel] [PATCH] debugfs.ocfs2: Use a proper enum when dumping blocks in the journal.
Joel Becker
Joel.Becker at oracle.com
Fri Jan 9 16:17:21 PST 2009
In the 'logdump' command, we detect the type of a block before dumping
it. However, we pass around literal integer values - silly, no? Let's
put together a proper enum. This makes expanding it easier, too.
Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
debugfs.ocfs2/dump.c | 13 ++++++++-----
debugfs.ocfs2/include/dump.h | 26 ++++++++++++++------------
debugfs.ocfs2/include/journal.h | 1 -
debugfs.ocfs2/journal.c | 20 ++++++++++++--------
4 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/debugfs.ocfs2/dump.c b/debugfs.ocfs2/dump.c
index 43ff43e..c29f580 100644
--- a/debugfs.ocfs2/dump.c
+++ b/debugfs.ocfs2/dump.c
@@ -1,4 +1,6 @@
-/*
+/* -*- mode: c; c-basic-offset: 8; -*-
+ * vim: noexpandtab sw=8 ts=8 sts=0:
+ *
* dump.c
*
* dumps ocfs2 structures
@@ -640,21 +642,22 @@ void dump_jbd_block (FILE *out, journal_superblock_t *jsb,
* dump_jbd_metadata()
*
*/
-void dump_jbd_metadata (FILE *out, int type, char *buf, uint64_t blknum)
+void dump_jbd_metadata (FILE *out, enum dump_block_type type, char *buf,
+ uint64_t blknum)
{
fprintf (out, "\tBlock %"PRIu64": ", blknum);
switch (type) {
- case 1:
+ case DUMP_BLOCK_INODE:
fprintf(out, "Inode\n");
dump_inode (out, (struct ocfs2_dinode *)buf);
fprintf (out, "\n");
break;
- case 2:
+ case DUMP_BLOCK_EXTENT_BLOCK:
fprintf(out, "Extent\n");
dump_extent_block (out, (struct ocfs2_extent_block *)buf);
fprintf (out, "\n");
break;
- case 3:
+ case DUMP_BLOCK_GROUP_DESCRIPTOR:
fprintf(out, "Group\n");
dump_group_descriptor (out, (struct ocfs2_group_desc *)buf, 0);
fprintf (out, "\n");
diff --git a/debugfs.ocfs2/include/dump.h b/debugfs.ocfs2/include/dump.h
index ecb070a..db49dfb 100644
--- a/debugfs.ocfs2/include/dump.h
+++ b/debugfs.ocfs2/include/dump.h
@@ -1,31 +1,32 @@
-/*
+/* -*- mode: c; c-basic-offset: 8; -*-
+ * vim: noexpandtab sw=8 ts=8 sts=0:
+ *
* dump.h
*
* Function prototypes, macros, etc. for related 'C' files
*
- * Copyright (C) 2004 Oracle. All rights reserved.
+ * Copyright (C) 2004,2009 Oracle. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
+ * License version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 021110-1307, USA.
- *
- * Authors: Sunil Mushran
*/
#ifndef __DUMP_H__
#define __DUMP_H__
+enum dump_block_type {
+ DUMP_BLOCK_UNKNOWN,
+ DUMP_BLOCK_INODE,
+ DUMP_BLOCK_EXTENT_BLOCK,
+ DUMP_BLOCK_GROUP_DESCRIPTOR,
+};
+
typedef struct _list_dir_opts {
ocfs2_filesys *fs;
FILE *out;
@@ -54,7 +55,8 @@ void dump_jbd_header (FILE *out, journal_header_t *header);
void dump_jbd_superblock (FILE *out, journal_superblock_t *jsb);
void dump_jbd_block (FILE *out, journal_superblock_t *jsb,
journal_header_t *header, uint64_t blknum);
-void dump_jbd_metadata (FILE *out, int type, char *buf, uint64_t blknum);
+void dump_jbd_metadata (FILE *out, enum dump_block_type type, char *buf,
+ uint64_t blknum);
void dump_jbd_unknown (FILE *out, uint64_t start, uint64_t end);
void dump_slots (FILE *out, struct ocfs2_slot_map_extended *se,
struct ocfs2_slot_map *sm, int num_slots);
diff --git a/debugfs.ocfs2/include/journal.h b/debugfs.ocfs2/include/journal.h
index 3825bbe..4c7e5e4 100644
--- a/debugfs.ocfs2/include/journal.h
+++ b/debugfs.ocfs2/include/journal.h
@@ -27,6 +27,5 @@
#define _JOURNAL_H_
errcode_t read_journal(ocfs2_filesys *fs, uint64_t blkno, FILE *out);
-int detect_block (char *buf);
#endif /* _JOURNAL_H_ */
diff --git a/debugfs.ocfs2/journal.c b/debugfs.ocfs2/journal.c
index bcebaeb..4b447fd 100644
--- a/debugfs.ocfs2/journal.c
+++ b/debugfs.ocfs2/journal.c
@@ -1,4 +1,6 @@
-/*
+/* -*- mode: c; c-basic-offset: 8; -*-
+ * vim: noexpandtab sw=8 ts=8 sts=0:
+ *
* journal.c
*
* reads the journal file
@@ -27,12 +29,14 @@
extern dbgfs_gbls gbls;
+static enum dump_block_type detect_block (char *buf);
+
static void scan_journal(FILE *out, journal_superblock_t *jsb, char *buf,
int len, uint64_t *blocknum, uint64_t *last_unknown)
{
char *block;
char *p;
- int type;
+ enum dump_block_type type;
journal_header_t *header;
p = buf;
@@ -48,7 +52,7 @@ static void scan_journal(FILE *out, journal_superblock_t *jsb, char *buf,
dump_jbd_block(out, jsb, header, *blocknum);
} else {
type = detect_block(block);
- if (type < 0) {
+ if (type == DUMP_BLOCK_UNKNOWN) {
if (*last_unknown == 0)
*last_unknown = *blocknum;
} else {
@@ -157,31 +161,31 @@ bail:
* detect_block()
*
*/
-int detect_block (char *buf)
+static enum dump_block_type detect_block (char *buf)
{
struct ocfs2_dinode *inode;
struct ocfs2_extent_block *extent;
struct ocfs2_group_desc *group;
- int ret = -1;
+ enum dump_block_type ret = DUMP_BLOCK_UNKNOWN;
inode = (struct ocfs2_dinode *)buf;
if (!memcmp(inode->i_signature, OCFS2_INODE_SIGNATURE,
sizeof(OCFS2_INODE_SIGNATURE))) {
- ret = 1;
+ ret = DUMP_BLOCK_INODE;
goto bail;
}
extent = (struct ocfs2_extent_block *)buf;
if (!memcmp(extent->h_signature, OCFS2_EXTENT_BLOCK_SIGNATURE,
sizeof(OCFS2_EXTENT_BLOCK_SIGNATURE))) {
- ret = 2;
+ ret = DUMP_BLOCK_EXTENT_BLOCK;
goto bail;
}
group = (struct ocfs2_group_desc *)buf;
if (!memcmp(group->bg_signature, OCFS2_GROUP_DESC_SIGNATURE,
sizeof(OCFS2_GROUP_DESC_SIGNATURE))) {
- ret = 3;
+ ret = DUMP_BLOCK_GROUP_DESCRIPTOR;
goto bail;
}
--
1.5.6.5
--
Bram's Law:
The easier a piece of software is to write, the worse it's
implemented in practice.
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