diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 1208f61373c84e50992df26260121a701d6f65e3..c6ece07dd4b0ed237e8dfca0092ee6cd266fe69b 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -2260,10 +2260,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 @@ -2272,6 +2268,11 @@ void __mark_inode_dirty(struct inode *inode, int flags) */ if (bdi_cap_writeback_dirty(wb->bdi) && wakeup_bdi) wb_wakeup_delayed(wb); + + spin_unlock(&wb->list_lock); + spin_unlock(&inode->i_lock); + trace_writeback_dirty_inode_enqueue(inode); + return; } }