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 A5ED6C2BBCA for ; Tue, 25 Jun 2024 07:05:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D44186B0200; Tue, 25 Jun 2024 03:05:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CF2B86B0319; Tue, 25 Jun 2024 03:05:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B93AC6B031A; Tue, 25 Jun 2024 03:05:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 99E706B0200 for ; Tue, 25 Jun 2024 03:05:05 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id F0951160AAD for ; Tue, 25 Jun 2024 07:05:04 +0000 (UTC) X-FDA: 82268524128.18.3B5ECFE Received: from out30-99.freemail.mail.aliyun.com (out30-99.freemail.mail.aliyun.com [115.124.30.99]) by imf10.hostedemail.com (Postfix) with ESMTP id 87979C000E for ; Tue, 25 Jun 2024 07:05:00 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=J8y0My6B; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf10.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.99 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719299092; a=rsa-sha256; cv=none; b=MP6pFKzifvoXLD0voFp3Kf8BO9VCc2dRxbblavvSS5+EWH3dDVlY62AhusZPIMmYAJwPaU wL50SYw0+zSYixssLHzizlMxGt0VTyjTXcxr40NLauZl2tqAYt1Nd0aui0otdCrG61VY2Z mj3iEvbMqzIrgAL/rSUeePKm6ITfi/o= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=J8y0My6B; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf10.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.99 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719299092; 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=TCyWfIxYZ617Lw6Wt/fo0of1TWM+Fz/03YPYZQgvzOo=; b=Sj3sPhzsWbl3zYow2EpiLYR8Tv/0MMMGJXSff80oiIEWxpj5WrrqsTwpFKDIQxn64V6RxC CdkFMarVIo9aBXs9xPxBtPbhMHUefBOrvxMiAp2ttx8DTporzfDsNCx5FwTjhsSNvZa7wu n2QYzpHeGp3EZ1DoPNZ//S7GJuHBQoc= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1719299094; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=TCyWfIxYZ617Lw6Wt/fo0of1TWM+Fz/03YPYZQgvzOo=; b=J8y0My6B38xJPND5IOxc2M2+QxwzmDUjB0MZyXvziBB1KPYjMkBNFc5KDVqWfD6tX7FLt2ukdinKBRzsK7t0w85Ry4JmmaKD0Fc1NoNJUNLw3FEPUbHK12ts7ZhDENFWy4Gdod2G2NlQ8hzmb1/MUh5ZlEyeM6WO6zMEQN4Xt9c= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R181e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=maildocker-contentspam033037067112;MF=baolin.wang@linux.alibaba.com;NM=1;PH=DS;RN=17;SR=0;TI=SMTPD_---0W9Ekw83_1719299091; Received: from 30.97.56.75(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0W9Ekw83_1719299091) by smtp.aliyun-inc.com; Tue, 25 Jun 2024 15:04:52 +0800 Message-ID: <0e66d3c8-5059-44e4-b015-40eaf2083e80@linux.alibaba.com> Date: Tue, 25 Jun 2024 15:04:51 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH mm-unstable] mm: folio_add_new_anon_rmap() careful __folio_set_swapbacked() To: Barry Song <21cnbao@gmail.com>, Hugh Dickins Cc: Andrew Morton , 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 References: From: Baolin Wang In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 87979C000E X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: 9z1599y78n5cus7bnzzr79chxh474a3g X-HE-Tag: 1719299100-617632 X-HE-Meta: U2FsdGVkX1+2uIBniB5Xv6NGMJ0sFWplZlWR/DxxLE5krgeIpop9scdOBpC8zIMe3PIZHET41p5QpuVfeynhIt87Yz071gX1IeephZX0yDrX4TmT8erqMKUz0yIDi0ujvhylxJBqxXVv2r9wMTSGEHujoJ0D0MIH9QhlUxeHZ1cAfCm740qkhNyprw9a/CpH8ZISsVT4GCBIYXurFq8VAkShFBJ5amipFBlbOeCPrruXhkueHoX6e7JzSwhutLR1r8cq7FE8C9CC8St3wJeohH+CFwcRnl+JdB0NKr9RUJjGkkOCsuk63fBqz6Tv8/rzMJjJgKThEP7zRveuUkPRpzDj3URLOGr0jS1wE2uyL2vnIgpXUJ9eWGCUfzd775CH0ukJhi2hIRwv2jf+kURaMIS1l3KSk+vPc55vsFrDTjy2z6olbgZzhJX+0o61WAd+8VNGKdhBMgWtTw7zb3KA2oYGuglYQbJJMcps6hfoGk2k17FAOeuDRxG3z2I7N4A0zjnYy/OdOTPhhuQBSI/bg0ZylebTr2Beyap/745QiGaXwuxYSJ2KV+JOf8Tq2Y41G65Gc9RkEg7XpLWG4cc/w0yt3iJ6euL993hCCjGhGQgy+8sCaKA2le9EOX8a+fRIwhHj5ZI4rkDeamV93bjcPxE+SEWtfX0xbcs5/yMrOVzmKsAJMxz0BhSTVcnjOmplETWPqJ4ep1DL9GMJSqlKlLEhdc1fL+DKi4OnbxUTZasf9SJSVUeUJSIf6DU60QLlNvTLZqfFzrx67HgyFE2snb6X6vdo5ltkimPFP0jA73ujlFxOvHb5MqfhfjSfwrFP+wjvntF897zBbjuQQ/3jF6V4VF9ngqAHAdRX4q9l6lTTQbSfdp+OMaS6q1+TWCwPKzOjGYY5aZqZ5SvjsmGgpCHZ9BVrmmdlx1bpgekkAItMmLyEpfzKlTBb3PJeh6qhpjSDZVgkFu0CZq9z9Qq YJ12N8lP +8YujuoR5zP/fHaNYA+oT/dZua+7hEJr6W2hRTgI/bEQSastid2hNLWE5069v437d/jI9GGNFthx+TFHQ9BJrGOTBqqDmzU3HAWvoM1+PBuSPva+V7VISHuI+avuQiUiJnsii5T1cYPZZxeZSi0Cy6cxwJepHDIDi/frR3QD/OMpSOT4DbxBj4/eiLyhwv1VxZ3j10tt12XTgBktjXEXBV/q5u0iA006rhXyuiPFiygmerDylJb2wvaMNjHBVwdNOawRZ3B1VGyqJrN578OSBiAF53wuZcJ2DuMxXjaTz/hX5hSAmOkJlM90xDpO3GP4hNx1j5g+pX5BTk8yiv6FQeMiu2IYQq70nsvXisH0Vgg/XdbLDdSLDd4F7uC9IQEUFDs3TT2YoXBAuuBY= 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 2024/6/25 13:55, Barry Song wrote: > On Tue, Jun 25, 2024 at 5:00 PM Hugh Dickins wrote: >> >> Commit "mm: use folio_add_new_anon_rmap() if folio_test_anon(folio)== >> 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 into > patch 1/3 "mm: use folio_add_new_anon_rmap() if folio_test_anon(folio) == > false"? > Andrew, could you please help to squash this one? Hope the commit message written by Hugh can also be squashed into the original patch, as it is very helpful to me :) >> --- >> 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, struct 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