From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793797310; b=lZE8ukQzAI1aSDHeszQikazegY5yM451yyDbDYRgDwQKyU5XuPtzp9d/VFLVEt58e1PE BNpFrwM0z1xCKKDaGZlB0ZgUrOvGzgr4MuFnunbLZquWH07uGQ/x3zhr7Av7/gYV+e8aR B1PMWKHlZ9SEDejApPhxrhJAZUurbtPuIdi91WMWuFjpkPh7aIbglaBTznqsWXJmhW8Zg XCz/+RdklA9rwFnkRgOH+D5fuYzMVQb+xaxunTcV5CL2ovB5QI0/0hDd3Cgp0X4wYnCBz 5nKZeqcN2PMNxnA+ZTS7kiFdSFtkGJoiNk8IokRbxyqE4vCBKpLSXiDj1p2e7fsa4Ow== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793797310; h=Received:DKIM-Signature:Received:Received:X-ME-Sender:X-ME-Received: X-ME-Proxy-Cause:X-ME-Proxy:Feedback-ID:Received:From:To:Cc:Subject: Date:Message-ID:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; bh=I5JDyfdMkj2wCtOOfN649rnZ+9k1JAyMoYfLCV4c9D0=; b=M+Usd+RhoyjWU018dDPP8KCrodhZjCOqnyA7a8qCfcz3dPXbn6P/mrnXvkEQoFKKa1jY tKwN4Il2OLk3hkcjAvBNV6sbSvLNdaEXXoFjNbTsImCh+yPBmh4/OPyjD7jbuJtURHZ1v HzYhTuGVDsCefol5sNeeVs0xUhcHUBZ0E309ZYrbdPE9S8HB8M0/rmAeyG5qRRFKbKtTF kkjDzDQKALHsrhbGUVxtIOCOend072T0Z3BiDv2WuuJlRV/uz/JaNN+pmWK/P25A/R6GH fx2NG8ZTpLHm+25pduD5c+pRWDD5XrFgUeUZQe/0X+SVlyJuu5uveM32AMDTM+NxCeA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Faz3ZjK2; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2094606A330; Wed, 4 Nov 2026 13:01:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=Faz3ZjK2 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 375651F0093A; Wed, 4 Nov 2026 13:01:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793797309; bh=I5JDyfdMkj2wCtOOfN649rnZ+9k1JAyMoYfLCV4c9D0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Faz3ZjK2Csai2VwqGdu5cZgm1R7gHNhAOvUatxXst7kNVDGJtMEIlR04nRTkJw00o J93jsV1xz5rOv0TmN56RwnDBl2DAjjL1JGlbXV38vGVlt+uGI9bO0ags6GCgIbPIdj LC9efBKf7oBCiaEcae2u1IyA+KpVgXJA5vWw9vBiFBtNBtNSwXFSNqXjYc8JkYTAQV fKmejEOKaozskhfLf044dCXODEMfKizop4ijrC9HXIMmUphSa4ijQYYdacyGAvdtev AP9I8ZusXEp1DjbEm1Iagq1oz/0kKnPNjp3hG6xjCnDyXsraG+HVTxX+kbEU6aSaJ/ 0b8BFmpDKpBJQ== Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfauth.ams.internal (Postfix) with ESMTP id 11C551980054; Wed, 4 Nov 2026 08:01:40 -0500 (EST) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Wed, 04 Nov 2026 08:01:44 -0500 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTGcnWxWNdwzviArTqwO8SleswujEAoF3G5cAnzgWuj9VIXYzVn8L/YtSSoCVpDQCx AFAjkaMBKJDECegKseyQPi3BoJ2ULdzgEWHQh0kOOdV3qcZ96T5qYw8zvnYBduU6y+7gOl ju1hRqdfaUd029Zpq0M1QKVfvNYpVJXA03mIXM/FVYF2n1TVZdGxcwDBil6kVRafbiJtv0 QuPNDwYksKVrYzT4QGS7HIxmz8ayVgiPQk5G9zoQji1nSBMTr/zV+0QH6w0a9BT4L54N+d cRhB7KhKgiZgmWNJc1G8l9d+gvjQ75B75nEIsy2loqzEXGvtqjUcmfJ5UhZu2fDzNX4RJx MXTgBiPaExnSeSGdTd2uIQPIf04/vV8GeZZGlCpJD3MJZYqa3/ilpSwupO/6D8DuMuVdgf lRhydXCQ6Xa2S+8DXLnkhoRuc1AjZzapOvhFIm7zq8MW9dqCj5VxcPf4OCv5NvmFJ7UYZ2 W5KDa8ES6KsPHniHYnWGGUwJ2J4K/1PV1PHsiPmmHvenRB0ZPoybQ89E0SeGb9bommOpqP nH7w/zl3rKWJgnqBtibtcvEVgCGNRaGZi5A1a5NqGqAreUQOZZ+flJMakBeKirePoTtvdm jmXr2MmwPG2xEc7XfTnFlMnp2TzDvQD9nw3/qiRcvcRcLHI9+hkvlT78GBIQ X-ME-Proxy: Feedback-ID: i10464835:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 4 Nov 2026 08:01:40 -0500 (EST) From: "Kiryl Shutsemau (Meta)" To: Andrew Morton , Linus Torvalds , David Hildenbrand , Matthew Wilcox , Vlastimil Babka , Lorenzo Stoakes , Jan Kara , Hugh Dickins , Christian Brauner , Alexander Viro , Harry Yoo Cc: "Kiryl Shutsemau (Meta)" , Miklos Szeredi , Miaohe Lin , Naoya Horiguchi , Oscar Salvador , "Liam R. Howlett" , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Usama Arif , Kairui Song , Qi Zheng , Shakeel Butt , Axel Rasmussen , Yuanchu Xie , Wei Xu , Baoquan He , "Paul E. McKenney" , Pedro Falcato , Luis Chamberlain , Ilya Gladyshev , Jaegeuk Kim , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, fuse-devel@lists.linux.dev, kernel-team@meta.com Subject: [RFC PATCH v2 03/18] fuse: don't move a folio with PG_rcu_free into a fuse file Date: Wed, 4 Nov 2026 13:00:59 +0000 Message-ID: <20261104130118.2507513-4-kas@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20261104130118.2507513-1-kas@kernel.org> References: <20261104130118.2507513-1-kas@kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit fuse_try_move_folio() takes the folio of a pipe buffer and puts it into a fuse file, where writes change it. A folio with PG_rcu_free may still be copied by a lockless page cache read that found it before it left the page cache. Such a folio reaches fuse when a mapped file page is gifted with vmsplice(SPLICE_F_GIFT) and its file is then truncated. fuse_check_folio() refuses it only because the flag is not among those it allows, and with a dump_page(). Copy such a folio instead, as fuse does whenever it cannot take one. Signed-off-by: Kiryl Shutsemau (Meta) --- fs/fuse/dev.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 4fec31fc0b84..526929c7b3f1 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -1152,6 +1152,10 @@ static int fuse_try_move_folio(struct fuse_copy_state *cs, struct folio **foliop newfolio = page_folio(buf->page); + /* A lockless page cache read may still be copying from it */ + if (folio_test_rcu_free(newfolio)) + goto out_fallback_unlock; + folio_clear_uptodate(newfolio); folio_clear_mappedtodisk(newfolio); -- 2.54.0