diff options
author | pfg <pfg@FreeBSD.org> | 2014-01-24 13:51:38 +0000 |
---|---|---|
committer | pfg <pfg@FreeBSD.org> | 2014-01-24 13:51:38 +0000 |
commit | 737dfd6dbe5bebece26e1298d480cbbd17f5f5ea (patch) | |
tree | 4ab1a1dc0d2cf2c117f6f2efe67d0292c08770d6 | |
parent | f1926f47b58844be9c2061a859cb55d9a4a450f4 (diff) | |
download | FreeBSD-src-737dfd6dbe5bebece26e1298d480cbbd17f5f5ea.zip FreeBSD-src-737dfd6dbe5bebece26e1298d480cbbd17f5f5ea.tar.gz |
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
-rw-r--r-- | sys/fs/ext2fs/ext2_htree.c | 2 | ||||
-rw-r--r-- | sys/fs/ext2fs/ext2_lookup.c | 5 |
2 files changed, 1 insertions, 6 deletions
diff --git a/sys/fs/ext2fs/ext2_htree.c b/sys/fs/ext2fs/ext2_htree.c index 7eeab12..5cfec52 100644 --- a/sys/fs/ext2fs/ext2_htree.c +++ b/sys/fs/ext2fs/ext2_htree.c @@ -89,12 +89,10 @@ static int ext2_htree_writebuf(struct ext2fs_htree_lookup_info *info); 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); } diff --git a/sys/fs/ext2fs/ext2_lookup.c b/sys/fs/ext2fs/ext2_lookup.c index cd230dc..1fd7da0 100644 --- a/sys/fs/ext2fs/ext2_lookup.c +++ b/sys/fs/ext2fs/ext2_lookup.c @@ -884,13 +884,11 @@ ext2_direnter(struct inode *ip, struct vnode *dvp, struct componentname *cnp) 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 vnode *dvp, struct componentname *cnp) return ext2_htree_create_index(dvp, cnp, &newdir); } } -#endif /* EXT2FS_HTREE */ if (dp->i_count == 0) { /* |