All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] [gfs2-utils PATCH 1/3] gfs2_edit: Add new option to print all bitmaps for an rgrp
@ 2013-07-17 15:59 Bob Peterson
  2013-07-17 15:59 ` [Cluster-devel] [gfs2-utils PATCH 2/3] gfs2_edit: display pointer offsets for directory dinodes Bob Peterson
  2013-07-17 15:59 ` [Cluster-devel] [gfs2-utils PATCH 3/3] gfs2_edit: fix a segfault with file names > 255 bytes Bob Peterson
  0 siblings, 2 replies; 3+ messages in thread
From: Bob Peterson @ 2013-07-17 15:59 UTC (permalink / raw)
  To: cluster-devel.redhat.com

This patch adds a new keyword 'rgbitmaps' that causes gfs2_edit to
print all bitmaps for the given resource group. This is handy for
analysis of file system fragmentation.
---
 gfs2/edit/hexedit.c | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c
index 281be5a..d67389e 100644
--- a/gfs2/edit/hexedit.c
+++ b/gfs2/edit/hexedit.c
@@ -2809,7 +2809,7 @@ static void dump_journal(const char *journal)
 /* ------------------------------------------------------------------------ */
 static void usage(void)
 {
-	fprintf(stderr,"\nFormat is: gfs2_edit [-c 1] [-V] [-x] [-h] [identify] [-z <0-9>] [-p structures|blocks][blocktype][blockalloc [val]][blockbits][blockrg][find sb|rg|rb|di|in|lf|jd|lh|ld|ea|ed|lb|13|qc][field <f>[val]] /dev/device\n\n");
+	fprintf(stderr,"\nFormat is: gfs2_edit [-c 1] [-V] [-x] [-h] [identify] [-z <0-9>] [-p structures|blocks][blocktype][blockalloc [val]][blockbits][blockrg][rgcount][rgflags][rgbitmaps][find sb|rg|rb|di|in|lf|jd|lh|ld|ea|ed|lb|13|qc][field <f>[val]] /dev/device\n\n");
 	fprintf(stderr,"If only the device is specified, it enters into hexedit mode.\n");
 	fprintf(stderr,"identify - prints out only the block type, not the details.\n");
 	fprintf(stderr,"printsavedmeta - prints out the saved metadata blocks from a savemeta file.\n");
@@ -2820,6 +2820,8 @@ static void usage(void)
 	fprintf(stderr,"restoremeta - restore metadata for debugging (DANGEROUS).\n");
 	fprintf(stderr,"rgcount - print how many RGs in the file system.\n");
 	fprintf(stderr,"rgflags rgnum [new flags] - print or modify flags for rg #rgnum (0 - X)\n");
+	fprintf(stderr,"rgbitmaps <rgnum> - print out the bitmaps for rgrp "
+		"rgnum.\n");
 	fprintf(stderr,"-V   prints version number.\n");
 	fprintf(stderr,"-c 1 selects alternate color scheme 1\n");
 	fprintf(stderr,"-d   prints details (for printing journals)\n");
@@ -3097,6 +3099,29 @@ static void process_parameters(int argc, char *argv[], int pass)
 				gfs2_rgrp_free(&sbd.rgtree);
 				exit(EXIT_SUCCESS);
 			}
+		} else if (!strcmp(argv[i], "rgbitmaps")) {
+			int rg, bmap;
+			uint64_t rgblk;
+			struct rgrp_tree *rgd;
+
+			i++;
+			if (i >= argc - 1) {
+				printf("Error: rg # not specified.\n");
+				printf("Format is: %s rgbitmaps rgnum\n",
+				       argv[0]);
+				gfs2_rgrp_free(&sbd.rgtree);
+				exit(EXIT_FAILURE);
+			}
+			rg = atoi(argv[i]);
+			rgblk = get_rg_addr(rg);
+			rgd = gfs2_blk2rgrpd(&sbd, rgblk);
+			if (rgd == NULL) {
+				printf("Error: rg # is invalid.\n");
+				gfs2_rgrp_free(&sbd.rgtree);
+				exit(EXIT_FAILURE);
+			}
+			for (bmap = 0; bmap < rgd->ri.ri_length; bmap++)
+				push_block(rgblk + bmap);
 		}
 		else if (!strcasecmp(argv[i], "savemeta")) {
 			getgziplevel(argv, &i);
@@ -3177,7 +3202,8 @@ int main(int argc, char *argv[])
 	if (termlines)
 		interactive_mode();
 	else { /* print all the structures requested */
-		for (i = 0; i <= blockhist; i++) {
+		i = 0;
+		while (blockhist > 0) {
 			block = blockstack[i + 1].block;
 			if (!block)
 				break;
@@ -3189,6 +3215,7 @@ int main(int argc, char *argv[])
 				eol(0);
 			}
 			block = pop_block();
+			i++;
 		}
 	}
 	close(fd);
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Cluster-devel] [gfs2-utils PATCH 2/3] gfs2_edit: display pointer offsets for directory dinodes
  2013-07-17 15:59 [Cluster-devel] [gfs2-utils PATCH 1/3] gfs2_edit: Add new option to print all bitmaps for an rgrp Bob Peterson
@ 2013-07-17 15:59 ` Bob Peterson
  2013-07-17 15:59 ` [Cluster-devel] [gfs2-utils PATCH 3/3] gfs2_edit: fix a segfault with file names > 255 bytes Bob Peterson
  1 sibling, 0 replies; 3+ messages in thread
From: Bob Peterson @ 2013-07-17 15:59 UTC (permalink / raw)
  To: cluster-devel.redhat.com

This patch prints "pointer X" on the hex display for directory
dinodes like it does for indirect blocks.
---
 gfs2/edit/hexedit.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gfs2/edit/hexedit.c b/gfs2/edit/hexedit.c
index d67389e..f0d9789 100644
--- a/gfs2/edit/hexedit.c
+++ b/gfs2/edit/hexedit.c
@@ -954,7 +954,8 @@ static int hexdump(uint64_t startaddr, int len)
 		if (cursor_line) {
 			if (block_type == GFS2_METATYPE_IN ||
 			    ((block_type == GFS2_METATYPE_DI) &&
-			     ((struct gfs2_dinode*)bh->b_data)->di_height)) {
+			     ((struct gfs2_dinode*)bh->b_data)->di_height) ||
+			     S_ISDIR(di.di_mode)) {
 				int ptroffset = edit_row[dmode] * 16 +
 					edit_col[dmode];
 
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [Cluster-devel] [gfs2-utils PATCH 3/3] gfs2_edit: fix a segfault with file names > 255 bytes
  2013-07-17 15:59 [Cluster-devel] [gfs2-utils PATCH 1/3] gfs2_edit: Add new option to print all bitmaps for an rgrp Bob Peterson
  2013-07-17 15:59 ` [Cluster-devel] [gfs2-utils PATCH 2/3] gfs2_edit: display pointer offsets for directory dinodes Bob Peterson
@ 2013-07-17 15:59 ` Bob Peterson
  1 sibling, 0 replies; 3+ messages in thread
From: Bob Peterson @ 2013-07-17 15:59 UTC (permalink / raw)
  To: cluster-devel.redhat.com

This patch fixes a segfault in gfs2_edit caused by trying to print
file names longer than 255 bytes.
---
 gfs2/edit/gfs2hex.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gfs2/edit/gfs2hex.c b/gfs2/edit/gfs2hex.c
index 6979cd9..cc0ceb6 100644
--- a/gfs2/edit/gfs2hex.c
+++ b/gfs2/edit/gfs2hex.c
@@ -122,7 +122,7 @@ void eol(int col) /* end of line */
 void __attribute__((format (printf, 1, 2))) print_gfs2(const char *fmt, ...)
 {
 	va_list args;
-	char string[NAME_MAX];
+	char string[PATH_MAX];
 	
 	memset(string, 0, sizeof(string));
 	va_start(args, fmt);
-- 
1.8.3.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-07-17 15:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-17 15:59 [Cluster-devel] [gfs2-utils PATCH 1/3] gfs2_edit: Add new option to print all bitmaps for an rgrp Bob Peterson
2013-07-17 15:59 ` [Cluster-devel] [gfs2-utils PATCH 2/3] gfs2_edit: display pointer offsets for directory dinodes Bob Peterson
2013-07-17 15:59 ` [Cluster-devel] [gfs2-utils PATCH 3/3] gfs2_edit: fix a segfault with file names > 255 bytes Bob Peterson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.