Skip to content

Commit

Permalink
swap: remove get/put_swap_device() in __swap_count()
Browse files Browse the repository at this point in the history
Patch series "swap: cleanup get/put_swap_device() usage", v3.

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.

Based on the above rule, all get/put_swap_device() usage are checked and
cleaned up if necessary.


This patch (of 5):

get/put_swap_device() are added to __swap_count() in commit
eb08557 ("mm, swap: fix race between swapoff and some swap
operations").  Later, in commit 2799e77 ("swap: fix
do_swap_page() race with swapoff"), get/put_swap_device() are added to
do_swap_page().  And they enclose the only call site of
__swap_count().  So, it's safe to remove get/put_swap_device() in
__swap_count() now.

Link: https://lkml.kernel.org/r/[email protected]
Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: "Huang, Ying" <[email protected]>
Reviewed-by: Yosry Ahmed <[email protected]>
Reviewed-by: David Hildenbrand <[email protected]>
Reviewed-by: Chris Li (Google) <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: Johannes Weiner <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Minchan Kim <[email protected]>
Cc: Tim Chen <[email protected]>
Cc: Yang Shi <[email protected]>
Cc: Yu Zhao <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
  • Loading branch information
yhuang-intel authored and akpm00 committed Jun 9, 2023
1 parent 1c2d252 commit f9f956b
Showing 1 changed file with 2 additions and 8 deletions.
10 changes: 2 additions & 8 deletions mm/swapfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -1433,16 +1433,10 @@ void swapcache_free_entries(swp_entry_t *entries, int n)

int __swap_count(swp_entry_t entry)
{
struct swap_info_struct *si;
struct swap_info_struct *si = swp_swap_info(entry);
pgoff_t offset = swp_offset(entry);
int count = 0;

si = get_swap_device(entry);
if (si) {
count = swap_count(si->swap_map[offset]);
put_swap_device(si);
}
return count;
return swap_count(si->swap_map[offset]);
}

/*
Expand Down

0 comments on commit f9f956b

Please sign in to comment.