The patch titled Subject: swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation-v3 has been removed from the -mm tree. Its filename was swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation-v3.patch This patch was dropped because it was folded into swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation.patch ------------------------------------------------------ From: Huang Ying <ying.huang@xxxxxxxxx> Subject: swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation-v3 fix cluster_next_cpu allocation and freeing, per Daniel Link: http://lkml.kernel.org/r/20200525002648.336325-1-ying.huang@xxxxxxxxx Signed-off-by: "Huang, Ying" <ying.huang@xxxxxxxxx> Cc: Daniel Jordan <daniel.m.jordan@xxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxx> Cc: Minchan Kim <minchan@xxxxxxxxxx> Cc: Tim Chen <tim.c.chen@xxxxxxxxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/swapfile.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) --- a/mm/swapfile.c~swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation-v3 +++ a/mm/swapfile.c @@ -2691,6 +2691,8 @@ SYSCALL_DEFINE1(swapoff, const char __us mutex_unlock(&swapon_mutex); free_percpu(p->percpu_cluster); p->percpu_cluster = NULL; + free_percpu(p->cluster_next_cpu); + p->cluster_next_cpu = NULL; vfree(swap_map); kvfree(cluster_info); kvfree(frontswap_map); @@ -2872,11 +2874,6 @@ static struct swap_info_struct *alloc_sw p = kvzalloc(struct_size(p, avail_lists, nr_node_ids), GFP_KERNEL); if (!p) return ERR_PTR(-ENOMEM); - p->cluster_next_cpu = alloc_percpu(unsigned int); - if (!p->cluster_next_cpu) { - kvfree(p); - return ERR_PTR(-ENOMEM); - } spin_lock(&swap_lock); for (type = 0; type < nr_swapfiles; type++) { @@ -3248,6 +3245,11 @@ SYSCALL_DEFINE2(swapon, const char __use unsigned long ci, nr_cluster; p->flags |= SWP_SOLIDSTATE; + p->cluster_next_cpu = alloc_percpu(unsigned int); + if (!p->cluster_next_cpu) { + error = -ENOMEM; + goto bad_swap_unlock_inode; + } /* * select a random position to start with to help wear leveling * SSD @@ -3371,6 +3373,8 @@ bad_swap_unlock_inode: bad_swap: free_percpu(p->percpu_cluster); p->percpu_cluster = NULL; + free_percpu(p->cluster_next_cpu); + p->cluster_next_cpu = NULL; if (inode && S_ISBLK(inode->i_mode) && p->bdev) { set_blocksize(p->bdev, p->old_block_size); blkdev_put(p->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL); _ Patches currently in -mm which might be from ying.huang@xxxxxxxxx are swap-try-to-scan-more-free-slots-even-when-fragmented.patch mm-swap-use-prandom_u32_max.patch swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation.patch swap-reduce-lock-contention-on-swap-cache-from-swap-slots-allocation-v4.patch proc-pid-smaps-add-pmd-migration-entry-parsing.patch