Commit 352c676f authored by Stephen Lord's avatar Stephen Lord

[XFS] Fix deadlock caused by race between xfs_iunpin marking an inode

dirty, and the same inode being reallocated and reused by create.
The unlock_new_inode and mark_inode_dirty manage to corrupt the
i_state flags and end up leaving I_LOCK|I_NEW set.

SGI Modid: 2.5.x-xfs:slinx:151120a
parent 86f2f450
...@@ -2631,7 +2631,8 @@ xfs_iunpin( ...@@ -2631,7 +2631,8 @@ xfs_iunpin(
if (vp) { if (vp) {
struct inode *inode = LINVFS_GET_IP(vp); struct inode *inode = LINVFS_GET_IP(vp);
mark_inode_dirty_sync(inode); if (!(inode->i_state & I_NEW))
mark_inode_dirty_sync(inode);
} }
wake_up(&ip->i_ipin_wait); wake_up(&ip->i_ipin_wait);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment