[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