linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fix debugfs output for flex_bg bitmap offsets
@ 2010-11-25  9:57 Andreas Dilger
  2010-11-25 19:09 ` Andreas Dilger
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Dilger @ 2010-11-25  9:57 UTC (permalink / raw)
  To: Theodore Tso; +Cc: Ext4 Developers List

When running debugfs on a filesystem formatted with flex_bg, it prints out the relative offsets for the bitmaps and inode table badly on 64-bit systems, because the offset is computed as a large positive number instead of being a negative numer (which will not be printed at all):

Group 1: (Blocks 0x8000-0xffff) [INODE_UNINIT, ITABLE_ZEROED]
 Block bitmap at 0x0102 (+4294934786), Inode bitmap at 0x0202 (+4294935042)
 Inode table at 0x037e-0x03fa (+4294935422)

The attached patch prints out the relative offsets for flex_bg groups as the offset within the reported group.  This makes it more clear where the metadata is located, rather than simply printing some large negative number.

Group 1: (Blocks 0x8000-0xffff) [INODE_UNINIT, ITABLE_ZEROED]
 Block bitmap at 0x0102 (group 0 +258), Inode bitmap at 0x0202 (group 0 +514)
 Inode table at 0x037e-0x03fa (group 0 +894)

Signed-off-by: Andreas Dilger <adilger@dilger.ca>
--


Cheers, Andreas





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

* Re: [PATCH] fix debugfs output for flex_bg bitmap offsets
  2010-11-25  9:57 [PATCH] fix debugfs output for flex_bg bitmap offsets Andreas Dilger
@ 2010-11-25 19:09 ` Andreas Dilger
  2010-11-27  0:33   ` Andreas Dilger
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Dilger @ 2010-11-25 19:09 UTC (permalink / raw)
  To: Theodore Tso; +Cc: Ext4 Developers List

[-- Attachment #1: Type: text/plain, Size: 1074 bytes --]

...with patch this time...

On 2010-11-25, at 02:57, Andreas Dilger wrote:
> When running debugfs on a filesystem formatted with flex_bg, it prints out the relative offsets for the bitmaps and inode table badly on 64-bit systems, because the offset is computed as a large positive number instead of being a negative numer (which will not be printed at all):
> 
> Group 1: (Blocks 0x8000-0xffff) [INODE_UNINIT, ITABLE_ZEROED]
> Block bitmap at 0x0102 (+4294934786), Inode bitmap at 0x0202 (+4294935042)
> Inode table at 0x037e-0x03fa (+4294935422)
> 
> The attached patch prints out the relative offsets for flex_bg groups as the offset within the reported group.  This makes it more clear where the metadata is located, rather than simply printing some large negative number.
> 
> Group 1: (Blocks 0x8000-0xffff) [INODE_UNINIT, ITABLE_ZEROED]
> Block bitmap at 0x0102 (group 0 +258), Inode bitmap at 0x0202 (group 0 +514)
> Inode table at 0x037e-0x03fa (group 0 +894)
> 
> Signed-off-by: Andreas Dilger <adilger@dilger.ca>
> --


Cheers, Andreas





[-- Attachment #2: e2fsprogs-debugfs_flexbg.patch --]
[-- Type: application/octet-stream, Size: 2082 bytes --]

diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index a70cc4e..a9ae299 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -126,10 +126,22 @@ static void print_bg_opts(ext2_filsys fs, dgrp_t i)
 	fputc('\n', stdout);
 }
 
+static void print_bg_rel_offset(ext2_filsys fs, blk64_t block,
+				blk64_t first_block, blk64_t last_block)
+{
+	if (block >= first_block && block <= last_block) {
+		printf(" (+%u)", (unsigned)(block - first_block));
+	} else if (fs->super->s_feature_incompat &
+		   EXT4_FEATURE_INCOMPAT_FLEX_BG) {
+		dgrp_t flex_grp = ext2fs_group_of_blk(fs, block);
+		printf(" (group %u +%u)", flex_grp,
+		       (unsigned)(block-ext2fs_group_first_block(fs,flex_grp)));
+	}
+}
+
 static void list_desc (ext2_filsys fs)
 {
 	unsigned long i;
-	long diff;
 	blk_t	first_block, last_block;
 	blk_t	super_blk, old_desc_blk, new_desc_blk;
 	char *block_bitmap=NULL, *inode_bitmap=NULL;
@@ -199,21 +211,21 @@ static void list_desc (ext2_filsys fs)
 			fputc('\n', stdout);
 		fputs(_("  Block bitmap at "), stdout);
 		print_number(fs->group_desc[i].bg_block_bitmap);
-		diff = fs->group_desc[i].bg_block_bitmap - first_block;
-		if (diff >= 0)
-			printf(" (+%ld)", diff);
+		print_bg_rel_offset(fs, fs->group_desc[i].bg_block_bitmap,
+				    first_block, last_block);
+
 		fputs(_(", Inode bitmap at "), stdout);
 		print_number(fs->group_desc[i].bg_inode_bitmap);
-		diff = fs->group_desc[i].bg_inode_bitmap - first_block;
-		if (diff >= 0)
-			printf(" (+%ld)", diff);
+		print_bg_rel_offset(fs, fs->group_desc[i].bg_inode_bitmap,
+				    first_block, last_block);
+
 		fputs(_("\n  Inode table at "), stdout);
 		print_range(fs->group_desc[i].bg_inode_table,
 			    fs->group_desc[i].bg_inode_table +
 			    inode_blocks_per_group - 1);
-		diff = fs->group_desc[i].bg_inode_table - first_block;
-		if (diff > 0)
-			printf(" (+%ld)", diff);
+		print_bg_rel_offset(fs, fs->group_desc[i].bg_inode_table,
+				    first_block, last_block);
+
 		printf (_("\n  %u free blocks, %u free inodes, "
 			  "%u directories%s"),
 			fs->group_desc[i].bg_free_blocks_count,

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

* Re: [PATCH] fix debugfs output for flex_bg bitmap offsets
  2010-11-25 19:09 ` Andreas Dilger
@ 2010-11-27  0:33   ` Andreas Dilger
  2010-12-06  3:16     ` Ted Ts'o
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Dilger @ 2010-11-27  0:33 UTC (permalink / raw)
  To: Andreas Dilger; +Cc: Theodore Tso, Ext4 Developers List

[-- Attachment #1: Type: text/plain, Size: 1407 bytes --]

On 2010-11-25, at 12:09, Andreas Dilger wrote:
> ...with patch this time...

Attached is an updated patch that makes the output a bit more verbose (to avoid line wraps) and doesn't fail the m_raid_opts test (which complains when "(+0)" is printed for each inode table).

> On 2010-11-25, at 02:57, Andreas Dilger wrote:
>> When running debugfs on a filesystem formatted with flex_bg, it prints out the relative offsets for the bitmaps and inode table badly on 64-bit systems, because the offset is computed as a large positive number instead of being a negative numer (which will not be printed at all):
>> 
>> Group 1: (Blocks 0x8000-0xffff) [INODE_UNINIT, ITABLE_ZEROED]
>> Block bitmap at 0x0102 (+4294934786), Inode bitmap at 0x0202 (+4294935042)
>> Inode table at 0x037e-0x03fa (+4294935422)
>> 
>> The attached patch prints out the relative offsets for flex_bg groups as the offset within the reported group.  This makes it more clear where the metadata is located, rather than simply printing some large negative number.
>> 
>> Group 1: (Blocks 0x8000-0xffff) [INODE_UNINIT, ITABLE_ZEROED]
>> Block bitmap at 0x0102 (group 0 +258), Inode bitmap at 0x0202 (group 0 +514)
>> Inode table at 0x037e-0x03fa (group 0 +894)
>> 
>> Signed-off-by: Andreas Dilger <adilger@dilger.ca>
>> --
> 


Cheers, Andreas
--
Andreas Dilger
Lustre Technical Lead
Oracle Corporation Canada Inc.

[-- Attachment #2: e2fsprogs-dumpe2fs_flex.patch --]
[-- Type: application/octet-stream, Size: 2113 bytes --]

diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index a70cc4e..c39c713 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -126,10 +126,22 @@ static void print_bg_opts(ext2_filsys fs, dgrp_t i)
 	fputc('\n', stdout);
 }
 
+static void print_bg_rel_offset(ext2_filsys fs, blk64_t block, int itable,
+				blk64_t first_block, blk64_t last_block)
+{
+	if (block >= (first_block + !!itable) && block <= last_block) {
+		printf(" (+%u)", (unsigned)(block - first_block));
+	} else if (fs->super->s_feature_incompat &
+		   EXT4_FEATURE_INCOMPAT_FLEX_BG) {
+		dgrp_t flex_grp = ext2fs_group_of_blk(fs, block);
+		printf(" (grp %u+%u)", flex_grp,
+		       (unsigned)(block-ext2fs_group_first_block(fs,flex_grp)));
+	}
+}
+
 static void list_desc (ext2_filsys fs)
 {
 	unsigned long i;
-	long diff;
 	blk_t	first_block, last_block;
 	blk_t	super_blk, old_desc_blk, new_desc_blk;
 	char *block_bitmap=NULL, *inode_bitmap=NULL;
@@ -199,21 +211,21 @@ static void list_desc (ext2_filsys fs)
 			fputc('\n', stdout);
 		fputs(_("  Block bitmap at "), stdout);
 		print_number(fs->group_desc[i].bg_block_bitmap);
-		diff = fs->group_desc[i].bg_block_bitmap - first_block;
-		if (diff >= 0)
-			printf(" (+%ld)", diff);
+		print_bg_rel_offset(fs, fs->group_desc[i].bg_block_bitmap, 0,
+				    first_block, last_block);
+
 		fputs(_(", Inode bitmap at "), stdout);
 		print_number(fs->group_desc[i].bg_inode_bitmap);
-		diff = fs->group_desc[i].bg_inode_bitmap - first_block;
-		if (diff >= 0)
-			printf(" (+%ld)", diff);
+		print_bg_rel_offset(fs, fs->group_desc[i].bg_inode_bitmap, 0,
+				    first_block, last_block);
+
 		fputs(_("\n  Inode table at "), stdout);
 		print_range(fs->group_desc[i].bg_inode_table,
 			    fs->group_desc[i].bg_inode_table +
 			    inode_blocks_per_group - 1);
-		diff = fs->group_desc[i].bg_inode_table - first_block;
-		if (diff > 0)
-			printf(" (+%ld)", diff);
+		print_bg_rel_offset(fs, fs->group_desc[i].bg_inode_table, 1,
+				    first_block, last_block);
+
 		printf (_("\n  %u free blocks, %u free inodes, "
 			  "%u directories%s"),
 			fs->group_desc[i].bg_free_blocks_count,

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

* Re: [PATCH] fix debugfs output for flex_bg bitmap offsets
  2010-11-27  0:33   ` Andreas Dilger
@ 2010-12-06  3:16     ` Ted Ts'o
  0 siblings, 0 replies; 4+ messages in thread
From: Ted Ts'o @ 2010-12-06  3:16 UTC (permalink / raw)
  To: Andreas Dilger; +Cc: Andreas Dilger, Ext4 Developers List

On Fri, Nov 26, 2010 at 05:33:27PM -0700, Andreas Dilger wrote:
> On 2010-11-25, at 12:09, Andreas Dilger wrote:
> > ...with patch this time...
> 
> Attached is an updated patch that makes the output a bit more
> verbose (to avoid line wraps) and doesn't fail the m_raid_opts test
> (which complains when "(+0)" is printed for each inode table).

Every time you write code of the form:

      if (block >= first_block + !!itable && ...)

Gcc kills a kitten.  Please, think of the kittens....

I rewrote that code as follows:  

	if ((block >= first_block) && (block <= last_block)) {
		if (itable && block == first_block)
			return;
		printf(" (+%u)", (unsigned)(block - first_block));
	} else if ...


I also changed the output to use "(bg #16 + 4)" since I think it's a
bit easier to understand than "(grp 16+4)".

Otherwise, I've added it to the e2fsprogs maint branch, thanks.

	   	      	    		  - Ted

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

end of thread, other threads:[~2010-12-06  3:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-25  9:57 [PATCH] fix debugfs output for flex_bg bitmap offsets Andreas Dilger
2010-11-25 19:09 ` Andreas Dilger
2010-11-27  0:33   ` Andreas Dilger
2010-12-06  3:16     ` Ted Ts'o

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).