diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 523a5cf74c37b7ff9768fe8a1c25ccf88d73fa99..dc7e02dd10f9e16b77c767501d19f179fe4982b0 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -2544,10 +2544,6 @@ void __mark_inode_dirty(struct inode *inode, int flags) wakeup_bdi = inode_io_list_move_locked(inode, wb, dirty_list); - spin_unlock(&wb->list_lock); - spin_unlock(&inode->i_lock); - trace_writeback_dirty_inode_enqueue(inode); - /* * If this is the first dirty inode for this bdi, * we have to wake-up the corresponding bdi thread @@ -2557,6 +2553,11 @@ void __mark_inode_dirty(struct inode *inode, int flags) if (wakeup_bdi && (wb->bdi->capabilities & BDI_CAP_WRITEBACK)) wb_wakeup_delayed(wb); + + spin_unlock(&wb->list_lock); + spin_unlock(&inode->i_lock); + trace_writeback_dirty_inode_enqueue(inode); + return; } }