diff --git a/mm/swap_slots.c b/mm/swap_slots.c index d81cfc5a43d5..f778aa38127e 100644 --- a/mm/swap_slots.c +++ b/mm/swap_slots.c @@ -273,9 +273,12 @@ static int refill_swap_slots_cache(struct swap_slots_cache *cache) int free_swap_slot(swp_entry_t entry) { struct swap_slots_cache *cache; + struct swap_info_struct *si; + si = swp_swap_info(entry); cache = raw_cpu_ptr(&swp_slots); - if (use_swap_slot_cache && cache->slots_ret) { + if (!(si->flags & SWP_SYNCHRONOUS_IO) && + use_swap_slot_cache && cache->slots_ret) { spin_lock_irq(&cache->free_lock); /* Swap slots cache may be deactivated before acquiring lock */ if (!use_swap_slot_cache || !cache->slots_ret) {