Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp444126pxu; Thu, 3 Dec 2020 04:25:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJyTNYu0uWka6/oPaPsKRdAT96Op/kj6lEBRLuIF7ByBMt+EnY1Dzxnh7Dj7Tba2WSND3MTN X-Received: by 2002:a05:6402:128d:: with SMTP id w13mr2560908edv.56.1606998327604; Thu, 03 Dec 2020 04:25:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606998327; cv=none; d=google.com; s=arc-20160816; b=0jo4rhXx8jQ+Uo/J/mg1xR0bDtwXJHVWaBiLnkdwJql9aL5ztUtxp6mqs9Wgani4Xz VRwPt78aEWw+dT52m63N1gTUMRiJkq1MH338Q0yxKXeoQp+3NrzgZbrnhzGk8Iv5cPmQ Lb9IduCvGyZAkPwhLcPT/FKzTO3wd4F5E6tDNlH3sKPIjDmy9RIHxnDtyj6HoTvIyn20 oYjL7nkPz3Vxgz5v+hbCxg+5Ib9Qd5ygq2Ob4PlyUYROeat7GbVcdPMZA2Ua4BMbl2bq T9G007h3HfJ4oIIXEDiFgGmaEmPoyomnc5QMCK0E6otvHn/nvm7Mz9aREPjVdXiW2m+V dKug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=0YG4wbx5uXn5ZVc8LUjokfiUnek0XP00ZZjOe0WJxYE=; b=0PyzstQgcvFCH1VWR5x4PAWPbLQS/ULVgmSD4e5L/jW5ruP1J3Ngpq61vxJabaVMJw W6L2yXRv4SXnl2kHbdPIVeIv4MGKRi6BDAFmp6yLL2d4NHj5iNZgKSczlxJqAKM/PCrl 0+FaN49B4IzlQ8e7RGnba0WgiHjZxEyAZivq4IZ71a+JsK730+Ji9exg8rYFk8hkV2Bp DO0kGgY4Dm9E1QHpjX5AtDtxzC/CZU02sLe6ptgtDWR0JhAIUNRFj5gAVmlRgpE6DPWv ci54LZNh/9x+BhsSnVNn8lz7wT0hIVjwlRBZdzi0Vv/1Y6g5aLBjlwM4IC2LujeFV3sK IcIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=htPUd+Nf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y16si817188edm.321.2020.12.03.04.25.04; Thu, 03 Dec 2020 04:25:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=htPUd+Nf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730423AbgLCMU5 (ORCPT + 99 others); Thu, 3 Dec 2020 07:20:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48304 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727845AbgLCMU4 (ORCPT ); Thu, 3 Dec 2020 07:20:56 -0500 Received: from mail-qt1-x842.google.com (mail-qt1-x842.google.com [IPv6:2607:f8b0:4864:20::842]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A032C08C5F2 for ; Thu, 3 Dec 2020 04:20:03 -0800 (PST) Received: by mail-qt1-x842.google.com with SMTP id z3so1106884qtw.9 for ; Thu, 03 Dec 2020 04:20:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=0YG4wbx5uXn5ZVc8LUjokfiUnek0XP00ZZjOe0WJxYE=; b=htPUd+NfDQhpS40j5lrHjNKKG7rGEqt/XAy15Gy4jCIT+ysNxBMY/VqgcC+2pbu0KM IgRe+7LoUCUovVJ3nAoYy+UTw57vLIMPhyMQccinnfj9GxV88/ZtM0yXOekmaoCxR6gQ fOHKpeOVgYwPC/CrVdoIpBFi6xC9hLtegzFyAe1Bp/TdUxABJ3RKwvc69b3CddXXutql qQJqNod4dekUrMD4lOdSXwzSGIyM1PTkb9c/0ZW+KQepDDZNr5/Pmf3AqaXgc9OJPVwH ZyA36V4QZURCtvFHBiDDJVT9f36gEXXmvaC6M9yx8kqWbT+9To7Z2Zgx7vfGBnh0/IJ0 SAkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=0YG4wbx5uXn5ZVc8LUjokfiUnek0XP00ZZjOe0WJxYE=; b=oxmGKxLw2HsdAYBeKWEvIOzBExtj6NQlsGVQx57IGPcaASCRzsGxaFFn2viaLpHGmb GTg2wwo+PDnEoQydRVtQQpmgbQpqGQJ7CJX1IiSFjF7PLYTsILGQYvsbtC5qeGxmbBzD Ud6w9+aSt6C9EXvxObntBSt87lGbf/EnKlagE7AmcVr+q6eMJoIQNdBtj1qPhUK9Tjx5 iFDfBcLuC1sj5sC0N1JxiPlwJzPg3WZ+KOFbPTa/BWRklnLRtya66v0WQJJZ+JS8hrx2 t4b19V2NbqQm0ibeZCMIVK4ARZ6RcGnnielK6FUgY4re2ZMTnRT0n/MY9CevvMPPQaDQ 6uAQ== X-Gm-Message-State: AOAM531hcDcYLUPELh3Afmg9uhxtcUvS0tdh70BOriOtpADwgWEMn23J Hymuy8gAApIWMPzZGgFo/o4kNavoFrBs74Z008Eu7tMh+bg= X-Received: by 2002:ac8:3a84:: with SMTP id x4mr2805779qte.55.1606998002440; Thu, 03 Dec 2020 04:20:02 -0800 (PST) MIME-Version: 1.0 References: <1606995362-16413-1-git-send-email-zhaoyang.huang@unisoc.com> In-Reply-To: <1606995362-16413-1-git-send-email-zhaoyang.huang@unisoc.com> From: Zhaoyang Huang Date: Thu, 3 Dec 2020 20:19:51 +0800 Message-ID: Subject: Re: [PATCH] mm: fix a race on nr_swap_pages To: Zhaoyang Huang , "open list:MEMORY MANAGEMENT" , LKML Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It is show_swap_cache_info() which races with get_swap_xxx On Thu, Dec 3, 2020 at 7:36 PM Zhaoyang Huang wrote: > > The scenario on which "Free swap -4kB" happens in my system, which is caused by > get_swap_page_of_type or get_swap_pages racing with show_mem. Remove the race > here. > > Signed-off-by: Zhaoyang Huang > --- > mm/swapfile.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/mm/swapfile.c b/mm/swapfile.c > index cf63b5f..13201b6 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -974,6 +974,8 @@ int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size) > /* Only single cluster request supported */ > WARN_ON_ONCE(n_goal > 1 && size == SWAPFILE_CLUSTER); > > + spin_lock(&swap_avail_lock); > + > avail_pgs = atomic_long_read(&nr_swap_pages) / size; > if (avail_pgs <= 0) > goto noswap; > @@ -986,8 +988,6 @@ int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size) > > atomic_long_sub(n_goal * size, &nr_swap_pages); > > - spin_lock(&swap_avail_lock); > - > start_over: > node = numa_node_id(); > plist_for_each_entry_safe(si, next, &swap_avail_heads[node], avail_lists[node]) { > @@ -1061,14 +1061,13 @@ swp_entry_t get_swap_page_of_type(int type) > > spin_lock(&si->lock); > if (si->flags & SWP_WRITEOK) { > - atomic_long_dec(&nr_swap_pages); > /* This is called for allocating swap entry, not cache */ > offset = scan_swap_map(si, 1); > if (offset) { > + atomic_long_dec(&nr_swap_pages); > spin_unlock(&si->lock); > return swp_entry(type, offset); > } > - atomic_long_inc(&nr_swap_pages); > } > spin_unlock(&si->lock); > fail: > -- > 1.9.1 >