summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2014-01-24 13:51:38 +0000
committerpfg <pfg@FreeBSD.org>2014-01-24 13:51:38 +0000
commit737dfd6dbe5bebece26e1298d480cbbd17f5f5ea (patch)
tree4ab1a1dc0d2cf2c117f6f2efe67d0292c08770d6 /sys/fs
parentf1926f47b58844be9c2061a859cb55d9a4a450f4 (diff)
downloadFreeBSD-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
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/ext2fs/ext2_htree.c2
-rw-r--r--sys/fs/ext2fs/ext2_lookup.c5
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) {
/*
OpenPOWER on IntegriCloud