diff options
author | Theodore Ts'o <tytso@mit.edu> | 2011-06-04 20:06:32 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2011-06-04 20:06:32 -0400 |
commit | bcb942c2013a92ff9a627ee79f14e52dba097538 (patch) | |
tree | 324c7416a19be231511d0ecd52947b3c60392a3e | |
parent | b92fbed77875b447f930fdcb5ae660c16b2ec0db (diff) | |
download | e2fsprogs-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.c | 32 |
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; } |