X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lib%2Fext2fs%2Fswapfs.c;h=bc6d569d68106dcecddcbe6d451c4a11dd4c1eda;hb=d1154eb460efe588eaed3d439c1caaca149fa362;hp=de7585c1794d9a5886644872dd30d891e466a111;hpb=ccc7cf032852dd5c84b227bafb481b1d158e2b5e;p=tools%2Fe2fsprogs.git diff --git a/lib/ext2fs/swapfs.c b/lib/ext2fs/swapfs.c index de7585c..bc6d569 100644 --- a/lib/ext2fs/swapfs.c +++ b/lib/ext2fs/swapfs.c @@ -9,6 +9,7 @@ * %End-Header% */ +#include "config.h" #include #if HAVE_UNISTD_H #include @@ -31,9 +32,9 @@ void ext2fs_swap_super(struct ext2_super_block * sb) sb->s_free_inodes_count = ext2fs_swab32(sb->s_free_inodes_count); sb->s_first_data_block = ext2fs_swab32(sb->s_first_data_block); sb->s_log_block_size = ext2fs_swab32(sb->s_log_block_size); - sb->s_log_frag_size = ext2fs_swab32(sb->s_log_frag_size); + sb->s_log_cluster_size = ext2fs_swab32(sb->s_log_cluster_size); sb->s_blocks_per_group = ext2fs_swab32(sb->s_blocks_per_group); - sb->s_frags_per_group = ext2fs_swab32(sb->s_frags_per_group); + sb->s_clusters_per_group = ext2fs_swab32(sb->s_clusters_per_group); sb->s_inodes_per_group = ext2fs_swab32(sb->s_inodes_per_group); sb->s_mtime = ext2fs_swab32(sb->s_mtime); sb->s_wtime = ext2fs_swab32(sb->s_wtime); @@ -76,21 +77,25 @@ void ext2fs_swap_super(struct ext2_super_block * sb) sb->s_snapshot_r_blocks_count = ext2fs_swab64(sb->s_snapshot_r_blocks_count); sb->s_snapshot_list = ext2fs_swab32(sb->s_snapshot_list); + sb->s_usr_quota_inum = ext2fs_swab32(sb->s_usr_quota_inum); + sb->s_grp_quota_inum = ext2fs_swab32(sb->s_grp_quota_inum); + sb->s_overhead_blocks = ext2fs_swab32(sb->s_overhead_blocks); + sb->s_checksum = ext2fs_swab32(sb->s_checksum); for (i=0; i < 4; i++) sb->s_hash_seed[i] = ext2fs_swab32(sb->s_hash_seed[i]); /* if journal backup is for a valid extent-based journal... */ - if (!ext2fs_extent_header_verify(sb->s_jnl_blocks, - sizeof(sb->s_jnl_blocks))) { - /* ... swap only the journal i_size */ - sb->s_jnl_blocks[16] = ext2fs_swab32(sb->s_jnl_blocks[16]); - /* and the extent data is not swapped on read */ - return; + if (ext2fs_extent_header_verify(sb->s_jnl_blocks, + sizeof(sb->s_jnl_blocks)) == 0) { + /* ... swap only the journal i_size and i_size_high, + * and the extent data is not swapped on read */ + i = 15; + } else { + /* direct/indirect journal: swap it all */ + i = 0; } - - /* direct/indirect journal: swap it all */ - for (i=0; i < 17; i++) + for (; i < 17; i++) sb->s_jnl_blocks[i] = ext2fs_swab32(sb->s_jnl_blocks[i]); } @@ -104,6 +109,11 @@ void ext2fs_swap_group_desc2(ext2_filsys fs, struct ext2_group_desc *gdp) gdp->bg_free_inodes_count = ext2fs_swab16(gdp->bg_free_inodes_count); gdp->bg_used_dirs_count = ext2fs_swab16(gdp->bg_used_dirs_count); gdp->bg_flags = ext2fs_swab16(gdp->bg_flags); + gdp->bg_exclude_bitmap_lo = ext2fs_swab32(gdp->bg_exclude_bitmap_lo); + gdp->bg_block_bitmap_csum_lo = + ext2fs_swab16(gdp->bg_block_bitmap_csum_lo); + gdp->bg_inode_bitmap_csum_lo = + ext2fs_swab16(gdp->bg_inode_bitmap_csum_lo); gdp->bg_itable_unused = ext2fs_swab16(gdp->bg_itable_unused); gdp->bg_checksum = ext2fs_swab16(gdp->bg_checksum); /* If we're 32-bit, we're done */ @@ -123,11 +133,16 @@ void ext2fs_swap_group_desc2(ext2_filsys fs, struct ext2_group_desc *gdp) gdp4->bg_used_dirs_count_hi = ext2fs_swab16(gdp4->bg_used_dirs_count_hi); gdp4->bg_itable_unused_hi = ext2fs_swab16(gdp4->bg_itable_unused_hi); + gdp4->bg_exclude_bitmap_hi = ext2fs_swab16(gdp4->bg_exclude_bitmap_hi); + gdp4->bg_block_bitmap_csum_hi = + ext2fs_swab16(gdp4->bg_block_bitmap_csum_hi); + gdp4->bg_inode_bitmap_csum_hi = + ext2fs_swab16(gdp4->bg_inode_bitmap_csum_hi); } void ext2fs_swap_group_desc(struct ext2_group_desc *gdp) { - return ext2fs_swap_group_desc2(0, gdp); + ext2fs_swap_group_desc2(0, gdp); } @@ -242,8 +257,8 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t, ext2fs_swab16 (f->osd2.linux2.l_i_uid_high); t->osd2.linux2.l_i_gid_high = ext2fs_swab16 (f->osd2.linux2.l_i_gid_high); - t->osd2.linux2.l_i_reserved2 = - ext2fs_swab32(f->osd2.linux2.l_i_reserved2); + t->osd2.linux2.l_i_checksum_lo = + ext2fs_swab32(f->osd2.linux2.l_i_checksum_lo); break; case EXT2_OS_HURD: t->osd1.hurd1.h_i_translator = @@ -277,6 +292,23 @@ void ext2fs_swap_inode_full(ext2_filsys fs, struct ext2_inode_large *t, return; } + if (extra_isize >= 2) + t->i_checksum_hi = ext2fs_swab16(f->i_checksum_hi); + if (extra_isize >= 6) + t->i_checksum_hi = ext2fs_swab32(f->i_checksum_hi); + if (extra_isize >= 10) + t->i_ctime_extra = ext2fs_swab32(f->i_ctime_extra); + if (extra_isize >= 14) + t->i_mtime_extra = ext2fs_swab32(f->i_mtime_extra); + if (extra_isize >= 18) + t->i_atime_extra = ext2fs_swab32(f->i_atime_extra); + if (extra_isize >= 22) + t->i_crtime = ext2fs_swab32(f->i_crtime); + if (extra_isize >= 26) + t->i_crtime_extra = ext2fs_swab32(f->i_crtime_extra); + if (extra_isize >= 30) + t->i_version_hi = ext2fs_swab32(f->i_version_hi); + i = sizeof(struct ext2_inode) + extra_isize + sizeof(__u32); if (bufsize < (int) i) return; /* no space for EA magic */