summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2011-06-04 20:06:32 -0400
committerTheodore Ts'o <tytso@mit.edu>2011-06-04 20:06:32 -0400
commitbcb942c2013a92ff9a627ee79f14e52dba097538 (patch)
tree324c7416a19be231511d0ecd52947b3c60392a3e
parentb92fbed77875b447f930fdcb5ae660c16b2ec0db (diff)
downloade2fsprogs-bcb942c2013a92ff9a627ee79f14e52dba097538.tar.gz
dumpe2fs: teach dumpe2fs to be cluster aware
Add support to dumpe2fs so it can display the block bitmaps correctly for bigalloc file systems. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--misc/dumpe2fs.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/misc/dumpe2fs.c b/misc/dumpe2fs.c
index 5e0a8a2d..7a7f506d 100644
--- a/misc/dumpe2fs.c
+++ b/misc/dumpe2fs.c
@@ -71,25 +71,26 @@ static void print_range(unsigned long a, unsigned long b)
printf("%lu-%lu", a, b);
}
-static void print_free (unsigned long group, char * bitmap,
- unsigned long nbytes, unsigned long offset)
+static void print_free(unsigned long group, char * bitmap,
+ unsigned long num, unsigned long offset, int ratio)
{
int p = 0;
unsigned long i;
unsigned long j;
- offset += group * nbytes;
- for (i = 0; i < nbytes; i++)
+ offset /= ratio;
+ offset += group * num;
+ for (i = 0; i < num; i++)
if (!in_use (bitmap, i))
{
if (p)
printf (", ");
- print_number(i + offset);
- for (j = i; j < nbytes && !in_use (bitmap, j); j++)
+ print_number((i + offset) * ratio);
+ for (j = i; j < num && !in_use (bitmap, j); j++)
;
if (--j != i) {
fputc('-', stdout);
- print_number(j + offset);
+ print_number((j + offset) * ratio);
i = j;
}
p = 1;
@@ -150,10 +151,10 @@ static void list_desc (ext2_filsys fs)
int inode_blocks_per_group, old_desc_blocks, reserved_gdt;
int block_nbytes, inode_nbytes;
int has_super;
- blk_t blk_itr = fs->super->s_first_data_block;
+ blk_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block);
ext2_ino_t ino_itr = 1;
- block_nbytes = EXT2_BLOCKS_PER_GROUP(fs->super) / 8;
+ block_nbytes = EXT2_CLUSTERS_PER_GROUP(fs->super) / 8;
inode_nbytes = EXT2_INODES_PER_GROUP(fs->super) / 8;
if (fs->block_map)
@@ -241,18 +242,19 @@ static void list_desc (ext2_filsys fs)
fputs(_(" Free blocks: "), stdout);
ext2fs_get_block_bitmap_range(fs->block_map,
blk_itr, block_nbytes << 3, block_bitmap);
- print_free (i, block_bitmap,
- fs->super->s_blocks_per_group,
- fs->super->s_first_data_block);
+ print_free(i, block_bitmap,
+ fs->super->s_clusters_per_group,
+ fs->super->s_first_data_block,
+ EXT2FS_CLUSTER_RATIO(fs));
fputc('\n', stdout);
- blk_itr += fs->super->s_blocks_per_group;
+ blk_itr += fs->super->s_clusters_per_group;
}
if (inode_bitmap) {
fputs(_(" Free inodes: "), stdout);
ext2fs_get_inode_bitmap_range(fs->inode_map,
ino_itr, inode_nbytes << 3, inode_bitmap);
- print_free (i, inode_bitmap,
- fs->super->s_inodes_per_group, 1);
+ print_free(i, inode_bitmap,
+ fs->super->s_inodes_per_group, 1, 1);
fputc('\n', stdout);
ino_itr += fs->super->s_inodes_per_group;
}