Commit b03484c2 authored by Yu Zhao's avatar Yu Zhao Committed by Andrew Morton
Browse files

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: default avatarYu Zhao <yuzhao@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent ac59a1f0
Loading
Loading
Loading
Loading
+109 −100
Original line number Diff line number Diff line
@@ -117,7 +117,9 @@ void __folio_put(struct folio *folio)
	if (unlikely(folio_is_zone_device(folio))) {
		free_zone_device_folio(folio);
		return;
	} else if (folio_test_hugetlb(folio)) {
	}

	if (folio_test_hugetlb(folio)) {
		free_huge_folio(folio);
		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) &&
	    !lru_cache_disabled())
		return;

	folio_batch_move_lru(fbatch, move_fn);
}

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);
	folio_clear_active(folio);
	lruvec_add_folio_tail(lruvec, folio);
	__count_vm_events(PGROTATED, folio_nr_pages(folio));
}
}

/*
 * 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)
{
	if (!folio_test_locked(folio) && !folio_test_dirty(folio) &&
	    !folio_test_unevictable(folio)) {
	struct folio_batch *fbatch;
	unsigned long flags;

	if (folio_test_locked(folio) || folio_test_dirty(folio) ||
	    folio_test_unevictable(folio))
		return;

	folio_get(folio);
	if (!folio_test_clear_lru(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);
	local_unlock_irqrestore(&lru_rotate.lock, flags);
}
}

void lru_note_cost(struct lruvec *lruvec, bool file,
		   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)
{
	if (!folio_test_active(folio) && !folio_test_unevictable(folio)) {
	long nr_pages = folio_nr_pages(folio);

	if (folio_test_active(folio) || folio_test_unevictable(folio))
		return;


	lruvec_del_folio(lruvec, folio);
	folio_set_active(folio);
	lruvec_add_folio(lruvec, folio);
	trace_mm_lru_activate(folio);

	__count_vm_events(PGACTIVATE, nr_pages);
		__count_memcg_events(lruvec_memcg(lruvec), PGACTIVATE,
				     nr_pages);
	}
	__count_memcg_events(lruvec_memcg(lruvec), PGACTIVATE, nr_pages);
}

#ifdef CONFIG_SMP
@@ -353,9 +359,11 @@ static void folio_activate_drain(int cpu)

void folio_activate(struct folio *folio)
{
	if (!folio_test_active(folio) && !folio_test_unevictable(folio)) {
	struct folio_batch *fbatch;

	if (folio_test_active(folio) || folio_test_unevictable(folio))
		return;

	folio_get(folio);
	if (!folio_test_clear_lru(folio)) {
		folio_put(folio);
@@ -367,7 +375,6 @@ void folio_activate(struct folio *folio)
	folio_batch_add_and_move(fbatch, folio, folio_activate_fn);
	local_unlock(&cpu_fbatches.lock);
}
}

#else
static inline void folio_activate_drain(int cpu)
@@ -378,13 +385,14 @@ void folio_activate(struct folio *folio)
{
	struct lruvec *lruvec;

	if (folio_test_clear_lru(folio)) {
	if (!folio_test_clear_lru(folio))
		return;

	lruvec = folio_lruvec_lock_irq(folio);
	folio_activate_fn(lruvec, folio);
	unlock_page_lruvec_irq(lruvec);
	folio_set_lru(folio);
}
}
#endif

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)
{
	if (!folio_test_unevictable(folio) && (folio_test_active(folio) || lru_gen_enabled())) {
	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);
	folio_clear_active(folio);
	folio_clear_referenced(folio);
	lruvec_add_folio(lruvec, folio);

	__count_vm_events(PGDEACTIVATE, nr_pages);
		__count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE,
				     nr_pages);
	}
	__count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE, nr_pages);
}

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);

	if (!folio_test_anon(folio) || !folio_test_swapbacked(folio) ||
	    folio_test_swapcache(folio) || folio_test_unevictable(folio))
		return;

	lruvec_del_folio(lruvec, folio);
	folio_clear_active(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);

	__count_vm_events(PGLAZYFREE, nr_pages);
		__count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE,
				     nr_pages);
	}
	__count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE, nr_pages);
}

/*
@@ -726,10 +734,11 @@ void deactivate_file_folio(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;

	if (folio_test_unevictable(folio) || !(folio_test_active(folio) || lru_gen_enabled()))
		return;

	folio_get(folio);
	if (!folio_test_clear_lru(folio)) {
		folio_put(folio);
@@ -741,7 +750,6 @@ void folio_deactivate(struct folio *folio)
	folio_batch_add_and_move(fbatch, folio, lru_deactivate_fn);
	local_unlock(&cpu_fbatches.lock);
}
}

/**
 * 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)
{
	if (folio_test_anon(folio) && folio_test_swapbacked(folio) &&
	    !folio_test_swapcache(folio) && !folio_test_unevictable(folio)) {
	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);
	if (!folio_test_clear_lru(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);
	local_unlock(&cpu_fbatches.lock);
}
}

void lru_add_drain(void)
{