remove_inode_hash(inode);
 
+       /*
+        * Wake up waiters in __wait_on_freeing_inode().
+        *
+        * Lockless hash lookup may end up finding the inode before we removed
+        * it above, but only lock it *after* we are done with the wakeup below.
+        * In this case the potential waiter cannot safely block.
+        *
+        * The inode being unhashed after the call to remove_inode_hash() is
+        * used as an indicator whether blocking on it is safe.
+        */
        spin_lock(&inode->i_lock);
        wake_up_bit(&inode->i_state, __I_NEW);
        BUG_ON(inode->i_state != (I_FREEING | I_CLEAR));
 {
        wait_queue_head_t *wq;
        DEFINE_WAIT_BIT(wait, &inode->i_state, __I_NEW);
+
+       /*
+        * Handle racing against evict(), see that routine for more details.
+        */
+       if (unlikely(inode_unhashed(inode))) {
+               WARN_ON(locked);
+               spin_unlock(&inode->i_lock);
+               return;
+       }
+
        wq = bit_waitqueue(&inode->i_state, __I_NEW);
        prepare_to_wait(wq, &wait.wq_entry, TASK_UNINTERRUPTIBLE);
        spin_unlock(&inode->i_lock);