Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp1589695rwb; Wed, 16 Nov 2022 21:42:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf5igz+HJhUHIxbaO8Afped/HHyHEQk1OjLtUPwwauTRVXtf0o40jruPCJPBv37W3xYbW9uG X-Received: by 2002:a17:90b:681:b0:213:ff80:1828 with SMTP id m1-20020a17090b068100b00213ff801828mr7259008pjz.31.1668663743413; Wed, 16 Nov 2022 21:42:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668663743; cv=none; d=google.com; s=arc-20160816; b=UsYZY6Pq/Fj5qB+uQ0l4q2qvZ3d/FZ77wkVvs/L5HNjB+v8XqUU4jB3V70LA5S7dq1 2P5iZMGXleObgeUh5MmAmB2farVc3nS8MSsYs299u4Ob5ss/zZclja+AsjMIujsdxs2j Z39i58JQ+qvCu7P5RcHyYA7XH4TfzzZt0zHZNHXE5W/jcW6c/QiwkPQg8XWjUeru+Zrc 70MiWy/l50dO8ok+Mr4PnAahzO5YHJUh/Yy3WVqDQ1U6tMBdJEwLCCYKfBHadqdjY5AW ZnwFNX3LYnGxAK8VoosvWdzSL4yHwV3qEfH1xNjqqKXsTzYiQELn3DSuiwN0ojKbqNta wx0g== 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=Q7EIjmTR7QNpPWdDMyKpZZGRE0k8xYPRVEwMlkRmUYQ=; b=hypp4D1FzSQzVE4vi1unzpoA1W0WDOz5A+S4+GjN1TpZyAMF8M8+CAXc5t057yGxv3 +C8mbtupRubyAn5ddxchghB8s08yUPIEmci4GRxGERWh3LfzEqvxetSa5mlM6b0Ln66Q H8Jci5Z6tTtDjivdw6knynJAsoJQePXb2rSfiI05k2TIeBRRBD5dmT0ib+K1tfpUnODi w/ygydSv7qnEOQ8AvxDEzb0EL0mwjofovIUDdDIhzH4vu/go6xJjozvIPKB02a8dw+Im 270nmY+VDSgzy+3uC4m2k6Kyl/eavWU1r+HogNKKRRHovUeszDUGTSzjRgJ6RLlt2lBc 3vfg== 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 jb20-20020a170903259400b0017840d9d579si150231plb.67.2022.11.16.21.42.09; Wed, 16 Nov 2022 21:42:23 -0800 (PST) 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 S234189AbiKQFaY (ORCPT + 91 others); Thu, 17 Nov 2022 00:30:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229451AbiKQFaW (ORCPT ); Thu, 17 Nov 2022 00:30:22 -0500 Received: from out30-56.freemail.mail.aliyun.com (out30-56.freemail.mail.aliyun.com [115.124.30.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F249532C6; Wed, 16 Nov 2022 21:30:20 -0800 (PST) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R161e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046049;MF=jefflexu@linux.alibaba.com;NM=1;PH=DS;RN=8;SR=0;TI=SMTPD_---0VV-W7uG_1668663017; Received: from localhost(mailfrom:jefflexu@linux.alibaba.com fp:SMTPD_---0VV-W7uG_1668663017) by smtp.aliyun-inc.com; Thu, 17 Nov 2022 13:30:18 +0800 From: Jingbo Xu To: xiang@kernel.org, chao@kernel.org, jlayton@kernel.org, linux-erofs@lists.ozlabs.org, linux-cachefs@redhat.com, dhowells@redhat.com Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v4 0/2] fscache,cachefiles: add prepare_ondemand_read() interface Date: Thu, 17 Nov 2022 13:30:15 +0800 Message-Id: <20221117053017.21074-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 v4: - patch 1 - make cachefiles_do_prepare_read() pass start by value (Jeff Layton) - adjust the indentation of the parameter/argument list, so that they are all lined up (David) - pass flags in for cachefiles_prepare_ondemand_read(), so that it can tail call cachefiles_do_prepare_read() directly without shuffling arguments around (David) - declare cachefiles_do_prepare_read() as inline, to eliminate one extra function calling and arguments copying when calling cachefiles_do_prepare_read() (David) v3: - rebase to v6.1-rc5, while the xas_retry() checking in patch 2 has been extracted out as a separate fix [1] [1] commit 37020bbb71d9 ("erofs: fix missing xas_retry() in fscache mode") (https://github.com/torvalds/linux/commit/37020bbb71d9) v2: - patch 1: the generic routine, i.e. cachefiles_do_prepare_read() now accepts a parameter list instead of netfs_io_subrequest, and thus some debug info retrieved from netfs_io_subrequest is removed from trace_cachefiles_prep_read(). - patch 2: add xas_retry() checking in erofs_fscache_req_complete() [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. Jingbo Xu (2): fscache,cachefiles: add prepare_ondemand_read() callback erofs: switch to prepare_ondemand_read() in fscache mode fs/cachefiles/io.c | 77 +++++---- fs/erofs/fscache.c | 260 +++++++++++------------------- include/linux/netfs.h | 8 + include/trace/events/cachefiles.h | 27 ++-- 4 files changed, 164 insertions(+), 208 deletions(-) -- 2.19.1.6.gb485710b