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

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Sep 20 18:02:54 CDT 2004


Author: smushran
Date: 2004-09-20 18:02:52 -0500 (Mon, 20 Sep 2004)
New Revision: 244

Modified:
   trunk/debugfs.ocfs2/commands.c
   trunk/debugfs.ocfs2/include/main.h
   trunk/debugfs.ocfs2/readfs.c
Log:
check for max blockno added

Modified: trunk/debugfs.ocfs2/commands.c
===================================================================
--- trunk/debugfs.ocfs2/commands.c	2004-09-17 18:02:55 UTC (rev 243)
+++ trunk/debugfs.ocfs2/commands.c	2004-09-20 23:02:52 UTC (rev 244)
@@ -171,8 +171,10 @@
 {
 	char *dev = args[1];
 	ocfs2_super_block *sb;
+	char *buf = NULL;
 	__u32 len;
 	char raw_dev[255];
+	ocfs2_dinode *inode;
 
 	if (gbls.device)
 		do_close (NULL);
@@ -231,7 +233,22 @@
 	/* load sysfiles blknums */
 	read_sysdir (gbls.dev_fd, (char *)gbls.sysdirin);
 
+	/* get the max clusters/blocks */
+	len = 1 << gbls.blksz_bits;
+	if (!(buf = memalign(len, len)))
+		DBGFS_FATAL("%s", strerror(errno));
+
+	if (!read_inode (gbls.dev_fd, gbls.gblbm_blkno, buf, len)) {
+		inode = (ocfs2_dinode *)buf;
+		if (inode->i_flags & OCFS2_BITMAP_FL) {
+			gbls.max_clusters = inode->id1.bitmap1.i_total;
+			gbls.max_blocks = gbls.max_clusters <<
+					(gbls.clstrsz_bits - gbls.blksz_bits);
+		}
+	}
+
 bail:
+	safefree(buf);
 	return ;
 }					/* do_open */
 
@@ -296,6 +313,10 @@
 
 	if (opts) {
 		blknum = atoi(opts);
+		if (blknum > gbls.max_blocks) {
+			printf("block number is too large\n");
+			goto bail;
+		}
 		if ((read_inode (gbls.dev_fd, blknum, buf, len)) == -1) {
 			printf("Not an inode\n");
 			goto bail;
@@ -497,6 +518,10 @@
 
 	if (opts) {
 		blknum = atoi(opts);
+		if (blknum > gbls.max_blocks) {
+			printf("block number is too large\n");
+			goto bail;
+		}
 		if ((read_inode (gbls.dev_fd, blknum, buf, buflen)) == -1) {
 			printf("Not an inode\n");
 			goto bail;

Modified: trunk/debugfs.ocfs2/include/main.h
===================================================================
--- trunk/debugfs.ocfs2/include/main.h	2004-09-17 18:02:55 UTC (rev 243)
+++ trunk/debugfs.ocfs2/include/main.h	2004-09-20 23:02:52 UTC (rev 244)
@@ -73,7 +73,10 @@
 	__u64 root_blkno;
 	__u64 sysdir_blkno;
 	__u64 dlm_blkno;
+	__u64 gblbm_blkno;
 	__u64 journal_blkno[256];
+	__u64 max_clusters;
+	__u64 max_blocks;
 	char *curdir;
 	ocfs2_dinode *superblk;
 	ocfs2_dinode *rootin;

Modified: trunk/debugfs.ocfs2/readfs.c
===================================================================
--- trunk/debugfs.ocfs2/readfs.c	2004-09-17 18:02:55 UTC (rev 243)
+++ trunk/debugfs.ocfs2/readfs.c	2004-09-20 23:02:52 UTC (rev 244)
@@ -111,7 +111,7 @@
 	off = blknum << gbls.blksz_bits;
 
 	if ((pread64(fd, buf, buflen, off)) == -1)
-		DBGFS_FATAL("%s", strerror(errno));
+		DBGFS_FATAL("%s off=%llu", strerror(errno), off);
 
 	inode = (ocfs2_dinode *)buf;
 
@@ -240,6 +240,7 @@
 	struct ocfs2_dir_entry *rec;
 	GArray *dirarr = NULL;
 	char *dlm = ocfs2_system_inode_names[DLM_SYSTEM_INODE];
+	char *gblbm = ocfs2_system_inode_names[GLOBAL_BITMAP_SYSTEM_INODE];
 	unsigned int i, j;
 	char *journal[256];
 	ocfs2_super_block *sb = &((gbls.superblk)->id2.i_super);
@@ -270,6 +271,10 @@
 			gbls.dlm_blkno = rec->inode;
 			continue;
 		}
+		if (!strncmp (rec->name, gblbm, strlen(gblbm))) {
+			gbls.gblbm_blkno = rec->inode;
+			continue;
+		}
 		for (j = 0; j < sb->s_max_nodes; ++j) {
 			if (!strncmp (rec->name, journal[j], strlen(journal[j]))) {
 				gbls.journal_blkno[j] = rec->inode;



More information about the Ocfs2-tools-commits mailing list