lkml.org 
[lkml]   [2023]   [Aug]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 6/7] mm: Remove use of folio list from folios_put()
Date
Instead of putting the interesting folios on a list, delete the
uninteresting one from the folio_batch.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
mm/swap.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/mm/swap.c b/mm/swap.c
index 9d31185dc27b..8ebb10d44de7 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -958,12 +958,11 @@ void lru_cache_disable(void)
*/
void folios_put(struct folio_batch *folios)
{
- int i;
- LIST_HEAD(pages_to_free);
+ int i, j;
struct lruvec *lruvec = NULL;
unsigned long flags = 0;

- for (i = 0; i < folios->nr; i++) {
+ for (i = 0, j = 0; i < folios->nr; i++) {
struct folio *folio = folios->folios[i];

if (is_huge_zero_page(&folio->page))
@@ -1012,13 +1011,18 @@ void folios_put(struct folio_batch *folios)
count_vm_event(UNEVICTABLE_PGCLEARED);
}

- list_add(&folio->lru, &pages_to_free);
+ if (j != i)
+ folios->folios[j] = folio;
+ j++;
}
if (lruvec)
unlock_page_lruvec_irqrestore(lruvec, flags);
+ folios->nr = j;
+ if (!j)
+ return;

- mem_cgroup_uncharge_list(&pages_to_free);
- free_unref_page_list(&pages_to_free);
+ mem_cgroup_uncharge_batch(folios);
+ free_unref_folios(folios);
}
EXPORT_SYMBOL(folios_put);

--
2.40.1
\
 
 \ /
  Last update: 2023-08-21 22:52    [W:8.618 / U:0.416 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site