mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-03 12:35:02 +00:00
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
This commit is contained in:
parent
56ae078529
commit
1093104cf7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261120
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user