From nobody Mon Sep 28 15:34:28 2026 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A0E8388E53 for ; Thu, 20 Aug 2026 06:44:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787208290; cv=none; b=IzV6Mg0H65hL5G1sQRPD2b6DKoyB0+cZnzzTCoWj76TRiQu8WLDbDwqBe6NesbT4aF7byguKnpihRdpV89SeTBXbZdavO70DXObA/BrvQ+ygiBeR+qNLQmopzk/PgRETXE2pNNS6YCu614ybPXKouhVCmi0T73nJgd3bqpedsmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787208290; c=relaxed/simple; bh=AwtLoKAosvMOLvoxlYpmLWIe77jha9edTGR5LP/P6kM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=nXXN4rTAkWdLN0QrEMbHE1P5iDT4G8Ngx78c5Aahg1W6ocytG5HxzCo7hiGtNYM93OKapv8U73/dyyRY2SQ36jNKkJC1yX3XY0gbqSseF6ONqaBjcso56ph/sRKlQLx8x8pSTWEJAVCmevP9fEEvDneFpFmOiwYDBMd5d1DW1VQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=p+gw1qTk; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="p+gw1qTk" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2cacf197759so24350225ad.2 for ; Wed, 19 Aug 2026 23:44:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787208288; x=1787813088; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=YfVzXFvKOR32XDZBxRNLOvcTMqLAQDvf/lKqqU77i4k=; b=p+gw1qTkgAtRVIXCbJaUv/WWSfrJ3Nm8epM8ZIaoo8GbWmx5/vQVfx/39cShuTsjWr lNlUaFIZzuC7jVgwBsqiK+l+u0SS4neYDEnvl3pp4QpK90bv3mUVdU/mR1ks+lbTFSN4 155MUZeup/xQ8BehyWmn5Uw7gSYIQekIAetNOq6ViI6BhmcmFDLv1VViKp0qoSnxoQSi c2O/Wp/WMZwKM0c97OqXNMleBV0xAUIpQrqZOMNKAqsMlQGIx2IGXSSb1xnMsD97TIud a+IglPHHEP6LVJwbiDVf+Ybly0Gs0HPOzXokO9OZbmiwE91lsNp9vbCH6N+lU1Nwbpjn vjxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787208288; x=1787813088; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YfVzXFvKOR32XDZBxRNLOvcTMqLAQDvf/lKqqU77i4k=; b=fJD66ipghluj4IvkvUhFkGbs7fc2nZuSYeD1H/uMirtlr0IqMaA3nhr6xVTR7YRyOT wNph0lQ8cQ1OGTi9UmJ0PXMmMpZAP0sZ7ZbhQ4N5K2u3IABfuVIlGdUm8Ifuxam9dqf/ JXs3IeY1OHtbtyoZjZbzavdDcLoTfcJTT2podxkJ9hRQujD87TvP0teKrU19wBolTyfC 3/WAH+YN7/kqUUqHApEuFV1vyqzm8GnBtCkbHrfPQFvV7m//QjZOcckwR4COROpLBVoL vC6gjAhqEGX94Y5omXlTV2h4WSnGx6SbOvIkfuZuE4ivF1QETf3AAhxiFmteVz5jQiKW yvkg== X-Forwarded-Encrypted: i=1; AHgh+Rp/0FUXBoI1JiT/QuYbBwv5IKOJNaUsjg525dT9g7gIfWE209Qr1MTndwawIi0Jv1NZF0lcLp30lRXqfqk=@vger.kernel.org X-Gm-Message-State: AFuF++lSWtrqPqR1SSU0A6LQ3cXtwlnprdg3IZ+jTUClTmmYOiHcElFO Kd4dsxeCcpiV0sSrjDooCmVTqMz6C2guwUZphOfFyiVm2ZGKrIMnDETy X-Gm-Gg: AR+sD11ZtD2ac/mPR3kBsz3yTILJRCBe9a9UlEcKihVPMi/V1aexhl/aLmMvK22A9MZ lhX12GI5T1DaJayudNqo81yjbI/UF/uC19qGmZK/Ap9T9XUojRZzPCVK41keRvBt31/KnJzDaPJ NyBQSNR7M2OTdSyET6AiDUtKpBuIdPfntcgOJF5PrtwA6GZLPQ9dPEFv5o+RTyi3exbXNZyPcEG KCb3ydB45znCOBXNyPt+uKuOs2b9wTQ2zfcUMmRydGpdG5uf0CUdX3IT2ZR1wBOIwrw2I8Z+ovF xGEqI0Ht0x1RM81pw4MIMNS3joRy3SzjEjXG6CKYI9/8DNcxk95edmMZyqrxFhN+8o63xDIgF8J 0+GBOQixxxh40F0NrP/Eq+t7mqCANx9rDDME8pfylgR7n8ZAar1aK3uvo9CUjUr7emv/GBcS7pz t57jDvMNplYRv5RtK5NOaWR6uuyaQRaUBX0n1Ob2Jqe9ameIzcEtRUlgZhX8/dqIhF6/oTWGPz X-Received: by 2002:a17:902:f68b:b0:2d3:7887:7e7f with SMTP id d9443c01a7336-2d601859936mr194245245ad.11.1787208288465; Wed, 19 Aug 2026 23:44:48 -0700 (PDT) Received: from osman.mioffice.cn ([43.224.245.178]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d62d554411sm2976085ad.10.2026.08.19.23.44.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 23:44:48 -0700 (PDT) From: Zhan Xusheng X-Google-Original-From: Zhan Xusheng To: Gao Xiang , Chao Yu Cc: Jingbo Xu , zhanxusheng@xiaomi.com, linux-erofs@lists.ozlabs.org, linux-kernel@vger.kernel.org, Zhan Xusheng Subject: [PATCH] erofs: use the shared page cache for splice in inode_share mode Date: Thu, 20 Aug 2026 14:44:41 +0800 Message-ID: <20260820064441.1083470-1-zhanxusheng@xiaomi.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zhan Xusheng From: Zhan Xusheng erofs_ishare_fops routes everything that touches the page cache to the backing file in ->private_data: read_iter clones the iocb onto it, mmap does vma_set_file(), fadvise calls vfs_fadvise() on it. splice_read was left as filemap_splice_read(), which works on the user file's own mapping. filemap_splice_read() does init_sync_kiocb(&iocb, in), and filemap_get_pages() then takes iocb->ki_filp->f_mapping, so splice() and sendfile() populate the per-file page cache from disk instead of using the shared one. The data is correct, since erofs_fill_inode() sets that mapping's a_ops either way, but the same content ends up cached twice, which is what inode_share is there to avoid. Pass the backing file, as read_iter already does. Fixes: 5ef3208e3be5 ("erofs: introduce the page cache share feature") Link: https://lore.kernel.org/all/b7dc7192-d586-45a2-bc4a-b41dc681c9bb@linu= x.alibaba.com/ Signed-off-by: Zhan Xusheng --- fs/erofs/ishare.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/erofs/ishare.c b/fs/erofs/ishare.c index fa7d4112dec5..01dc53e9e3ad 100644 --- a/fs/erofs/ishare.c +++ b/fs/erofs/ishare.c @@ -148,6 +148,13 @@ static int erofs_ishare_mmap(struct file *file, struct= vm_area_struct *vma) return generic_file_readonly_mmap(file, vma); } =20 +static ssize_t erofs_ishare_splice_read(struct file *in, loff_t *ppos, + struct pipe_inode_info *pipe, + size_t len, unsigned int flags) +{ + return filemap_splice_read(in->private_data, ppos, pipe, len, flags); +} + static int erofs_ishare_fadvise(struct file *file, loff_t offset, loff_t len, int advice) { @@ -161,7 +168,7 @@ const struct file_operations erofs_ishare_fops =3D { .mmap =3D erofs_ishare_mmap, .release =3D erofs_ishare_file_release, .get_unmapped_area =3D thp_get_unmapped_area, - .splice_read =3D filemap_splice_read, + .splice_read =3D erofs_ishare_splice_read, .fadvise =3D erofs_ishare_fadvise, }; =20 --=20 2.43.0