From: Theodore Ts'o Date: Sun, 5 Jun 2011 00:24:36 +0000 (-0400) Subject: Merge branch 'maint' into next X-Git-Tag: v1.42-WIP-0702~32 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=6a6337c3df7c982eb888764d585ec483a51af16e;p=tools%2Fe2fsprogs.git Merge branch 'maint' into next Conflicts: lib/ext2fs/bitmaps.c lib/ext2fs/rw_bitmaps.c misc/dumpe2fs.c --- 6a6337c3df7c982eb888764d585ec483a51af16e diff --cc lib/ext2fs/bitmaps.c index c53d61e,6f758f0..4f61d27 --- a/lib/ext2fs/bitmaps.c +++ b/lib/ext2fs/bitmaps.c @@@ -91,18 -78,9 +91,18 @@@ errcode_t ext2fs_allocate_block_bitmap( fs->write_bitmaps = ext2fs_write_bitmaps; start = fs->super->s_first_data_block; - end = fs->super->s_blocks_count-1; - real_end = (EXT2_CLUSTERS_PER_GROUP(fs->super) - * fs->group_desc_count)-1 + start; + end = ext2fs_blocks_count(fs->super)-1; - real_end = ((__u64) EXT2_BLOCKS_PER_GROUP(fs->super) ++ real_end = ((__u64) EXT2_CLUSTERS_PER_GROUP(fs->super) + * (__u64) fs->group_desc_count)-1 + start; + + if (fs->flags & EXT2_FLAG_64BITS) + return (ext2fs_alloc_generic_bmap(fs, + EXT2_ET_MAGIC_BLOCK_BITMAP64, + EXT2FS_BMAP64_BITARRAY, + start, end, real_end, descr, ret)); + + if ((end > ~0U) || (real_end > ~0U)) + return EXT2_ET_CANT_USE_LEGACY_BITMAPS; return (ext2fs_make_generic_bitmap(EXT2_ET_MAGIC_BLOCK_BITMAP, fs, start, end, real_end, diff --cc lib/ext2fs/ext2fs.h index 888f425,5379422..f7d99bb --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@@ -207,10 -195,10 +207,10 @@@ struct struct_ext2_filsys char * device_name; struct ext2_super_block * super; unsigned int blocksize; - int clustersize; + int cluster_ratio_bits; dgrp_t group_desc_count; unsigned long desc_blocks; - struct ext2_group_desc * group_desc; + struct opaque_ext2_group_desc * group_desc; int inode_blocks_per_group; ext2fs_inode_bitmap inode_map; ext2fs_block_bitmap block_map; diff --cc lib/ext2fs/rw_bitmaps.c index 3031b7d,48f06e0..f8c8a9f --- a/lib/ext2fs/rw_bitmaps.c +++ b/lib/ext2fs/rw_bitmaps.c @@@ -36,8 -36,8 +36,8 @@@ static errcode_t write_bitmaps(ext2_fil errcode_t retval; char *block_buf, *inode_buf; int csum_flag = 0; - blk_t blk; - blk_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); + blk64_t blk; - blk64_t blk_itr = fs->super->s_first_data_block; ++ blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); ext2_ino_t ino_itr = 1; EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); @@@ -83,9 -83,10 +83,10 @@@ if (i == fs->group_desc_count - 1) { /* Force bitmap padding for the last group */ - nbits = ((ext2fs_blocks_count(fs->super) + nbits = EXT2FS_NUM_B2C(fs, - ((fs->super->s_blocks_count - - fs->super->s_first_data_block) - % EXT2_BLOCKS_PER_GROUP(fs->super))); ++ ((ext2fs_blocks_count(fs->super) + - (__u64) fs->super->s_first_data_block) - % (__u64) EXT2_BLOCKS_PER_GROUP(fs->super)); ++ % (__u64) EXT2_BLOCKS_PER_GROUP(fs->super))); if (nbits) for (j = nbits; j < fs->blocksize * 8; j++) ext2fs_set_bit(j, block_buf); @@@ -146,9 -147,9 +147,9 @@@ static errcode_t read_bitmaps(ext2_fils int csum_flag = 0; int do_image = fs->flags & EXT2_FLAG_IMAGE_FILE; unsigned int cnt; - blk_t blk; - blk_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); - blk_t blk_cnt; + blk64_t blk; - blk64_t blk_itr = fs->super->s_first_data_block; ++ blk64_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); + blk64_t blk_cnt; ext2_ino_t ino_itr = 1; ext2_ino_t ino_cnt; @@@ -219,10 -220,10 +220,10 @@@ } blk = (fs->image_header->offset_blockmap / fs->blocksize); - blk_cnt = (blk64_t)EXT2_BLOCKS_PER_GROUP(fs->super) * - blk_cnt = EXT2_CLUSTERS_PER_GROUP(fs->super) * ++ blk_cnt = (blk64_t)EXT2_CLUSTERS_PER_GROUP(fs->super) * fs->group_desc_count; while (block_nbytes > 0) { - retval = io_channel_read_blk(fs->image_io, blk++, + retval = io_channel_read_blk64(fs->image_io, blk++, 1, block_bitmap); if (retval) goto cleanup; diff --cc misc/dumpe2fs.c index c01ffe5,7a7f506..9a0dd46 --- a/misc/dumpe2fs.c +++ b/misc/dumpe2fs.c @@@ -63,16 -63,16 +63,16 @@@ static void print_number(unsigned long printf("%lu", num); } -static void print_range(unsigned long a, unsigned long b) +static void print_range(unsigned long long a, unsigned long long b) { if (hex_format) - printf("0x%04lx-0x%04lx", a, b); + printf("0x%llx-0x%llx", a, b); else - printf("%lu-%lu", a, b); + printf("%llu-%llu", 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; @@@ -150,10 -151,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; - blk64_t blk_itr = fs->super->s_first_data_block; - blk_t blk_itr = EXT2FS_B2C(fs, fs->super->s_first_data_block); ++ blk64_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) @@@ -212,44 -213,48 +213,45 @@@ if (has_super) fputc('\n', stdout); fputs(_(" Block bitmap at "), stdout); - print_number(fs->group_desc[i].bg_block_bitmap); - print_bg_rel_offset(fs, fs->group_desc[i].bg_block_bitmap, 0, + print_number(ext2fs_block_bitmap_loc(fs, i)); + print_bg_rel_offset(fs, ext2fs_block_bitmap_loc(fs, i), 0, first_block, last_block); - fputs(_(", Inode bitmap at "), stdout); - print_number(fs->group_desc[i].bg_inode_bitmap); - print_bg_rel_offset(fs, fs->group_desc[i].bg_inode_bitmap, 0, + print_number(ext2fs_inode_bitmap_loc(fs, i)); + print_bg_rel_offset(fs, ext2fs_inode_bitmap_loc(fs, i), 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 + + print_range(ext2fs_inode_table_loc(fs, i), + ext2fs_inode_table_loc(fs, i) + inode_blocks_per_group - 1); - print_bg_rel_offset(fs, fs->group_desc[i].bg_inode_table, 1, + print_bg_rel_offset(fs, ext2fs_inode_table_loc(fs, i), 1, first_block, last_block); - printf (_("\n %u free blocks, %u free inodes, " "%u directories%s"), - fs->group_desc[i].bg_free_blocks_count, - fs->group_desc[i].bg_free_inodes_count, - fs->group_desc[i].bg_used_dirs_count, - fs->group_desc[i].bg_itable_unused ? "" : "\n"); - if (fs->group_desc[i].bg_itable_unused) + ext2fs_bg_free_blocks_count(fs, i), + ext2fs_bg_free_inodes_count(fs, i), + ext2fs_bg_used_dirs_count(fs, i), + ext2fs_bg_itable_unused(fs, i) ? "" : "\n"); + if (ext2fs_bg_itable_unused(fs, i)) printf (_(", %u unused inodes\n"), - fs->group_desc[i].bg_itable_unused); + ext2fs_bg_itable_unused(fs, i)); if (block_bitmap) { fputs(_(" Free blocks: "), stdout); - ext2fs_get_block_bitmap_range(fs->block_map, + ext2fs_get_block_bitmap_range2(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, + ext2fs_get_inode_bitmap_range2(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; }