|
@@ -231,11 +231,8 @@ static void requeue_io(struct inode *inode, struct bdi_writeback *wb)
|
|
|
|
|
|
static void inode_sync_complete(struct inode *inode)
|
|
|
{
|
|
|
- /*
|
|
|
- * Prevent speculative execution through
|
|
|
- * spin_unlock(&wb->list_lock);
|
|
|
- */
|
|
|
-
|
|
|
+ inode->i_state &= ~I_SYNC;
|
|
|
+ /* Waiters must see I_SYNC cleared before being woken up */
|
|
|
smp_mb();
|
|
|
wake_up_bit(&inode->i_state, __I_SYNC);
|
|
|
}
|
|
@@ -436,7 +433,6 @@ writeback_single_inode(struct inode *inode, struct bdi_writeback *wb,
|
|
|
|
|
|
spin_lock(&wb->list_lock);
|
|
|
spin_lock(&inode->i_lock);
|
|
|
- inode->i_state &= ~I_SYNC;
|
|
|
if (!(inode->i_state & I_FREEING)) {
|
|
|
/*
|
|
|
* Sync livelock prevention. Each inode is tagged and synced in
|