mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 05:31:08 -04:00
mm/swap: add helper swap_offset_available()
Add helper swap_offset_available() to remove some duplicated codes. Minor readability improvement. [[email protected]: s/swap_offset_available/swap_offset_available_and_locked/, per Neil] Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Miaohe Lin <[email protected]> Cc: Alistair Popple <[email protected]> Cc: David Hildenbrand <[email protected]> Cc: David Howells <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Naoya Horiguchi <[email protected]> Cc: NeilBrown <[email protected]> Cc: Peter Xu <[email protected]> Cc: Suren Baghdasaryan <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: Oscar Salvador <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
This commit is contained in:
1 parent
eacde32757
commit
4b9ae8426c
1 file changed
+18
-16
+18
-16
@@ -775,6 +775,22 @@ static void set_cluster_next(struct swap_info_struct *si, unsigned long next)
|
||||
this_cpu_write(*si->cluster_next_cpu, next);
|
||||
}
|
||||
|
||||
static bool swap_offset_available_and_locked(struct swap_info_struct *si,
|
||||
unsigned long offset)
|
||||
{
|
||||
if (data_race(!si->swap_map[offset])) {
|
||||
spin_lock(&si->lock);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (vm_swap_full() && READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) {
|
||||
spin_lock(&si->lock);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int scan_swap_map_slots(struct swap_info_struct *si,
|
||||
unsigned char usage, int nr,
|
||||
swp_entry_t slots[])
|
||||
@@ -952,15 +968,8 @@ done:
|
||||
scan:
|
||||
spin_unlock(&si->lock);
|
||||
while (++offset <= READ_ONCE(si->highest_bit)) {
|
||||
if (data_race(!si->swap_map[offset])) {
|
||||
spin_lock(&si->lock);
|
||||
if (swap_offset_available_and_locked(si, offset))
|
||||
goto checks;
|
||||
}
|
||||
if (vm_swap_full() &&
|
||||
READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) {
|
||||
spin_lock(&si->lock);
|
||||
goto checks;
|
||||
}
|
||||
if (unlikely(--latency_ration < 0)) {
|
||||
cond_resched();
|
||||
latency_ration = LATENCY_LIMIT;
|
||||
@@ -969,15 +978,8 @@ scan:
|
||||
}
|
||||
offset = si->lowest_bit;
|
||||
while (offset < scan_base) {
|
||||
if (data_race(!si->swap_map[offset])) {
|
||||
spin_lock(&si->lock);
|
||||
if (swap_offset_available_and_locked(si, offset))
|
||||
goto checks;
|
||||
}
|
||||
if (vm_swap_full() &&
|
||||
READ_ONCE(si->swap_map[offset]) == SWAP_HAS_CACHE) {
|
||||
spin_lock(&si->lock);
|
||||
goto checks;
|
||||
}
|
||||
if (unlikely(--latency_ration < 0)) {
|
||||
cond_resched();
|
||||
latency_ration = LATENCY_LIMIT;
|
||||
|
||||
Reference in new issue
Block a user