From owner-p4-projects@FreeBSD.ORG Fri Jul 2 04:51:57 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F2EE51065674; Fri, 2 Jul 2010 04:51:56 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8F04F106564A for ; Fri, 2 Jul 2010 04:51:56 +0000 (UTC) (envelope-from lz@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 7CE1B8FC0A for ; Fri, 2 Jul 2010 04:51:56 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o624pu7b046372 for ; Fri, 2 Jul 2010 04:51:56 GMT (envelope-from lz@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o624puKt046370 for perforce@freebsd.org; Fri, 2 Jul 2010 04:51:56 GMT (envelope-from lz@FreeBSD.org) Date: Fri, 2 Jul 2010 04:51:56 GMT Message-Id: <201007020451.o624puKt046370@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to lz@FreeBSD.org using -f From: Zheng Liu To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 180402 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Jul 2010 04:51:57 -0000 http://p4web.freebsd.org/@@180402?ac=10 Change 180402 by lz@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]; };