From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45632C3064D for ; Tue, 25 Jun 2024 05:56:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 586786B0328; Tue, 25 Jun 2024 01:56:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 537506B032B; Tue, 25 Jun 2024 01:56:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3FE6F6B032C; Tue, 25 Jun 2024 01:56:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 291516B0328 for ; Tue, 25 Jun 2024 01:56:07 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 7DA971A174A for ; Tue, 25 Jun 2024 05:56:06 +0000 (UTC) X-FDA: 82268350332.06.497F116 Received: from mail-vk1-f174.google.com (mail-vk1-f174.google.com [209.85.221.174]) by imf02.hostedemail.com (Postfix) with ESMTP id C1BEC8000E for ; Tue, 25 Jun 2024 05:56:04 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=fzuDpkmP; spf=pass (imf02.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.221.174 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719294956; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=DOFhycCWHBbJEQrq9FLSxAq+8ycAlK7Oq890nn94zL4=; b=4SMyPfw3O8rP0cREoldbZouGHIPcKR+pmy4HoucOYJ7jexxJ8v/FzkLvVNSzRXQ5ynBuXg 7i7t1Uc17ehmNXC56avSPbjyu31Fln4GRrjgbZwwdHwzATICwVG3cFTpP2B+7ZrdpUc4si vbClkeE0QPq4Lsb9nhVS8FdKl1JL59E= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=fzuDpkmP; spf=pass (imf02.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.221.174 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719294956; a=rsa-sha256; cv=none; b=3jn1g9HIFYF+DMln5D8vEDCBI6k1PZv6F69GZ2B62wePOjf8IiMeIo5T2LKBqbYALM2jhG nt2FWGQrtwYLPWScZ1uqO3kv+b9hdZGWLRLBNuwtLHnRzSpYUCu9gzei41W+9eL6J+TK2A ss7FO3BBPBvmOtVDDBmhT1YHySxs9mc= Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-4ef662a4725so1056555e0c.0 for ; Mon, 24 Jun 2024 22:56:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719294964; x=1719899764; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=DOFhycCWHBbJEQrq9FLSxAq+8ycAlK7Oq890nn94zL4=; b=fzuDpkmP1cMoKO923VJ3bhiVah1Mlrq2XV7f44nfBdFGmEp1sV9ZVFIoukO6GRfGTy np9633z0IGhJvIYhKGrd8d3sPKMFWr8RKEccZ291zkEVc9ZOFWwLIkCC01YfHLZys6H0 pb+lF1w6I67Xn2guQm51dvrZWbM/+6nqTIcHDRCo5SgyiP/64NpSEIjsr7pP/0oR3qS/ 1BwIXpp+5eSTQ5XLKd1Xd1xpaL/rsMtTuz0C4ptArSHdjYFHURL0yJL+TaKZtea8VPNt GZeDWbY7rxi8SHAF7fH7SRzFftwpdgCHCBeorv2pDgWUe/Z6TnTKWHeVYJttMfaZcVCB 8qnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719294964; x=1719899764; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DOFhycCWHBbJEQrq9FLSxAq+8ycAlK7Oq890nn94zL4=; b=kqJtSeHQVvUmUENyVFjLbvKezQTjqk6mHjFMIyH4J1EFJE6l0lyBpnW6G5FcvvzS8J E9tFI/pUH+BHPvzwaeZPNMW4S2sbvjSnjFbjxOoQDVWZheb5exqZ50/FCRGzCPjc0qQO J3yQQeStjVDnoz8tKhB+d34lAwtCrpTo+acf6zvitMfWsL4jDL2tjN9UZ1wRaaqqM2OB CV1YKn48GgvkHNl++I1VMq+fZcbUToC3Wzriwg9fe+yloBKer94ZtGLu0f/0PKum56wS NUdjVZjHyUMgn4PzMdtwK5rIrTip28fTw9ISMexVFtBkdPiW449+B+UqgvO4MDRukoSI eAqA== X-Forwarded-Encrypted: i=1; AJvYcCXis/ODoyQiUEYH7Tv+lY2FtoPfJsyjcdKFGO8ulymqXBbW88IntzJJkAlM3bqQTID//an4J/yon+Ql5S6PIRJ8fPg= X-Gm-Message-State: AOJu0Yz0uelUBKazFatVxyfauPiIe/MypOc9URirEq7Iw7sjXADFvBl/ MmvB1cA7Gz8tqdo5y6v9JyoHa+S9TyUNDPmidbaH5HwNK5cbe0s55ytim72GylEFkdVY6G7yJym XfRswAycBM4wxR1yVKF4dWnc2XKk= X-Google-Smtp-Source: AGHT+IE7T2LcUMcE1A63kLs9QJDaEDTGtUFg7xS+X+MZm0MSQGirxng8mmJ4g8tYXVFqJY2sPGcbFxxlUyITU3dOggc= X-Received: by 2002:a05:6122:4a13:b0:4ef:6b47:3570 with SMTP id 71dfb90a1353d-4ef6b473751mr5401208e0c.8.1719294963866; Mon, 24 Jun 2024 22:56:03 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Tue, 25 Jun 2024 17:55:51 +1200 Message-ID: Subject: Re: [PATCH mm-unstable] mm: folio_add_new_anon_rmap() careful __folio_set_swapbacked() To: Hugh Dickins Cc: Andrew Morton , baolin.wang@linux.alibaba.com, chrisl@kernel.org, david@redhat.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mhocko@suse.com, ryan.roberts@arm.com, shy828301@gmail.com, surenb@google.com, v-songbaohua@oppo.com, willy@infradead.org, ying.huang@intel.com, yosryahmed@google.com, yuanshuai@oppo.com, yuzhao@google.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: C1BEC8000E X-Stat-Signature: nanok6p14p8gq65yf9iqfneuxehm65a4 X-Rspam-User: X-HE-Tag: 1719294964-386194 X-HE-Meta: U2FsdGVkX1/ZUm+0e7hBWq1RkHRBK77K4LL6YCpXba37PVFd5nF0JU9WoPfxBmD6eQwSR4yaMSHOl31TW1UyRp3XEFh8O8D4BjCp2cx7hMg0/F8qag9eLohNETOGBM5R6de0L2syHOralgXexe5Dy7NsC013s8ziu35r2IF4+F/xhDhKGmDPX+t3sUnautzh/RfftHJOsDVsdsya1KVOYhMXgeKzZYi0hSIQRHVv9mzRa6Vl3fX1IOAvM+qJp4xi2d8sGh8y3PmUWEAjoNHJ52LMEyA7Ker7lepo7SmrKwj5UwtLhSUT74UOzAwxTVQMW9JThQ8BAU+iIgGHdHRc66UtvBJtCRNZVaLGSyR00J2dzSIaY8qRtfVOuvDB14iiWEq/onwcHA3ggtTiXXXXrKnlDvJAOVfzZTXHqjkjNjT0KkR2eiZp4DzD+539IkCF318FyJaJNwo05OtI8nHdBlKOdlv3riFP+o2YoMDqD4hRe9xFUxV8Hwq/5IbA/jekjIL2AqX2w8bJBTjzg7vfzpsLxuTGUSzjLJIJWdz6Zh/7qE42sEZ4T2o5EQYnfECOA/HW5KzBVzhGee9Mavc8WbG7uMjmu4dA7nweTjNu+IbSowkF2FGcRZN+T+bjRvWXI+qFA8nzlchtr/Q++8GPXjGC/We93b+xh06QMDOBcKCxEvU3G8RMlp9iOSpZnasHBV7+n8avnnHnZ/5PYeRgGwNxHEcV1l0GTpGAGjdxy2rp8pK5ryI654jw+uTlv63uCMo8TD/sTFaxoYTVdbS+b4lniXBGUhnFxkd1OXT7vz8mUiCLJAPxKf1mMoGfk5A98dnICJN2Hgg59rFhO/lw4Ch6dIHLom81nYPtnDDAlMiRiRMHCrZ0LQbM8SG+nDpjIAQx6ohT/fyyqZcU+H2ff2aBRdciSkVf2mIl0h0hDqvU1XF7m7T+nVzVocJ+xUJrPqFd3RDHMYpGYWbglev PEG/pye9 Y5SsDUNZpaG1XSbxki4ccP7PtSqXN+zGdct5ckAb7NAs0Dkryza7JrwaMY0BiDLx5LxVDWLTZuEap4SWQi/uYkuCaiQX5EGU5j62mN8Hx4u2kmTDJNgyyS6aKh/dhflOadibD7Irw17mrPLTYm/IDXQk0FIcXrBYq4UmtvimwE0CAO7lVKI3il7cVZBVuUe4nTpVPgyQioYjc1rNtTUo7I8KB1hVzHQioDNLsW1AknrJywgfv4KFWEOpmLaAGN/PDqWkODUEVPsmAovFJzI4Nxk9ElVgRyIuiUHxk8Skrvvr079MaPS+D6JBbefiFzQFyDAeH/UgwBVdpSHM8k+8djCqtJPtxdV369V6edPmVNCsLnoM= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Jun 25, 2024 at 5:00=E2=80=AFPM Hugh Dickins wro= te: > > Commit "mm: use folio_add_new_anon_rmap() if folio_test_anon(folio)=3D=3D > false" has extended folio_add_new_anon_rmap() to use on non-exclusive > folios, already visible to others in swap cache and on LRU. > > That renders its non-atomic __folio_set_swapbacked() unsafe: it risks > overwriting concurrent atomic operations on folio->flags, losing bits > added or restoring bits cleared. Since it's only used in this risky > way when folio_test_locked and !folio_test_anon, many such races are > excluded; but, for example, isolations by folio_test_clear_lru() are > vulnerable, and setting or clearing active. > > It could just use the atomic folio_set_swapbacked(); but this function > does try to avoid atomics where it can, so use a branch instead: just > avoid setting swapbacked when it is already set, that is good enough. > (Swapbacked is normally stable once set: lazyfree can undo it, but > only later, when found anon in a page table.) > > This fixes a lot of instability under compaction and swapping loads: > assorted "Bad page"s, VM_BUG_ON_FOLIO()s, apparently even page double > frees - though I've not worked out what races could lead to the latter. > > Signed-off-by: Hugh Dickins Thanks a lot, Hugh. Sorry for my mistake. I guess we should squash this int= o patch 1/3 "mm: use folio_add_new_anon_rmap() if folio_test_anon(folio) =3D= =3D false"? Andrew, could you please help to squash this one? > --- > mm/rmap.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/mm/rmap.c b/mm/rmap.c > index df1a43295c85..5394c1178bf1 100644 > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -1408,7 +1408,9 @@ void folio_add_new_anon_rmap(struct folio *folio, s= truct vm_area_struct *vma, > VM_WARN_ON_FOLIO(folio_test_hugetlb(folio), folio); > VM_BUG_ON_VMA(address < vma->vm_start || > address + (nr << PAGE_SHIFT) > vma->vm_end, vma); > - __folio_set_swapbacked(folio); > + > + if (!folio_test_swapbacked(folio)) > + __folio_set_swapbacked(folio); > __folio_set_anon(folio, vma, address, exclusive); > > if (likely(!folio_test_large(folio))) { > -- > 2.35.3 > Thanks Barry