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