Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Jan 2014 13:51:38 +0000 (UTC)
From:      "Pedro F. Giffuni" <pfg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r261120 - head/sys/fs/ext2fs
Message-ID:  <201401241351.s0ODpcnO054068@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pfg
Date: Fri Jan 24 13:51:38 2014
New Revision: 261120
URL: http://svnweb.freebsd.org/changeset/base/261120

Log:
  ext2fs: fix a bug in dirindex and re-enable.
  
  The IN_* flags should be set in i_flag instead of corrupting
  i_flags [1].
  
  Re-enable HTree dirindex as the last series of bug fixes
  seems to have fixed the issues.
  
  Reported by:	bde [1]
  Tested by:	kevlo
  MFC after:	1 week

Modified:
  head/sys/fs/ext2fs/ext2_htree.c
  head/sys/fs/ext2fs/ext2_lookup.c

Modified: head/sys/fs/ext2fs/ext2_htree.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_htree.c	Fri Jan 24 13:36:41 2014	(r261119)
+++ head/sys/fs/ext2fs/ext2_htree.c	Fri Jan 24 13:51:38 2014	(r261120)
@@ -89,12 +89,10 @@ static int	ext2_htree_writebuf(struct ex
 int
 ext2_htree_has_idx(struct inode *ip)
 {
-#ifdef EXT2FS_HTREE
 	if (EXT2_HAS_COMPAT_FEATURE(ip->i_e2fs, EXT2F_COMPAT_DIRHASHINDEX) &&
 	    ip->i_flags & E4_INDEX)
 		return (1);
 	else
-#endif
 		return (0);
 }
 

Modified: head/sys/fs/ext2fs/ext2_lookup.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_lookup.c	Fri Jan 24 13:36:41 2014	(r261119)
+++ head/sys/fs/ext2fs/ext2_lookup.c	Fri Jan 24 13:51:38 2014	(r261120)
@@ -884,13 +884,11 @@ ext2_direnter(struct inode *ip, struct v
 	bcopy(cnp->cn_nameptr, newdir.e2d_name, (unsigned)cnp->cn_namelen + 1);
 	newentrysize = EXT2_DIR_REC_LEN(newdir.e2d_namlen);
 
-#ifdef EXT2FS_HTREE
 	if (ext2_htree_has_idx(dp)) {
 		error = ext2_htree_add_entry(dvp, &newdir, cnp);
 		if (error) {
-			/* XXX: These are set in the wrong place. */
 			dp->i_flags &= ~E4_INDEX;
-			dp->i_flags |= IN_CHANGE | IN_UPDATE;
+			dp->i_flag |= IN_CHANGE | IN_UPDATE;
 		}
 		return (error);
 	}
@@ -906,7 +904,6 @@ ext2_direnter(struct inode *ip, struct v
 			return ext2_htree_create_index(dvp, cnp, &newdir);
 		}
 	}
-#endif	/* EXT2FS_HTREE */
 
 	if (dp->i_count == 0) {
 		/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201401241351.s0ODpcnO054068>