Looks good to me. Acked-by: Chris Li <chrisl@xxxxxxxxxx> Chris On Mon, Apr 1, 2024 at 10:00 AM Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > 6.1-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Huang Ying <ying.huang@xxxxxxxxx> > > [ Upstream commit a95722a047724ef75567381976a36f0e44230bd9 ] > > The general rule to use a swap entry is as follows. > > When we get a swap entry, if there aren't some other ways to prevent > swapoff, such as the folio in swap cache is locked, page table lock is > held, etc., the swap entry may become invalid because of swapoff. > Then, we need to enclose all swap related functions with > get_swap_device() and put_swap_device(), unless the swap functions > call get/put_swap_device() by themselves. > > Add the rule as comments of get_swap_device(). > > Link: https://lkml.kernel.org/r/20230529061355.125791-6-ying.huang@xxxxxxxxx > Signed-off-by: "Huang, Ying" <ying.huang@xxxxxxxxx> > Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> > Reviewed-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> > Reviewed-by: Chris Li (Google) <chrisl@xxxxxxxxxx> > Cc: Hugh Dickins <hughd@xxxxxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > Cc: Minchan Kim <minchan@xxxxxxxxxx> > Cc: Tim Chen <tim.c.chen@xxxxxxxxxxxxxxx> > Cc: Yang Shi <shy828301@xxxxxxxxx> > Cc: Yu Zhao <yuzhao@xxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Stable-dep-of: 82b1c07a0af6 ("mm: swap: fix race between free_swap_and_cache() and swapoff()") > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > --- > mm/swapfile.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/mm/swapfile.c b/mm/swapfile.c > index cca9fda9d036f..324844f98d67c 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -1222,6 +1222,13 @@ static unsigned char __swap_entry_free_locked(struct swap_info_struct *p, > } > > /* > + * When we get a swap entry, if there aren't some other ways to > + * prevent swapoff, such as the folio in swap cache is locked, page > + * table lock is held, etc., the swap entry may become invalid because > + * of swapoff. Then, we need to enclose all swap related functions > + * with get_swap_device() and put_swap_device(), unless the swap > + * functions call get/put_swap_device() by themselves. > + * > * Check whether swap entry is valid in the swap device. If so, > * return pointer to swap_info_struct, and keep the swap entry valid > * via preventing the swap device from being swapoff, until > @@ -1230,9 +1237,8 @@ static unsigned char __swap_entry_free_locked(struct swap_info_struct *p, > * Notice that swapoff or swapoff+swapon can still happen before the > * percpu_ref_tryget_live() in get_swap_device() or after the > * percpu_ref_put() in put_swap_device() if there isn't any other way > - * to prevent swapoff, such as page lock, page table lock, etc. The > - * caller must be prepared for that. For example, the following > - * situation is possible. > + * to prevent swapoff. The caller must be prepared for that. For > + * example, the following situation is possible. > * > * CPU1 CPU2 > * do_swap_page() > -- > 2.43.0 > > >