PERFORCE change 180402 for review
Zheng Liu
lz at FreeBSD.org
Fri Jul 2 04:51:57 UTC 2010
http://p4web.freebsd.org/@@180402?ac=10
Change 180402 by lz at gnehzuil-freebsd on 2010/07/02 04:51:46
Now ext2fs can read ext4 file system w/o some new features.
* Now it can read data from ext4 file system in some features.
Features:
+ has_journal
+ filetype
+ sparse_super
+ huge_file
* Now ext2fs use old group descriptor. So it just can read 32 bits
bitmap and inode table.
Affected files ...
.. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_vfsops.c#5 edit
.. //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2fs.h#3 edit
Differences ...
==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2_vfsops.c#5 (text+ko) ====
@@ -335,7 +335,6 @@
} else {
fs->e2fs_first_inode = es->e2fs_first_ino;
fs->e2fs_isize = es->e2fs_inode_size;
-
/*
* Simple sanity check for superblock inode size value.
*/
@@ -351,8 +350,9 @@
fs->e2fs_itpg = fs->e2fs_ipg /fs->e2fs_ipb;
fs->e2fs_descpb = fs->e2fs_bsize / sizeof (struct ext2_gd);
/* s_resuid / s_resgid ? */
- fs->e2fs_gcount = (es->e2fs_bcount_lo - es->e2fs_first_dblock +
- EXT2_BLOCKS_PER_GROUP(fs) - 1) / EXT2_BLOCKS_PER_GROUP(fs);
+ fs->e2fs_gcount = (((int64_t)(es->e2fs_bcount_hi) << 32 | es->e2fs_bcount_lo)
+ - es->e2fs_first_dblock + EXT2_BLOCKS_PER_GROUP(fs) - 1) /
+ EXT2_BLOCKS_PER_GROUP(fs);
db_count = (fs->e2fs_gcount + EXT2_DESC_PER_BLOCK(fs) - 1) /
EXT2_DESC_PER_BLOCK(fs);
fs->e2fs_gdbcount = db_count;
@@ -386,7 +386,7 @@
}
fs->e2fs_total_dir = 0;
for (i=0; i < fs->e2fs_gcount; i++){
- fs->e2fs_total_dir += fs->e2fs_gd[i].ext2bgd_ndirs_lo;
+ fs->e2fs_total_dir += (fs->e2fs_gd[i].ext2bgd_ndirs_lo);
fs->e2fs_contigdirs[i] = 0;
}
if (es->e2fs_rev == E2FS_REV0 ||
@@ -753,9 +753,12 @@
sbp->f_bsize = EXT2_FRAG_SIZE(fs);
sbp->f_iosize = EXT2_BLOCK_SIZE(fs);
- sbp->f_blocks = fs->e2fs->e2fs_bcount_lo - overhead;
- sbp->f_bfree = fs->e2fs->e2fs_fbcount_lo;
- sbp->f_bavail = sbp->f_bfree - fs->e2fs->e2fs_rbcount_lo;
+ sbp->f_blocks = ((int64_t)(fs->e2fs->e2fs_bcount_hi) << 32 |
+ fs->e2fs->e2fs_bcount_lo) - overhead;
+ sbp->f_bfree = ((int64_t)(fs->e2fs->e2fs_fbcount_hi) << 32 |
+ fs->e2fs->e2fs_fbcount_lo);
+ sbp->f_bavail = sbp->f_bfree - ((int64_t)(fs->e2fs->e2fs_rbcount_hi) << 32 |
+ fs->e2fs->e2fs_rbcount_lo);
sbp->f_files = fs->e2fs->e2fs_icount;
sbp->f_ffree = fs->e2fs->e2fs_ficount;
return (0);
@@ -947,9 +950,9 @@
ip->i_db[i] = 0;
}
-/*
+
ext2_print_inode(ip);
-*/
+
bqrelse(bp);
/*
==== //depot/projects/soc2010/ext4fs/src/sys/fs/ext2fs/ext2fs.h#3 (text+ko) ====
@@ -320,6 +320,7 @@
u_int16_t ext2bgd_nifree_lo; /* number of free inodes */
u_int16_t ext2bgd_ndirs_lo; /* number of directories */
u_int16_t ext2bgd_flags; /* EXT4_BG_flags */
+#if 0
u_int32_t reserved[2];
u_int16_t ext2bgd_i_tables_unused_lo; /* number of unused inodes */
u_int16_t ext2bgd_chksum; /* crc16 checksum */
@@ -330,6 +331,7 @@
u_int16_t ext2bgd_nifree_hi; /* number of free inodes MSB */
u_int16_t ext2bgd_ndirs_hi; /* number of directories MSB */
u_int16_t ext2bgd_i_tables_unused_hi; /* number of unused inodes MSB */
+#endif
u_int32_t reserved2[3];
};
More information about the p4-projects
mailing list