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 88150C54E69 for ; Fri, 15 Mar 2024 09:30:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0689B8010D; Fri, 15 Mar 2024 05:30:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 01900800B4; Fri, 15 Mar 2024 05:30:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DFCD68010D; Fri, 15 Mar 2024 05:30:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id CBC1F800B4 for ; Fri, 15 Mar 2024 05:30:19 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 8FF88802B5 for ; Fri, 15 Mar 2024 09:30:19 +0000 (UTC) X-FDA: 81898752558.23.A65C501 Received: from mail-ot1-f46.google.com (mail-ot1-f46.google.com [209.85.210.46]) by imf02.hostedemail.com (Postfix) with ESMTP id 90F6D80017 for ; Fri, 15 Mar 2024 09:30:17 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=e1NCVk0q; spf=pass (imf02.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.210.46 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org; dmarc=pass (policy=none) header.from=cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710495017; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=uJKtKRMFEMeF4Mmf4g2WQiKCZWOmuVmsbV5eFf6Z+B0=; b=SUR8Ytw6C1jPCDSICM9bPWKbTk65Cq1uCOQDmTp+YMOJ8Js8SLssiPUvboMvNknusY9mFL IEFPYGzVgfuyMbjwnq3xSuhgCmOlaUaie3LuStfJ+Qmiy7z8vP3zg2BCMd1RtZStzQj9fO A9MMhq69i19slWYAQfioW7QYGx08JRg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710495017; a=rsa-sha256; cv=none; b=FmMAxl0MerpbaR/lElMKG0QrEiXX3CoVllYGdnpiQz2hyz3nSslFXlA7EgFAm6g4IaAbpf n1KBROCEQkJRdddsUvH6Vfd8ZfEEsZUo0xWo7BmKgesjRa741KAyItb7NBUAFMoubwEGmj 7VQYTTYbT9om6b2w+a8WT2btCvzDl30= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=e1NCVk0q; spf=pass (imf02.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.210.46 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org; dmarc=pass (policy=none) header.from=cmpxchg.org Received: by mail-ot1-f46.google.com with SMTP id 46e09a7af769-6e0f43074edso1128903a34.1 for ; Fri, 15 Mar 2024 02:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20230601.gappssmtp.com; s=20230601; t=1710495016; x=1711099816; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=uJKtKRMFEMeF4Mmf4g2WQiKCZWOmuVmsbV5eFf6Z+B0=; b=e1NCVk0qixhaLPkx/7F4DdUamVjdintLjrnXMN/wzY/GjOipfzTmOGA9HW79OwKy5n 6orRhQR66kUM2D/PqltOgSo5iD6uRez/nV2TCp2IzdI+xtXk+YSijeN4IOCMfsfSb4E4 m/gFHqBQhFzEKHkaoQ+tWPjTjLc4h8RixVX79juFQCtZE26SiK+GpoZ9+rRN566T/fdp eeYNH0as9VpfrIcNxxZdeaLbLKwKaYi2i3emmjl+9trrh3RsJgFu7wXe9eIgNGpI3mVO 5bAfNTpeM8Gq1GX177k/PMXPeUR8WszhlzrFUcMnE70GdlxjcWS0g4cvJgvGcCxU1s0B 7hVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710495016; x=1711099816; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=uJKtKRMFEMeF4Mmf4g2WQiKCZWOmuVmsbV5eFf6Z+B0=; b=Qxg6x98oSM5zKGhx0lURnhujqB6Pp00OaFuKA0xrcWJNluqJWs59pF2OmQrHGKo0vx XB6kU2Q/GPOUikm1gS5omdZNuiqnghHwc1A5yBnh2a5xlXI37IeOojEZfWPkSFelQjvl W7Z8nWWx/ex3/j0zi4L/j9l0NkZEgnLo0GERVW0XDL6ZNbGA6RMdLaTqhD2GRPI9YUlm JcPAEUvWWgayECF4peGhmSiHPyQcKKUD6FtbIOJDf4Y1+20xVyy0YvO4Bki098bEd0ma vDfzL7Hfo8Vvzj1IYol4+vtkpjfN5G3cDqXDBNQEskadILf/feOJGQbWvhLv3txddQBy vbkg== X-Forwarded-Encrypted: i=1; AJvYcCU+ycr9s9MU+nqocz0zjNajdEVh3MCYuDPP9VfYQb1bKp9Jhy2BAvsvnyGoQbXTCtMerQt4PcZhk9mxfSMku9+HLvU= X-Gm-Message-State: AOJu0YzSLOHcK+smrQONVAWDXsCnp+jsZ3ZllNDcgWZ4Xt5OY7jA+U2I DscYhdephcJ+xDtLJ99cxNxHKNTYbPu3arQ8g1+T2QHx00JRVnGZKu8uH88zrIo= X-Google-Smtp-Source: AGHT+IFp2YoYUbwxHkcAKgs6oStQ1bHx0LsiJ10qDtFcXvMcWAyBXweqXXH4+sXdBr0mHY4jwRrJgA== X-Received: by 2002:a05:6830:928:b0:6e5:23d8:a4c5 with SMTP id v40-20020a056830092800b006e523d8a4c5mr4159356ott.34.1710495016530; Fri, 15 Mar 2024 02:30:16 -0700 (PDT) Received: from localhost (2603-7000-0c01-2716-da5e-d3ff-fee7-26e7.res6.spectrum.com. [2603:7000:c01:2716:da5e:d3ff:fee7:26e7]) by smtp.gmail.com with ESMTPSA id b18-20020a630c12000000b005dca5caed40sm2072175pgl.81.2024.03.15.02.30.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Mar 2024 02:30:15 -0700 (PDT) Date: Fri, 15 Mar 2024 05:30:10 -0400 From: Johannes Weiner To: Chengming Zhou Cc: Andrew Morton , Nhat Pham , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Jann Horn Subject: Re: [PATCH] mm: cachestat: avoid bogus workingset test during swapping & invalidation races Message-ID: <20240315093010.GB581298@cmpxchg.org> References: <20240314164941.580454-1-hannes@cmpxchg.org> <1551fa14-2a95-49fd-ab1a-11c38ae29486@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1551fa14-2a95-49fd-ab1a-11c38ae29486@linux.dev> X-Rspamd-Queue-Id: 90F6D80017 X-Rspam-User: X-Stat-Signature: iw6ff8s5kxs6ahrncb7p3nzqc413b45w X-Rspamd-Server: rspam03 X-HE-Tag: 1710495017-635405 X-HE-Meta: U2FsdGVkX1/pOMraOVot6Ui9titSnQOl+eqeQwIYZaHfBJbb9Xns32ZKQRdBFfdjT+cNXRSrceiCzT4xyLF8wLmhdmaoE08u4k8Qy5GNS3AGuOj6pj+QOKBwdZAJShQq8R9+1YWVWcO9y+CdrCLDGR5iGM187QVSZ4OKWfaUzvhQU1dI7sDimXJE3L2uDogX2pIW/8zk0kVYbFUlSnC7DadRrRAi1b2YJo/eqkQJYPN5kjC+2wiTyRipAnmPgUoFTROiGcS+3d65/cVgKZEPZFXHWrLtW2fvUddd+QRxk9xT/H5i993Tu4cOWNtcI5X01hYuKwvBWvaLevXm6PLmOb0Jcp7xRz8OuDbmdRzMU55N0TUHhFLmJySX17kZUGJSG/b8uRiCwsh+wmeIinagUdzRY6QEnh3Nn5GC1MrzrFy7EyY+6xoXT1by1VL+XrGEengmqfwpoPnlPGxVdBD4dsdVDxPY0IQqa9I1/VTWjVcrK1MD8KjXucOchfhdP8N26BFuwufbL7DW9AOkAWOoxBLykJ3xLGWEaS+y6Y87wFI10qlj4rTjQ6pDwQ8XLXjldL4r7vXLFTks3zdlW950eaCyFITMVPNcszLC+5Ze6XPk7ZyDLXnhOqin0w6MlCAFB/IgVad1XTbu5XFpZpCOmYhC+m1gmd8tj04KGd1K57yT8NWooLyAhuY/JgkKNowaDK+/lAFBytq+zFv7ixSvUejBtCYKhxiR+b+qRHCyd0C9wVeNhdT4K6wj/fa9fwXDJu3nZ1K7RJWG07hdqnGXvqkT3flohUgvJOJLqRUnay4nd5jCrMpdosbal6aKnhRhvPIQNUSOwM6N41R9CxYIV3MSMwPc3WMrJVxMwIkIVrfhYKF/svbSCBiBTJQpBr2IF6tNwykFRU2DtmISXVHEjGbTaYBMTOW1fxfLyMCZDjw+1rBPItdIVpcQEkZzAAKBbe1rkwQroLMb2+WXtVl RYkIJE3q ca+bc1hgLoXEW37cIy5J3nFXsb4REHJefUeBuDZS2+FP8Vyq3Wwh0JSa3ymGtjTXfYZVsDtMxcbdkVTTUENSPw6xfn1bvVOaefDHC+9HcF86ke0P6XOf32JKx5xWefa2MEA1UO9w7t31J23M= 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 Fri, Mar 15, 2024 at 11:16:35AM +0800, Chengming Zhou wrote: > On 2024/3/15 00:49, Johannes Weiner wrote: > > When cachestat against shmem races with swapping and invalidation, the > > shadow entry might not exist: swapout IO is still in progress and > > we're before __remove_mapping; or swapin/invalidation/swapoff has > > removed the shadow from swapcache after we saw a shmem swap entry. > > > > This will send a NULL to workingset_test_recent(). The latter purely > > operates on pointer bits, so it won't crash - node 0, memcg ID 0, > > eviction timestamp 0, etc. are all valid inputs - but it's a bogus > > test. In theory that could result in a false "recently evicted" count. > > Good catch! > > > > > Such a false positive wouldn't be the end of the world. But for code > > clarity and (future) robustness, be explicit about this case. > > > > Fixes: cf264e1329fb ("cachestat: implement cachestat syscall") > > Reported-by: Jann Horn > > Signed-off-by: Johannes Weiner > > --- > > mm/filemap.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/mm/filemap.c b/mm/filemap.c > > index 222adac7c9c5..a07c27df7eab 100644 > > --- a/mm/filemap.c > > +++ b/mm/filemap.c > > @@ -4199,6 +4199,9 @@ static void filemap_cachestat(struct address_space *mapping, > > swp_entry_t swp = radix_to_swp_entry(folio); > > > > IIUC, we should first check if it's a real swap entry using non_swap_entry(), right? > Since there maybe other types of entries in shmem. Good point, it could be a poisoned entry. I'll add the non_swap_entry() check on swp. > And need to get_swap_device() to prevent concurrent swapoff here, > get_shadow_from_swap_cache() won't do it for us. We're holding rcu_read_lock() for the xarray iteration, so if we see the swap entry in the shmem mapping, it means we beat shmem_unuse() and swapoff hasn't run synchronize_rcu() yet. So it's safe. But I think it could use a comment. Maybe the documentation of get_swap_device() should mention this option too?