mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
swap: remove get/put_swap_device() in __swap_count()
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 commiteb085574a7
("mm, swap: fix race between swapoff and some swap operations"). Later, in commit2799e77529
("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/20230529061355.125791-1-ying.huang@intel.com Link: https://lkml.kernel.org/r/20230529061355.125791-2-ying.huang@intel.com Signed-off-by: "Huang, Ying" <ying.huang@intel.com> Reviewed-by: Yosry Ahmed <yosryahmed@google.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Chris Li (Google) <chrisl@kernel.org> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Tim Chen <tim.c.chen@linux.intel.com> Cc: Yang Shi <shy828301@gmail.com> Cc: Yu Zhao <yuzhao@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
1c2d252f5b
commit
f9f956b550
@ -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]);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user