[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