Re: [PATCH] mm, swap: Fix a race in free_swap_and_cache()

From: Andrew Morton
Date: Fri Mar 03 2017 - 17:51:04 EST


On Wed, 1 Mar 2017 22:38:09 +0800 "Huang, Ying" <ying.huang@xxxxxxxxx> wrote:

> Before using cluster lock in free_swap_and_cache(), the
> swap_info_struct->lock will be held during freeing the swap entry and
> acquiring page lock, so the page swap count will not change when
> testing page information later. But after using cluster lock, the
> cluster lock (or swap_info_struct->lock) will be held only during
> freeing the swap entry. So before acquiring the page lock, the page
> swap count may be changed in another thread. If the page swap count
> is not 0, we should not delete the page from the swap cache. This is
> fixed via checking page swap count again after acquiring the page
> lock.

What are the user-visible runtime effects of this bug? Please always
include this info when fixing things, thanks.