ocfs2: Hold ip_lock when set/clear flags for indexed dir.
When we set/clear the dyn_features for an inode we hold the ip_lock. So do it when we set/clear OCFS2_INDEXED_DIR_FL also. Signed-off-by: Tao Ma <boyu.mt@taobao.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
parent
41b41a26d4
commit
8ac33dc86d
|
@ -2461,8 +2461,10 @@ static int ocfs2_dx_dir_attach_index(struct ocfs2_super *osb,
|
||||||
|
|
||||||
di->i_dx_root = cpu_to_le64(dr_blkno);
|
di->i_dx_root = cpu_to_le64(dr_blkno);
|
||||||
|
|
||||||
|
spin_lock(&OCFS2_I(dir)->ip_lock);
|
||||||
OCFS2_I(dir)->ip_dyn_features |= OCFS2_INDEXED_DIR_FL;
|
OCFS2_I(dir)->ip_dyn_features |= OCFS2_INDEXED_DIR_FL;
|
||||||
di->i_dyn_features = cpu_to_le16(OCFS2_I(dir)->ip_dyn_features);
|
di->i_dyn_features = cpu_to_le16(OCFS2_I(dir)->ip_dyn_features);
|
||||||
|
spin_unlock(&OCFS2_I(dir)->ip_lock);
|
||||||
|
|
||||||
ocfs2_journal_dirty(handle, di_bh);
|
ocfs2_journal_dirty(handle, di_bh);
|
||||||
|
|
||||||
|
@ -4466,8 +4468,10 @@ static int ocfs2_dx_dir_remove_index(struct inode *dir,
|
||||||
goto out_commit;
|
goto out_commit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock(&OCFS2_I(dir)->ip_lock);
|
||||||
OCFS2_I(dir)->ip_dyn_features &= ~OCFS2_INDEXED_DIR_FL;
|
OCFS2_I(dir)->ip_dyn_features &= ~OCFS2_INDEXED_DIR_FL;
|
||||||
di->i_dyn_features = cpu_to_le16(OCFS2_I(dir)->ip_dyn_features);
|
di->i_dyn_features = cpu_to_le16(OCFS2_I(dir)->ip_dyn_features);
|
||||||
|
spin_unlock(&OCFS2_I(dir)->ip_lock);
|
||||||
di->i_dx_root = cpu_to_le64(0ULL);
|
di->i_dx_root = cpu_to_le64(0ULL);
|
||||||
|
|
||||||
ocfs2_journal_dirty(handle, di_bh);
|
ocfs2_journal_dirty(handle, di_bh);
|
||||||
|
|
Loading…
Reference in New Issue