[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