[Ocfs2-tools-commits] smushran commits r501 - in trunk/debugfs.ocfs2: . include

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Thu Dec 16 20:02:20 CST 2004


Author: smushran
Date: 2004-12-16 20:02:18 -0600 (Thu, 16 Dec 2004)
New Revision: 501

Modified:
   trunk/debugfs.ocfs2/commands.c
   trunk/debugfs.ocfs2/dump.c
   trunk/debugfs.ocfs2/include/dump.h
   trunk/debugfs.ocfs2/include/main.h
   trunk/debugfs.ocfs2/utils.c
Log:
do_slots added in debugfs

Modified: trunk/debugfs.ocfs2/commands.c
===================================================================
--- trunk/debugfs.ocfs2/commands.c	2004-12-16 23:19:48 UTC (rev 500)
+++ trunk/debugfs.ocfs2/commands.c	2004-12-17 02:02:18 UTC (rev 501)
@@ -64,6 +64,7 @@
 static void do_group (char **args);
 static void do_extent (char **args);
 static void do_chroot (char **args);
+static void do_slots (char **args);
 
 extern gboolean allow_write;
 
@@ -109,10 +110,28 @@
   { "logdump", do_logdump },
 
   { "group", do_group },
-  { "extent", do_extent }
+  { "extent", do_extent },
+
+  { "slots", do_slots }
 };
 
+/*
+ * handle_signal()
+ *
+ */
+void handle_signal (int sig)
+{
+	switch (sig) {
+	case SIGTERM:
+	case SIGINT:
+		if (gbls.device)
+			do_close (NULL);
+		exit(1);
+	}
 
+	return ;
+}
+
 /*
  * find_command()
  *
@@ -285,7 +304,7 @@
 			if (*nodenum < sb->s_max_nodes)
 				return 0;
 			else
-				fprintf(stderr, "Node number is too large\n");
+				fprintf(stderr, "%s: Invalid node number\n", args[0]);
 		} else
 			fprintf(stderr, "usage: %s [nodenum]\n", args[0]);
 	} else
@@ -436,6 +455,14 @@
 	if (ret)
 		gbls.hb_blkno = 0;
 
+	/* lookup slotmap file */
+	snprintf (sysfile, sizeof(sysfile),
+		  ocfs2_system_inodes[SLOT_MAP_SYSTEM_INODE].si_name);
+	ret = ocfs2_lookup(gbls.fs, gbls.sysdir_blkno, sysfile,
+			   strlen(sysfile), NULL, &gbls.slotmap_blkno);
+	if (ret)
+		gbls.slotmap_blkno = 0;
+
 	/* lookup journal files */
 	for (i = 0; i < sb->s_max_nodes; ++i) {
 		snprintf (sysfile, sizeof(sysfile),
@@ -971,18 +998,33 @@
 }
 
 /*
- * handle_signal()
+ * do_slots()
  *
  */
-void handle_signal (int sig)
+static void do_slots (char **args)
 {
-	switch (sig) {
-	case SIGTERM:
-	case SIGINT:
-		if (gbls.device)
-			do_close (NULL);
-		exit(1);
+	FILE *out;
+	errcode_t ret;
+	char *buf = NULL;
+	uint32_t len = gbls.fs->fs_blocksize;
+
+	if (check_device_open())
+		return ;
+
+	/* read in the first block of the slot_map file */
+	ret = read_whole_file(gbls.fs, gbls.slotmap_blkno, &buf, &len);
+	if (ret) {
+		com_err(args[0], ret, " ");
+		goto bail;
 	}
 
+	out = open_pager ();
+	dump_slots (out, buf, len);
+	close_pager (out);
+
+bail:
+	if (buf)
+		ocfs2_free(&buf);
+
 	return ;
 }

Modified: trunk/debugfs.ocfs2/dump.c
===================================================================
--- trunk/debugfs.ocfs2/dump.c	2004-12-16 23:19:48 UTC (rev 500)
+++ trunk/debugfs.ocfs2/dump.c	2004-12-17 02:02:18 UTC (rev 501)
@@ -69,7 +69,7 @@
 	fprintf(out, "\n");
 
 	return ;
-}				/* dump_super_block */
+}
 
 /*
  * dump_local_alloc()
@@ -81,7 +81,7 @@
 	       loc->la_bm_off, loc->la_size);
 
 	return ;
-}				/* dump_local_alloc */
+}
 
 /*
  * dump_inode()
@@ -92,7 +92,7 @@
 	struct passwd *pw;
 	struct group *gr;
 	char *str;
-	__u16 mode;
+	uint16_t mode;
 	GString *flags = NULL;
 	char tmp_str[30];
 
@@ -180,7 +180,7 @@
 	if (flags)
 		g_string_free (flags, 1);
 	return ;
-}				/* dump_inode */
+}
 
 
 /*
@@ -213,7 +213,7 @@
 
 bail:
 	return ;
-}				/* dump_chain_list */
+}
 
 void dump_extent_list (FILE *out, ocfs2_extent_list *ext)
 {
@@ -236,7 +236,7 @@
 
 bail:
 	return ;
-}				/* dump_extent_list */
+}
 
 /*
  * dump_extent_block()
@@ -251,7 +251,7 @@
 		 blk->h_blkno, blk->h_next_leaf_blk);
 
 	return ;
-}				/* dump_extent_block */
+}
 
 /*
  * dump_group_descriptor()
@@ -274,7 +274,7 @@
 		(grp->bg_bits - grp->bg_free_bits_count), grp->bg_size);
 
 	return ;
-}				/* dump_group_descriptor */
+}
 
 /*
  * dump_dir_entry()
@@ -329,7 +329,7 @@
 	if (jstr)
 		g_string_free (jstr, 1);
 	return;
-}				/* dump_jbd_header */
+}
 
 /*
  * dump_jbd_superblock()
@@ -370,13 +370,13 @@
 	fprintf (out, "\n");
 
 	return;
-}				/* dump_jbd_superblock */
+}
 
 /*
  * dump_jbd_block()
  *
  */
-void dump_jbd_block (FILE *out, journal_header_t *header, __u64 blknum)
+void dump_jbd_block (FILE *out, journal_header_t *header, uint64_t blknum)
 {
 	int i;
 	int j;
@@ -386,7 +386,7 @@
 	journal_block_tag_t *tag;
 	journal_revoke_header_t *revoke;
 	char *blk = (char *) header;
-	__u32 *blocknr;
+	uint32_t *blocknr;
 	char *uuid;
 	ocfs2_super_block *sb = OCFS2_RAW_SB(gbls.fs->fs_super);
 
@@ -438,8 +438,8 @@
 
 		fprintf(out, "\tr_count:\t\t%d\n", ntohl(revoke->r_count));
 		count = (ntohl(revoke->r_count) - 
-			 sizeof(journal_revoke_header_t)) / sizeof(__u32);
-		blocknr = (__u32 *) &blk[sizeof(journal_revoke_header_t)];
+			 sizeof(journal_revoke_header_t)) / sizeof(uint32_t);
+		blocknr = (uint32_t *) &blk[sizeof(journal_revoke_header_t)];
 		for(i = 0; i < count; i++)
 			fprintf(out, "\trevoke[%d]:\t\t%u\n", i, ntohl(blocknr[i]));
 		break;
@@ -454,13 +454,13 @@
 		g_string_free (tagflg, 1);
 
 	return;
-}				/* dump_jbd_block */
+}
 
 /*
  * dump_jbd_metadata()
  *
  */
-void dump_jbd_metadata (FILE *out, int type, char *buf, __u64 blknum)
+void dump_jbd_metadata (FILE *out, int type, char *buf, uint64_t blknum)
 {
 	fprintf (out, "\tBlock %"PRIu64": ", blknum);
 	switch (type) {
@@ -480,13 +480,13 @@
 	}
 
 	return ;
-}				/* dump_jbd_metadata */
+}
 
 /*
  * dump_jbd_unknown()
  *
  */
-void dump_jbd_unknown (FILE *out, __u64 start, __u64 end)
+void dump_jbd_unknown (FILE *out, uint64_t start, uint64_t end)
 {
 	if (start == end - 1)
 		fprintf (out, "\tBlock %"PRIu64": ", start);
@@ -496,4 +496,25 @@
 	fprintf (out, "Unknown -- Probably Data\n\n");
 
 	return ;
-}				/* dump_jbd_unknown */
+}
+
+/*
+ * dump_slots()
+ *
+ */
+void dump_slots (FILE *out, char *buf, uint32_t len)
+{
+	int16_t *slots = (int16_t *)buf;
+	uint32_t i;
+	uint32_t num_slots = (len / sizeof(uint16_t));
+	
+	fprintf (out, "\t%5s   %5s\n", "Slot#", "Node#");
+	
+	for (i = 0; i < num_slots; ++i) {
+		if (slots[i] != -1)
+			fprintf (out, "\t%5d   %5d\n",
+				 i, slots[i]);
+	}
+
+	return ;
+}

Modified: trunk/debugfs.ocfs2/include/dump.h
===================================================================
--- trunk/debugfs.ocfs2/include/dump.h	2004-12-16 23:19:48 UTC (rev 500)
+++ trunk/debugfs.ocfs2/include/dump.h	2004-12-17 02:02:18 UTC (rev 501)
@@ -47,5 +47,6 @@
 void dump_jbd_block (FILE *out, journal_header_t *header, __u64 blknum);
 void dump_jbd_metadata (FILE *out, int type, char *buf, __u64 blknum);
 void dump_jbd_unknown (FILE *out, __u64 start, __u64 end);
-void traverse_chain(FILE *out, __u64 blknum);
+void dump_slots (FILE *out, char *buf, uint32_t len);
+
 #endif		/* __DUMP_H__ */

Modified: trunk/debugfs.ocfs2/include/main.h
===================================================================
--- trunk/debugfs.ocfs2/include/main.h	2004-12-16 23:19:48 UTC (rev 500)
+++ trunk/debugfs.ocfs2/include/main.h	2004-12-17 02:02:18 UTC (rev 501)
@@ -78,7 +78,7 @@
 	uint64_t root_blkno;
 	uint64_t sysdir_blkno;
 	uint64_t hb_blkno;
-	uint64_t gblbm_blkno;
+	uint64_t slotmap_blkno;
 	uint64_t jrnl_blkno[256];
 } dbgfs_gbls;
 

Modified: trunk/debugfs.ocfs2/utils.c
===================================================================
--- trunk/debugfs.ocfs2/utils.c	2004-12-16 23:19:48 UTC (rev 500)
+++ trunk/debugfs.ocfs2/utils.c	2004-12-17 02:02:18 UTC (rev 501)
@@ -385,8 +385,11 @@
 /*
  * read_whole_file()
  *
+ * read in buflen bytes or whole file if buflen = 0
+ *
  */
-errcode_t read_whole_file(ocfs2_filesys *fs, uint64_t ino, char **buf, uint32_t *buflen)
+errcode_t read_whole_file(ocfs2_filesys *fs, uint64_t ino, char **buf,
+			  uint32_t *buflen)
 {
 	errcode_t ret;
 	uint32_t got;
@@ -400,16 +403,18 @@
 	if (ret)
 		goto bail;
 
+	if (!*buflen) {
+		*buflen = (((ci->ci_inode->i_size + fs->fs_blocksize - 1) >>
+			    OCFS2_RAW_SB(fs->fs_super)->s_blocksize_bits) <<
+			   OCFS2_RAW_SB(fs->fs_super)->s_blocksize_bits);
+	}
+
 	/* bail if file size is larger than reasonable :-) */
-	if (ci->ci_inode->i_size > 100 * 1024 * 1024) {
+	if (*buflen > 100 * 1024 * 1024) {
 		ret = OCFS2_ET_INTERNAL_FAILURE;
 		goto bail;
 	}
 
-	*buflen = (((ci->ci_inode->i_size + fs->fs_blocksize - 1) >>
-		    OCFS2_RAW_SB(fs->fs_super)->s_blocksize_bits) <<
-		   OCFS2_RAW_SB(fs->fs_super)->s_blocksize_bits);
-
 	ret = ocfs2_malloc_blocks(fs->fs_io,
 				  (*buflen >>
 				   OCFS2_RAW_SB(fs->fs_super)->s_blocksize_bits),



More information about the Ocfs2-tools-commits mailing list