mm/swap: reduce indentation level

Patch series "mm/swap: remove boilerplate".


This patch (of 5):

Use folio_activate() as an example:

Before this series
------------------
    if (!folio_test_active(folio) && !folio_test_unevictable(folio)) {
      struct folio_batch *fbatch;

      folio_get(folio);
      if (!folio_test_clear_lru(folio)) {
        folio_put(folio);
        return;
      }

      local_lock(&cpu_fbatches.lock);
      fbatch = this_cpu_ptr(&cpu_fbatches.activate);
      folio_batch_add_and_move(fbatch, folio, folio_activate_fn);
      local_unlock(&cpu_fbatches.lock);
    }
  }

After this series
-----------------
  void folio_activate(struct folio *folio)
  {
    if (folio_test_active(folio) || folio_test_unevictable(folio))
      return;
  
    folio_batch_add_and_move(folio, lru_activate, true);
  }

And this is applied to all 6 folio_batch handlers in mm/swap.c.

bloat-o-meter
-------------
  add/remove: 12/13 grow/shrink: 3/2 up/down: 4653/-4721 (-68)
  ...
  Total: Before=28083019, After=28082951, chg -0.00%


This patch (of 5):

Reduce indentation level by returning directly when there is no cleanup
needed, i.e.,

  if (condition) {    |    if (condition) {
    do_this();        |      do_this();
    return;           |      return;
  } else {            |    }
    do_that();        |
  }                   |    do_that();

and

  if (condition) {    |    if (!condition)
    do_this();        |      return;
    do_that();        |
  }                   |    do_this();
  return;             |    do_that();

Presumably the old style became repetitive as the result of copy and
paste.

Link: https://lkml.kernel.org/r/20240711021317.596178-1-yuzhao@google.com
Link: https://lkml.kernel.org/r/20240711021317.596178-2-yuzhao@google.com
Signed-off-by: Yu Zhao <yuzhao@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Yu Zhao
2024-07-10 20:13:13 -06:00
committed by Andrew Morton
parent ac59a1f014
commit b03484c2a7
+38 -29
View File
@@ -117,7 +117,9 @@ void __folio_put(struct folio *folio)
if (unlikely(folio_is_zone_device(folio))) { if (unlikely(folio_is_zone_device(folio))) {
free_zone_device_folio(folio); free_zone_device_folio(folio);
return; return;
} else if (folio_test_hugetlb(folio)) { }
if (folio_test_hugetlb(folio)) {
free_huge_folio(folio); free_huge_folio(folio);
return; return;
} }
@@ -228,18 +230,20 @@ static void folio_batch_add_and_move(struct folio_batch *fbatch,
if (folio_batch_add(fbatch, folio) && !folio_test_large(folio) && if (folio_batch_add(fbatch, folio) && !folio_test_large(folio) &&
!lru_cache_disabled()) !lru_cache_disabled())
return; return;
folio_batch_move_lru(fbatch, move_fn); folio_batch_move_lru(fbatch, move_fn);
} }
static void lru_move_tail_fn(struct lruvec *lruvec, struct folio *folio) static void lru_move_tail_fn(struct lruvec *lruvec, struct folio *folio)
{ {
if (!folio_test_unevictable(folio)) { if (folio_test_unevictable(folio))
return;
lruvec_del_folio(lruvec, folio); lruvec_del_folio(lruvec, folio);
folio_clear_active(folio); folio_clear_active(folio);
lruvec_add_folio_tail(lruvec, folio); lruvec_add_folio_tail(lruvec, folio);
__count_vm_events(PGROTATED, folio_nr_pages(folio)); __count_vm_events(PGROTATED, folio_nr_pages(folio));
} }
}
/* /*
* Writeback is about to end against a folio which has been marked for * Writeback is about to end against a folio which has been marked for
@@ -250,11 +254,13 @@ static void lru_move_tail_fn(struct lruvec *lruvec, struct folio *folio)
*/ */
void folio_rotate_reclaimable(struct folio *folio) void folio_rotate_reclaimable(struct folio *folio)
{ {
if (!folio_test_locked(folio) && !folio_test_dirty(folio) &&
!folio_test_unevictable(folio)) {
struct folio_batch *fbatch; struct folio_batch *fbatch;
unsigned long flags; unsigned long flags;
if (folio_test_locked(folio) || folio_test_dirty(folio) ||
folio_test_unevictable(folio))
return;
folio_get(folio); folio_get(folio);
if (!folio_test_clear_lru(folio)) { if (!folio_test_clear_lru(folio)) {
folio_put(folio); folio_put(folio);
@@ -266,7 +272,6 @@ void folio_rotate_reclaimable(struct folio *folio)
folio_batch_add_and_move(fbatch, folio, lru_move_tail_fn); folio_batch_add_and_move(fbatch, folio, lru_move_tail_fn);
local_unlock_irqrestore(&lru_rotate.lock, flags); local_unlock_irqrestore(&lru_rotate.lock, flags);
} }
}
void lru_note_cost(struct lruvec *lruvec, bool file, void lru_note_cost(struct lruvec *lruvec, bool file,
unsigned int nr_io, unsigned int nr_rotated) unsigned int nr_io, unsigned int nr_rotated)
@@ -328,18 +333,19 @@ void lru_note_cost_refault(struct folio *folio)
static void folio_activate_fn(struct lruvec *lruvec, struct folio *folio) static void folio_activate_fn(struct lruvec *lruvec, struct folio *folio)
{ {
if (!folio_test_active(folio) && !folio_test_unevictable(folio)) {
long nr_pages = folio_nr_pages(folio); long nr_pages = folio_nr_pages(folio);
if (folio_test_active(folio) || folio_test_unevictable(folio))
return;
lruvec_del_folio(lruvec, folio); lruvec_del_folio(lruvec, folio);
folio_set_active(folio); folio_set_active(folio);
lruvec_add_folio(lruvec, folio); lruvec_add_folio(lruvec, folio);
trace_mm_lru_activate(folio); trace_mm_lru_activate(folio);
__count_vm_events(PGACTIVATE, nr_pages); __count_vm_events(PGACTIVATE, nr_pages);
__count_memcg_events(lruvec_memcg(lruvec), PGACTIVATE, __count_memcg_events(lruvec_memcg(lruvec), PGACTIVATE, nr_pages);
nr_pages);
}
} }
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
@@ -353,9 +359,11 @@ static void folio_activate_drain(int cpu)
void folio_activate(struct folio *folio) void folio_activate(struct folio *folio)
{ {
if (!folio_test_active(folio) && !folio_test_unevictable(folio)) {
struct folio_batch *fbatch; struct folio_batch *fbatch;
if (folio_test_active(folio) || folio_test_unevictable(folio))
return;
folio_get(folio); folio_get(folio);
if (!folio_test_clear_lru(folio)) { if (!folio_test_clear_lru(folio)) {
folio_put(folio); folio_put(folio);
@@ -367,7 +375,6 @@ void folio_activate(struct folio *folio)
folio_batch_add_and_move(fbatch, folio, folio_activate_fn); folio_batch_add_and_move(fbatch, folio, folio_activate_fn);
local_unlock(&cpu_fbatches.lock); local_unlock(&cpu_fbatches.lock);
} }
}
#else #else
static inline void folio_activate_drain(int cpu) static inline void folio_activate_drain(int cpu)
@@ -378,13 +385,14 @@ void folio_activate(struct folio *folio)
{ {
struct lruvec *lruvec; struct lruvec *lruvec;
if (folio_test_clear_lru(folio)) { if (!folio_test_clear_lru(folio))
return;
lruvec = folio_lruvec_lock_irq(folio); lruvec = folio_lruvec_lock_irq(folio);
folio_activate_fn(lruvec, folio); folio_activate_fn(lruvec, folio);
unlock_page_lruvec_irq(lruvec); unlock_page_lruvec_irq(lruvec);
folio_set_lru(folio); folio_set_lru(folio);
} }
}
#endif #endif
static void __lru_cache_activate_folio(struct folio *folio) static void __lru_cache_activate_folio(struct folio *folio)
@@ -610,26 +618,28 @@ static void lru_deactivate_file_fn(struct lruvec *lruvec, struct folio *folio)
static void lru_deactivate_fn(struct lruvec *lruvec, struct folio *folio) static void lru_deactivate_fn(struct lruvec *lruvec, struct folio *folio)
{ {
if (!folio_test_unevictable(folio) && (folio_test_active(folio) || lru_gen_enabled())) {
long nr_pages = folio_nr_pages(folio); long nr_pages = folio_nr_pages(folio);
if (folio_test_unevictable(folio) || !(folio_test_active(folio) || lru_gen_enabled()))
return;
lruvec_del_folio(lruvec, folio); lruvec_del_folio(lruvec, folio);
folio_clear_active(folio); folio_clear_active(folio);
folio_clear_referenced(folio); folio_clear_referenced(folio);
lruvec_add_folio(lruvec, folio); lruvec_add_folio(lruvec, folio);
__count_vm_events(PGDEACTIVATE, nr_pages); __count_vm_events(PGDEACTIVATE, nr_pages);
__count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE, __count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE, nr_pages);
nr_pages);
}
} }
static void lru_lazyfree_fn(struct lruvec *lruvec, struct folio *folio) static void lru_lazyfree_fn(struct lruvec *lruvec, struct folio *folio)
{ {
if (folio_test_anon(folio) && folio_test_swapbacked(folio) &&
!folio_test_swapcache(folio) && !folio_test_unevictable(folio)) {
long nr_pages = folio_nr_pages(folio); long nr_pages = folio_nr_pages(folio);
if (!folio_test_anon(folio) || !folio_test_swapbacked(folio) ||
folio_test_swapcache(folio) || folio_test_unevictable(folio))
return;
lruvec_del_folio(lruvec, folio); lruvec_del_folio(lruvec, folio);
folio_clear_active(folio); folio_clear_active(folio);
folio_clear_referenced(folio); folio_clear_referenced(folio);
@@ -642,9 +652,7 @@ static void lru_lazyfree_fn(struct lruvec *lruvec, struct folio *folio)
lruvec_add_folio(lruvec, folio); lruvec_add_folio(lruvec, folio);
__count_vm_events(PGLAZYFREE, nr_pages); __count_vm_events(PGLAZYFREE, nr_pages);
__count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE, __count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE, nr_pages);
nr_pages);
}
} }
/* /*
@@ -726,10 +734,11 @@ void deactivate_file_folio(struct folio *folio)
*/ */
void folio_deactivate(struct folio *folio) void folio_deactivate(struct folio *folio)
{ {
if (!folio_test_unevictable(folio) && (folio_test_active(folio) ||
lru_gen_enabled())) {
struct folio_batch *fbatch; struct folio_batch *fbatch;
if (folio_test_unevictable(folio) || !(folio_test_active(folio) || lru_gen_enabled()))
return;
folio_get(folio); folio_get(folio);
if (!folio_test_clear_lru(folio)) { if (!folio_test_clear_lru(folio)) {
folio_put(folio); folio_put(folio);
@@ -741,7 +750,6 @@ void folio_deactivate(struct folio *folio)
folio_batch_add_and_move(fbatch, folio, lru_deactivate_fn); folio_batch_add_and_move(fbatch, folio, lru_deactivate_fn);
local_unlock(&cpu_fbatches.lock); local_unlock(&cpu_fbatches.lock);
} }
}
/** /**
* folio_mark_lazyfree - make an anon folio lazyfree * folio_mark_lazyfree - make an anon folio lazyfree
@@ -752,10 +760,12 @@ void folio_deactivate(struct folio *folio)
*/ */
void folio_mark_lazyfree(struct folio *folio) void folio_mark_lazyfree(struct folio *folio)
{ {
if (folio_test_anon(folio) && folio_test_swapbacked(folio) &&
!folio_test_swapcache(folio) && !folio_test_unevictable(folio)) {
struct folio_batch *fbatch; struct folio_batch *fbatch;
if (!folio_test_anon(folio) || !folio_test_swapbacked(folio) ||
folio_test_swapcache(folio) || folio_test_unevictable(folio))
return;
folio_get(folio); folio_get(folio);
if (!folio_test_clear_lru(folio)) { if (!folio_test_clear_lru(folio)) {
folio_put(folio); folio_put(folio);
@@ -767,7 +777,6 @@ void folio_mark_lazyfree(struct folio *folio)
folio_batch_add_and_move(fbatch, folio, lru_lazyfree_fn); folio_batch_add_and_move(fbatch, folio, lru_lazyfree_fn);
local_unlock(&cpu_fbatches.lock); local_unlock(&cpu_fbatches.lock);
} }
}
void lru_add_drain(void) void lru_add_drain(void)
{ {