The patch titled Subject: mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix has been added to the -mm mm-unstable branch. Its filename is mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix.patch This patch will later appear in the mm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: Kairui Song <ryncsn@xxxxxxxxx> Subject: mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix Date: Thu, 1 Aug 2024 17:59:17 +0800 fix discard of full cluster Link: https://lkml.kernel.org/r/CAMgjq7CWwK75_2Zi5P40K08pk9iqOcuWKL6khu=x4Yg_nXaQag@xxxxxxxxxxxxxx Signed-off-by: Kairui Song <kasong@xxxxxxxxxxx> Reported-by: David Hildenbrand <david@xxxxxxxxxx> Closes: https://lkml.kernel.org/r/3c79021a-e9a0-4669-a4e7-7060edf12d58@xxxxxxxxxx Cc: Barry Song <21cnbao@xxxxxxxxx> Cc: Chris Li <chrisl@xxxxxxxxxx> Cc: "Huang, Ying" <ying.huang@xxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Kalesh Singh <kaleshsingh@xxxxxxxxxx> Cc: Ryan Roberts <ryan.roberts@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/swap.h | 1 + mm/swapfile.c | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) --- a/include/linux/swap.h~mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix +++ a/include/linux/swap.h @@ -260,6 +260,7 @@ struct swap_cluster_info { #define CLUSTER_FLAG_FREE 1 /* This cluster is free */ #define CLUSTER_FLAG_NONFULL 2 /* This cluster is on nonfull list */ #define CLUSTER_FLAG_FRAG 4 /* This cluster is on nonfull list */ +#define CLUSTER_FLAG_FULL 8 /* This cluster is on full list */ /* * The first page in the swap file is the swap header, which is always marked --- a/mm/swapfile.c~mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix +++ a/mm/swapfile.c @@ -450,7 +450,10 @@ static void __free_cluster(struct swap_i lockdep_assert_held(&si->lock); lockdep_assert_held(&ci->lock); - list_move_tail(&ci->list, &si->free_clusters); + if (ci->flags) + list_move_tail(&ci->list, &si->free_clusters); + else + list_add_tail(&ci->list, &si->free_clusters); ci->flags = CLUSTER_FLAG_FREE; ci->order = 0; } @@ -474,7 +477,6 @@ static void swap_do_scheduled_discard(st SWAPFILE_CLUSTER); spin_lock(&si->lock); - spin_lock(&ci->lock); __free_cluster(si, ci); memset(si->swap_map + idx * SWAPFILE_CLUSTER, @@ -666,7 +668,7 @@ static void cluster_alloc_range(struct s if (ci->flags & CLUSTER_FLAG_FRAG) si->frag_cluster_nr[ci->order]--; list_move_tail(&ci->list, &si->full_clusters); - ci->flags = 0; + ci->flags = CLUSTER_FLAG_FULL; } } _ Patches currently in -mm which might be from ryncsn@xxxxxxxxx are mm-swap-add-a-adaptive-full-cluster-cache-reclaim-fix.patch