Fedora 9 (and perhaps other distros) has changed ext2fs in a way that is not backwards compatible (changing the inode size from 128bytes to 256bytes). This renders ext2fs partitions unmountable by FreeBSD. Fix: Formatted the partition with gparted (under debian etch) prior to running the Fedora 9 installer, and made sure to not format the partition during the installation. How-To-Repeat: Install Fedora 9 and les the installer format its destination partition as ext3
Responsible Changed From-To: freebsd-i386->freebsd-fs This doesn't sound -i386 specific
Here is a simple patch that queries the inode size, rather than assuming 128. This may be a rather naive way to do this (querying it every time from (s)->s_es->s_inode_size), but it does seem to work. Perhaps there is a smarter way of doing this (setting something at mount time?). I tested this with mke2fs -I 128, mke2fs (defaults to -I 256 with the latest e2fsprogs port), and -I 512. Thanks, Josh diff -ud ext2fs.orig/ext2_fs.h ext2fs/ext2_fs.h --- ext2fs.orig/ext2_fs.h 2005-06-16 06:51:38.000000000 +0000 +++ ext2fs/ext2_fs.h 2008-09-03 14:10:27.000000000 +0000 @@ -150,7 +150,7 @@ #else /* !notyet */ #define EXT2_INODES_PER_BLOCK(s) ((s)->s_inodes_per_block) /* Should be sizeof(struct ext2_inode): */ -#define EXT2_INODE_SIZE 128 +#define EXT2_INODE_SIZE(s) ((s)->s_es->s_inode_size) #define EXT2_FIRST_INO 11 #endif /* notyet */ diff -ud ext2fs.orig/ext2_inode.c ext2fs/ext2_inode.c --- ext2fs.orig/ext2_inode.c 2006-09-26 04:15:58.000000000 +0000 +++ ext2fs/ext2_inode.c 2008-09-03 13:54:49.000000000 +0000 @@ -91,7 +91,7 @@ return (error); } ext2_i2ei(ip, (struct ext2_inode *)((char *)bp->b_data + - EXT2_INODE_SIZE * ino_to_fsbo(fs, ip->i_number))); + EXT2_INODE_SIZE(fs) * ino_to_fsbo(fs, ip->i_number))); if (waitfor && (vp->v_mount->mnt_kern_flag & MNTK_ASYNC) == 0) return (bwrite(bp)); else { diff -ud ext2fs.orig/ext2_vfsops.c ext2fs/ext2_vfsops.c --- ext2fs.orig/ext2_vfsops.c 2008-04-03 18:51:13.000000000 +0000 +++ ext2fs/ext2_vfsops.c 2008-09-03 13:55:37.000000000 +0000 @@ -424,7 +424,7 @@ V(s_frags_per_group) fs->s_inodes_per_group = es->s_inodes_per_group; V(s_inodes_per_group) - fs->s_inodes_per_block = fs->s_blocksize / EXT2_INODE_SIZE; + fs->s_inodes_per_block = fs->s_blocksize / EXT2_INODE_SIZE(fs); V(s_inodes_per_block) fs->s_itb_per_group = fs->s_inodes_per_group /fs->s_inodes_per_block; V(s_itb_per_group) @@ -578,7 +578,7 @@ return (error); } ext2_ei2i((struct ext2_inode *) ((char *)bp->b_data + - EXT2_INODE_SIZE * ino_to_fsbo(fs, ip->i_number)), ip); + EXT2_INODE_SIZE(fs) * ino_to_fsbo(fs, ip->i_number)), ip); brelse(bp); VOP_UNLOCK(vp, 0, td); vrele(vp); @@ -1013,7 +1013,7 @@ return (error); } /* convert ext2 inode to dinode */ - ext2_ei2i((struct ext2_inode *) ((char *)bp->b_data + EXT2_INODE_SIZE * + ext2_ei2i((struct ext2_inode *) ((char *)bp->b_data + EXT2_INODE_SIZE(fs) * ino_to_fsbo(fs, ino)), ip); ip->i_block_group = ino_to_cg(fs, ino); ip->i_next_alloc_block = 0;
Sorry, it appears the previous patch was munged by gmail. I'm trying it as an attachment this time. I apologize in advance if this attempt is also munged. Josh
Sigh. Apologies again. Let's try it this way. Here is the patch: http://pflog.net/~floyd/ext2fs.diff Thanks, Josh
From reading of the release notes it looks like this change was made in January 2008. http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.40.10 I tested the patch that is online from Josh and it works. Is anyone willing to step up and commit this? Seems like a simple enough fix and will start to hit more and more people as updated versions of e2fsprogs becomes more common. Thanks, Josh, for providing a fix for this. -- WXS
Hi, I'm facing the same issue. I have an external HD, where I installed Linux Ubuntu a long time ago. I performed recently an upgrade to latest Ubuntu, what reformatted partition da0s1. Old partitions, like da0s2 (home), remain working fine w/ FreeBSD. I checked Inode size paramenter in both: musashi# tune2fs -l /dev/da0s1 | grep -i "inode size" Inode size: 256 musashi# tune2fs -l /dev/da0s2 | grep -i "inode size" Inode size: 128 I'm using the e2fsprogs version you recommended, 1.41.0, in a FreeBSD-7.1: musashi# pkg_glob "*e2fs*" e2fsprogs-1.41.0 musashi# uname -a FreeBSD musashi.br.am.ericsson.se 7.1-RELEASE FreeBSD 7.1-RELEASE #23: Sat Jan 3 23:41:26 BRST 2009 root@musashi.br.am.ericsson.se:/usr/obj/usr/src/sys/MUSASHI i386 So programs like fsck.ext3 are working fine, finding and checking filesyste= ms: e2fsck 1.41.0 (10-Jul-2008) /dev/da0s1: clean, 130703/305824 files, 796572/1220932 blocks musashi# /usr/local/sbin/fsck.ext3 /dev/da0s2 e2fsck 1.41.0 (10-Jul-2008) /dev/da0s2: clean, 219500/12222464 files, 21270465/24414783 blocks So da0s1 isn't accessible while da0s2 is: musashi# mkdir /mnt/da0s{1,2} musashi# mount_ext2fs /dev/da0s1 /mnt/da0s1 musashi# mount_ext2fs /dev/da0s2 /mnt/da0s2 musashi# ls /mnt/da0s1 ls: /mnt/da0s1: Bad file descriptor musashi# ls /mnt/da0s2 backup fotos helio lost+found tmp x I even tried to unload/load ext2fs.ko module, but I didn't see any progress on that. So I believe the issue is reproducible and remains despite the new e2fsprogs release. I'll try the suggested patch and see if it works. --=20 []=B4s Helio Loureiro
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, Paul! Can you check, please, if recent current suffers from the same problem? The patch I've committed today should solve this issue. I can give you a patch for 7.1 if you're in position to rebuild the kernel. Thanks! - -- Stanislav Sedov ST4096-RIPE -----BEGIN PGP SIGNATURE----- iEYEARECAAYFAklzZYoACgkQK/VZk+smlYGE/ACdE+ybZzJxb/5Nb1Qi1CyILVtW 6aAAnieoGkMpBCoFvwKAE1yVWgxu5pbA =Nn7G -----END PGP SIGNATURE----- !DSPAM:49736588967004808450424!
State Changed From-To: open->feedback Ask for submitter test.
Environment: FreeBSD cage.local 7.1-STABLE FreeBSD 7.1-STABLE #1: Thu Jan 8 20:10:28 PST 2009 root@cage.local:/mnt/space/usr/obj.i386/mnt/space/usr/src/sys/CAGE7-SMP i386 Just another data point, the patch (http://pflog.net/~floyd/ext2fs.diff, md5:3dd5125eeb591e9c53930beb216d523e) fixes mounting a ext3 partition from an Ubuntu 9.4 install. Confirmed with tune2fs that the partition has 256-byte inode size. Tested by applying patch and rebuilding in /usr/src/sys/modules/ext2fs.
State Changed From-To: feedback->patched Patched in head / stable/8 by r187395 and in stable/7 by r194495.
State Changed From-To: patched->closed Fixed in all supported branches.