Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp3122404pxb; Mon, 4 Apr 2022 08:17:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwHgDj2hBrFMwNPWD/4V2cWft44IyudEMNxQNV2s2JZ3ah3xDiM5b/BtbWlV2ZEKWxRnh7H X-Received: by 2002:a17:906:6a0a:b0:6e1:1af8:4a88 with SMTP id qw10-20020a1709066a0a00b006e11af84a88mr549181ejc.608.1649085421259; Mon, 04 Apr 2022 08:17:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649085421; cv=none; d=google.com; s=arc-20160816; b=RjxJIVEoLW4SwQ7ThhUwbafA9SGZGXpHtPe6mdPXIypeBZoa1If/hZpLGj87nu1NEM 1GJ3sNU57h/CAKGtf9QiWM3lzP6UCrTOiNbngFp7625g6nv8qXLR8rZeR5lhG3MtY9Uw FAt8F8ZzfRvt8X1D+KO8lTtqnEVuggcVTSvklXoB9O+WuR2eW95P91xeIxaMGQl+/qOn K0ICgK+4glaplI9FUpI+HZe0BnSeE7dSGBmoZYMkJn53I5i30vqw8yGOyJO3GSw1dOMS dO5Te7LjkfunL2tK2/bCKIQb1yG+GdfakfAi+BJnGmv9ffMKi+DMqndglqFzKsMXqJNm uRRg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=nkqAFQDNtyxdT5hWz0tJSogIqUwF5RYNs8Ol7YrgPfE=; b=up+CXM3a5hyvjCgKXGByYgGkM5OQEj0bh0xBrnXJ06sRUcY40ck3W216OREm33d0FX E6TC4L0Foe51vIbxIFZ2kGV4zQlmXQmrHgIM4gXXAj7/92y/x0XEomFnnse9t0WO5z7B 9HNTv03lYT1rFIDtb8cjRPO6RYR4K4HPspBr8dZ9Q6wJP1E+BdtCfR6Yax/HxNmZvaav CfVPhZy8sUtTkX5aPp9D1jq2hU/YcAapmOd91padS6hfyWPbnnPAd2mJm7OxjM+6gyxO No7Xq6X+RunACFnJVqO07E1G3VWg4++K4QEJPSvuSD5kUN/9iDXEmJUCzVgKUCSR/xzU 2K5g== 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 u7-20020a50d947000000b0041c7cde74fasi6167211edj.308.2022.04.04.08.16.34; Mon, 04 Apr 2022 08:17:01 -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 S235624AbiCaMBc (ORCPT + 99 others); Thu, 31 Mar 2022 08:01:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235559AbiCaMAm (ORCPT ); Thu, 31 Mar 2022 08:00:42 -0400 Received: from out30-131.freemail.mail.aliyun.com (out30-131.freemail.mail.aliyun.com [115.124.30.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B0B3BC8F; Thu, 31 Mar 2022 04:58:19 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R121e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e01424;MF=jefflexu@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0V8iijrF_1648727895; Received: from localhost(mailfrom:jefflexu@linux.alibaba.com fp:SMTPD_---0V8iijrF_1648727895) by smtp.aliyun-inc.com(127.0.0.1); Thu, 31 Mar 2022 19:58:16 +0800 From: Jeffle Xu To: dhowells@redhat.com, linux-cachefs@redhat.com, xiang@kernel.org, chao@kernel.org, linux-erofs@lists.ozlabs.org Cc: torvalds@linux-foundation.org, gregkh@linuxfoundation.org, willy@infradead.org, linux-fsdevel@vger.kernel.org, joseph.qi@linux.alibaba.com, bo.liu@linux.alibaba.com, tao.peng@linux.alibaba.com, gerry@linux.alibaba.com, eguan@linux.alibaba.com, linux-kernel@vger.kernel.org, luodaowen.backend@bytedance.com, tianzichen@kuaishou.com, fannaihao@baidu.com Subject: [PATCH v7 14/19] erofs: register fscache context for extra data blobs Date: Thu, 31 Mar 2022 19:57:48 +0800 Message-Id: <20220331115753.89431-15-jefflexu@linux.alibaba.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220331115753.89431-1-jefflexu@linux.alibaba.com> References: <20220331115753.89431-1-jefflexu@linux.alibaba.com> 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_H5, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, 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 Similar to the multi device mode, erofs could be mounted from one primary data blob (mandatory) and multiple extra data blobs (optional). Register fscache context for each extra data blob. Signed-off-by: Jeffle Xu --- fs/erofs/data.c | 3 +++ fs/erofs/internal.h | 2 ++ fs/erofs/super.c | 25 +++++++++++++++++-------- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/fs/erofs/data.c b/fs/erofs/data.c index bc22642358ec..14b64d960541 100644 --- a/fs/erofs/data.c +++ b/fs/erofs/data.c @@ -199,6 +199,7 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map) map->m_bdev = sb->s_bdev; map->m_daxdev = EROFS_SB(sb)->dax_dev; map->m_dax_part_off = EROFS_SB(sb)->dax_part_off; + map->m_fscache = EROFS_SB(sb)->s_fscache; if (map->m_deviceid) { down_read(&devs->rwsem); @@ -210,6 +211,7 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map) map->m_bdev = dif->bdev; map->m_daxdev = dif->dax_dev; map->m_dax_part_off = dif->dax_part_off; + map->m_fscache = dif->fscache; up_read(&devs->rwsem); } else if (devs->extra_devices) { down_read(&devs->rwsem); @@ -227,6 +229,7 @@ int erofs_map_dev(struct super_block *sb, struct erofs_map_dev *map) map->m_bdev = dif->bdev; map->m_daxdev = dif->dax_dev; map->m_dax_part_off = dif->dax_part_off; + map->m_fscache = dif->fscache; break; } } diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h index eb37b33bce37..90f7d6286a4f 100644 --- a/fs/erofs/internal.h +++ b/fs/erofs/internal.h @@ -49,6 +49,7 @@ typedef u32 erofs_blk_t; struct erofs_device_info { char *path; + struct erofs_fscache *fscache; struct block_device *bdev; struct dax_device *dax_dev; u64 dax_part_off; @@ -482,6 +483,7 @@ static inline int z_erofs_map_blocks_iter(struct inode *inode, #endif /* !CONFIG_EROFS_FS_ZIP */ struct erofs_map_dev { + struct erofs_fscache *m_fscache; struct block_device *m_bdev; struct dax_device *m_daxdev; u64 m_dax_part_off; diff --git a/fs/erofs/super.c b/fs/erofs/super.c index 9498b899b73b..8c7181cd37e6 100644 --- a/fs/erofs/super.c +++ b/fs/erofs/super.c @@ -259,15 +259,23 @@ static int erofs_init_devices(struct super_block *sb, } dis = ptr + erofs_blkoff(pos); - bdev = blkdev_get_by_path(dif->path, - FMODE_READ | FMODE_EXCL, - sb->s_type); - if (IS_ERR(bdev)) { - err = PTR_ERR(bdev); - break; + if (erofs_is_fscache_mode(sb)) { + err = erofs_fscache_register_cookie(sb, &dif->fscache, + dif->path, false); + if (err) + break; + } else { + bdev = blkdev_get_by_path(dif->path, + FMODE_READ | FMODE_EXCL, + sb->s_type); + if (IS_ERR(bdev)) { + err = PTR_ERR(bdev); + break; + } + dif->bdev = bdev; + dif->dax_dev = fs_dax_get_by_bdev(bdev, &dif->dax_part_off); } - dif->bdev = bdev; - dif->dax_dev = fs_dax_get_by_bdev(bdev, &dif->dax_part_off); + dif->blocks = le32_to_cpu(dis->blocks); dif->mapped_blkaddr = le32_to_cpu(dis->mapped_blkaddr); sbi->total_blocks += dif->blocks; @@ -701,6 +709,7 @@ static int erofs_release_device_info(int id, void *ptr, void *data) fs_put_dax(dif->dax_dev); if (dif->bdev) blkdev_put(dif->bdev, FMODE_READ | FMODE_EXCL); + erofs_fscache_unregister_cookie(&dif->fscache); kfree(dif->path); kfree(dif); return 0; -- 2.27.0