Received: by 2002:a05:6358:16cd:b0:dc:6189:e246 with SMTP id r13csp415856rwl; Fri, 4 Nov 2022 01:51:05 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7bJSPOoO1g28AU8a7+ITFQdb0T0L/JWGwLa4HLHpSvE+F3s84tXWGRmnxcLI2r6eJhYaGo X-Received: by 2002:a17:90a:d396:b0:214:2cff:fbb6 with SMTP id q22-20020a17090ad39600b002142cfffbb6mr12841061pju.224.1667551865624; Fri, 04 Nov 2022 01:51:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667551865; cv=none; d=google.com; s=arc-20160816; b=dJuK2jJ1aHonW/j4bAt82bHeJLyWZjlbGM99zZV6Tzbev7GAn6o2uzh8OHn2MaZ5TY AT44t/3OTzitA3cGwnRcY3+w6BDJDzjxOIo37P8H46dAgilA7Xmga3/AdprbMGW4QrEF pLb9gP615joG8CcIofakctlg+k2wdh4zJBGb9BqbD35V5WvXs7xlTj0re5EXK8uFmFHc Wg4bPf3qBPbID+WxBSOpRIiIYSKVeMh1jW2EHbKaLPSfK8Mpmfg97MDFYJj99uzGc8RK qsaYbeGIe/NUpCIiXgdkGw6Hr8nd0EFcBATmiIZGIUF/Nj6q8H7ajabETedj0udOEtsI jHNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=8NKvZKy6wQ74zo3zDbaRR8/FR7zM1f7nDKYCLgNLsqU=; b=jvtNMbmWg7uamDUBGxn/3lqMCag+pT8lD2LUlCfyUZidSy6PWaFmafVt0S4jwAT58T DoxISLQUruGOBL95pw20A114HiJBkg+vJuHYyLWNj4eYgK4CGGkGV5iJGESpPEW98Iy7 JgMLg/d7PcNkQ8naYl7HWjnPRvCxW+2LtLnIbzCft+cgKci7d/xriHTfyy968w378HAX T1OpQ2b9quGOl+YXbKxVby4JiNBme4bfZ1z7RH3JLF8qZ76UERp9yy5mOxJeCoS41U9d TBCrYNMxepaUd6DKsKAIksGX7c4CbG+uXSnNB4SpqQ2LIxkJ+aNy4D0rHoJsOAywA1ne xMQA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id iz4-20020a170902ef8400b00186ada25ac3si3186050plb.520.2022.11.04.01.50.52; Fri, 04 Nov 2022 01:51:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230389AbiKDH0o (ORCPT + 96 others); Fri, 4 Nov 2022 03:26:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229974AbiKDH0m (ORCPT ); Fri, 4 Nov 2022 03:26:42 -0400 Received: from out30-132.freemail.mail.aliyun.com (out30-132.freemail.mail.aliyun.com [115.124.30.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 358896364; Fri, 4 Nov 2022 00:26:41 -0700 (PDT) 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=ay29a033018046051;MF=jefflexu@linux.alibaba.com;NM=1;PH=DS;RN=8;SR=0;TI=SMTPD_---0VTwBRBs_1667546797; Received: from localhost(mailfrom:jefflexu@linux.alibaba.com fp:SMTPD_---0VTwBRBs_1667546797) by smtp.aliyun-inc.com; Fri, 04 Nov 2022 15:26:38 +0800 From: Jingbo Xu To: dhowells@redhat.com, jlayton@kernel.org, xiang@kernel.org, chao@kernel.org, linux-cachefs@redhat.com, linux-erofs@lists.ozlabs.org Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 0/2] fscache,cachefiles: add prepare_ondemand_read() interface Date: Fri, 4 Nov 2022 15:26:35 +0800 Message-Id: <20221104072637.72375-1-jefflexu@linux.alibaba.com> X-Mailer: git-send-email 2.19.1.6.gb485710b MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [Rationale] =========== Fscache has been landed as a generic caching management framework in the Linux kernel for decades. It aims to manage cache data availability or fetch data if needed. Currently it's mainly used for network fses, but in principle the main caching subsystem can be used more widely. We do really like fscache framework and we believe it'd be better to reuse such framework if possible instead of duplicating other alternatives for better maintenance and testing. Therefore for our container image use cases, we applied the existing fscache to implement on-demand read for erofs in the past months. For more details, also see [1]. In short, here each erofs filesystem is composed of multiple blobs (or devices). Each blob corresponds to one fscache cookie to strictly follow on-disk format and implement the image downloading in a deterministic manner, which means it has a unique checksum and is signed by vendors. Data of each erofs inode can be scattered among multiple blobs (cookie) since erofs supports chunk-level deduplication. In this case, each erofs inode can correspond to multiple cookies, and there's a logical to physical offset mapping between the logical offset in erofs inode and the physical offset in the backing file. As described above, per-cookie netfs model can not be used here directly. Instead, we'd like to propose/decouple a simple set of raw fscache APIs, to access cache for all fses to use. We believe it's useful since it's like the relationship between raw bio and iomap, both of which are useful for local fses. fscache_read() seems a reasonable candidate and is enough for such use case. In addition, the on-demand read feature relies on .prepare_read() to reuse the hole detecting logic as much as possible. However, after fscache/netfs rework, libnetfs is preferred to access fscache, making .prepare_read() closely coupled with libnetfs, or more precisely, netfs_io_subrequest. [What We Do] ============ As we discussed previously, we propose a new interface, i,e, .prepare_ondemand_read() dedicated for the on-demand read scenarios, which is independent on netfs_io_subrequest. The netfs will still use the original .prepare_read() as usual. And as we discussed, in the near future, prepare_read() will get enhanced and more information will be needed and then returned to callers. Thus netfs_io_subrequest is retained as the aggregation for all parameters needed as the internal implementation inside Cachefiles. Jingbo Xu (2): fscache,cachefiles: add prepare_ondemand_read() callback erofs: switch to prepare_ondemand_read() in fscache mode fs/cachefiles/io.c | 42 ++++- fs/erofs/fscache.c | 257 +++++++++++------------------- include/linux/netfs.h | 7 + include/trace/events/cachefiles.h | 4 +- 4 files changed, 135 insertions(+), 175 deletions(-) -- 2.19.1.6.gb485710b