|
@@ -695,13 +695,15 @@ void unlock_new_inode(struct inode *inode)
|
|
|
}
|
|
|
#endif
|
|
|
/*
|
|
|
- * This is special! We do not need the spinlock
|
|
|
- * when clearing I_LOCK, because we're guaranteed
|
|
|
- * that nobody else tries to do anything about the
|
|
|
- * state of the inode when it is locked, as we
|
|
|
- * just created it (so there can be no old holders
|
|
|
- * that haven't tested I_LOCK).
|
|
|
+ * This is special! We do not need the spinlock when clearing I_LOCK,
|
|
|
+ * because we're guaranteed that nobody else tries to do anything about
|
|
|
+ * the state of the inode when it is locked, as we just created it (so
|
|
|
+ * there can be no old holders that haven't tested I_LOCK).
|
|
|
+ * However we must emit the memory barrier so that other CPUs reliably
|
|
|
+ * see the clearing of I_LOCK after the other inode initialisation has
|
|
|
+ * completed.
|
|
|
*/
|
|
|
+ smp_mb();
|
|
|
WARN_ON((inode->i_state & (I_LOCK|I_NEW)) != (I_LOCK|I_NEW));
|
|
|
inode->i_state &= ~(I_LOCK|I_NEW);
|
|
|
wake_up_inode(inode);
|