Bug 185448 - [ext2fs] ext2fs corrupt dir inode, FreeBSD 10 RC3
Summary: [ext2fs] ext2fs corrupt dir inode, FreeBSD 10 RC3
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: Unspecified
Hardware: Any Any
: Normal Affects Only Me
Assignee: Pedro F. Giffuni
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-01-03 16:40 UTC by Bob Sullivan
Modified: 2014-01-14 22:51 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Bob Sullivan 2014-01-03 16:40:00 UTC
After I upgraded from FreeBSD 8 to 10 RC3 (dual boot Linux/FreeBSD), on Linux, I noticed this error in dmesg (which never appeared on FreeBSD 8):

syslog.1:Dec 29 14:49:56 pc kernel: [ 4969.426736] EXT3-fs (sda5): warning: dx_probe: Unrecognised inode hash code 44
syslog.1:Dec 29 14:49:56 pc kernel: [ 4969.426748] EXT3-fs (sda5): warning: dx_probe: Corrupt dir inode 4194305, running e2fsck is recommended.

However, I compared the directory against a backup and no data was lost, and Linux fsck didn't find any real problems (this bug seems benign).

bobsullivan1960 /-at-/ gmail /-/ com

Fix: 

N/A
How-To-Repeat: Isn't reproducible, unfortuantely.
Comment 1 Mark Linimon freebsd_committer freebsd_triage 2014-01-06 00:12:07 UTC
Responsible Changed
From-To: freebsd-bugs->freebsd-fs

Over to maintainer(s).
Comment 2 Pedro F. Giffuni freebsd_committer freebsd_triage 2014-01-11 01:00:12 UTC
Responsible Changed
From-To: freebsd-fs->pfg

I think it is some leftover from the (disabled) htree support. 
It shouldn't be of consequence so I will get a fix after 10-Release. 
Grab.
Comment 3 dfilter service freebsd_committer freebsd_triage 2014-01-11 15:19:11 UTC
Author: pfg
Date: Sat Jan 11 15:19:04 2014
New Revision: 260545
URL: http://svnweb.freebsd.org/changeset/base/260545

Log:
  ext2fs: fix inode flag conversion.
  
  After r252890 we are naively attempting to pass through the
  inode flags.  This is technically incorrect as the ext2
  inode flags don't match the UFS/system values used in
  FreeBSD and a clean conversion is needed.
  
  Some filtering was left in place so the change didn't cause
  significant changes in FreeBSD but some of the garbage passed
  is likely to be the cause for warning messages in linux.
  
  Fix the issue by resetting the flags before conversion as was
  done previously. This also means we will not pass the EXT4_*
  inode flags into FreeBSD's inode.
  
  PR:		kern/185448
  MFC after:	3 days

Modified:
  head/sys/fs/ext2fs/ext2_inode_cnv.c

Modified: head/sys/fs/ext2fs/ext2_inode_cnv.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_inode_cnv.c	Sat Jan 11 15:01:30 2014	(r260544)
+++ head/sys/fs/ext2fs/ext2_inode_cnv.c	Sat Jan 11 15:19:04 2014	(r260545)
@@ -104,7 +104,7 @@ ext2_ei2i(struct ext2fs_dinode *ei, stru
 		ip->i_birthtime = ei->e2di_crtime;
 		ip->i_birthnsec = XTIME_TO_NSEC(ei->e2di_crtime_extra);
 	}
-	ip->i_flags = ei->e2di_flags;
+	ip->i_flags = 0;
 	ip->i_flags |= (ei->e2di_flags & EXT2_APPEND) ? SF_APPEND : 0;
 	ip->i_flags |= (ei->e2di_flags & EXT2_IMMUTABLE) ? SF_IMMUTABLE : 0;
 	ip->i_flags |= (ei->e2di_flags & EXT2_NODUMP) ? UF_NODUMP : 0;
@@ -152,7 +152,7 @@ ext2_i2ei(struct inode *ip, struct ext2f
 		ei->e2di_crtime = ip->i_birthtime;
 		ei->e2di_crtime_extra = NSEC_TO_XTIME(ip->i_birthnsec);
 	}
-	ei->e2di_flags = ip->i_flags;
+	ei->e2di_flags = 0;
 	ei->e2di_flags |= (ip->i_flags & SF_APPEND) ? EXT2_APPEND: 0;
 	ei->e2di_flags |= (ip->i_flags & SF_IMMUTABLE) ? EXT2_IMMUTABLE: 0;
 	ei->e2di_flags |= (ip->i_flags & UF_NODUMP) ? EXT2_NODUMP: 0;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
Comment 4 dfilter service freebsd_committer freebsd_triage 2014-01-14 15:20:41 UTC
Author: pfg
Date: Tue Jan 14 15:20:33 2014
New Revision: 260629
URL: http://svnweb.freebsd.org/changeset/base/260629

Log:
  MFC	r260545:
  
  ext2fs: fix inode flag conversion.
  
  After r252890 we are naively attempting to pass through the
  inode flags.  This is technically incorrect as the ext2
  inode flags don't match the UFS/system values used in
  FreeBSD and a clean conversion is needed.
  
  Some filtering was left in place so the change didn't cause
  significant changes in FreeBSD but some of the garbage passed
  is likely to be the cause for warning messages in linux.
  
  Fix the issue by resetting the flags before conversion as was
  done previously. This also means we will not pass the EXT4_*
  inode flags into FreeBSD's inode.
  
  PR:		kern/185448

Modified:
  stable/10/sys/fs/ext2fs/ext2_inode_cnv.c

Modified: stable/10/sys/fs/ext2fs/ext2_inode_cnv.c
==============================================================================
--- stable/10/sys/fs/ext2fs/ext2_inode_cnv.c	Tue Jan 14 14:05:29 2014	(r260628)
+++ stable/10/sys/fs/ext2fs/ext2_inode_cnv.c	Tue Jan 14 15:20:33 2014	(r260629)
@@ -104,7 +104,7 @@ ext2_ei2i(struct ext2fs_dinode *ei, stru
 		ip->i_birthtime = ei->e2di_crtime;
 		ip->i_birthnsec = XTIME_TO_NSEC(ei->e2di_crtime_extra);
 	}
-	ip->i_flags = ei->e2di_flags;
+	ip->i_flags = 0;
 	ip->i_flags |= (ei->e2di_flags & EXT2_APPEND) ? SF_APPEND : 0;
 	ip->i_flags |= (ei->e2di_flags & EXT2_IMMUTABLE) ? SF_IMMUTABLE : 0;
 	ip->i_flags |= (ei->e2di_flags & EXT2_NODUMP) ? UF_NODUMP : 0;
@@ -152,7 +152,7 @@ ext2_i2ei(struct inode *ip, struct ext2f
 		ei->e2di_crtime = ip->i_birthtime;
 		ei->e2di_crtime_extra = NSEC_TO_XTIME(ip->i_birthnsec);
 	}
-	ei->e2di_flags = ip->i_flags;
+	ei->e2di_flags = 0;
 	ei->e2di_flags |= (ip->i_flags & SF_APPEND) ? EXT2_APPEND: 0;
 	ei->e2di_flags |= (ip->i_flags & SF_IMMUTABLE) ? EXT2_IMMUTABLE: 0;
 	ei->e2di_flags |= (ip->i_flags & UF_NODUMP) ? EXT2_NODUMP: 0;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
Comment 5 Pedro F. Giffuni freebsd_committer freebsd_triage 2014-01-14 22:48:38 UTC
State Changed
From-To: open->closed

Fix has been merged to -stable. 
Unfortunately the fix was little too late for the next Release. 
Thank you for the report!