linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeffle Xu <jefflexu@linux.alibaba.com>
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
Subject: [PATCH v4 18/21] erofs: register cookie context for data blobs
Date: Mon,  7 Mar 2022 20:33:02 +0800	[thread overview]
Message-ID: <20220307123305.79520-19-jefflexu@linux.alibaba.com> (raw)
In-Reply-To: <20220307123305.79520-1-jefflexu@linux.alibaba.com>

Similar to the multi device mode, erofs could be mounted from multiple
blob files (one bootstrap blob file and optional multiple data blob
files). In this case, each device slot contains the path of
corresponding data blob file.

This patch registers corresponding cookie context for each data blob
file.

Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
---
 fs/erofs/internal.h |  1 +
 fs/erofs/super.c    | 27 +++++++++++++++++++--------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 548f928b0ded..5d514c7b73cc 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -53,6 +53,7 @@ struct erofs_device_info {
 	struct block_device *bdev;
 	struct dax_device *dax_dev;
 	u64 dax_part_off;
+	struct erofs_fscache_context *ctx;
 
 	u32 blocks;
 	u32 mapped_blkaddr;
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 8c5783c6f71f..f058a04a00c7 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -250,6 +250,7 @@ static int erofs_init_devices(struct super_block *sb,
 	down_read(&sbi->devs->rwsem);
 	idr_for_each_entry(&sbi->devs->tree, dif, id) {
 		struct block_device *bdev;
+		struct erofs_fscache_context *ctx;
 
 		ptr = erofs_read_metabuf(&buf, sb, erofs_blknr(pos),
 					 EROFS_KMAP);
@@ -259,15 +260,24 @@ 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_bdev_mode(sb)) {
+			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);
+		} else {
+			ctx = erofs_fscache_get_ctx(sb, dif->path, false);
+			if (IS_ERR(ctx)) {
+				err = PTR_ERR(ctx);
+				break;
+			}
+			dif->ctx = ctx;
 		}
-		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;
@@ -694,6 +704,7 @@ static int erofs_release_device_info(int id, void *ptr, void *data)
 {
 	struct erofs_device_info *dif = ptr;
 
+	erofs_fscache_put_ctx(dif->ctx);
 	fs_put_dax(dif->dax_dev);
 	if (dif->bdev)
 		blkdev_put(dif->bdev, FMODE_READ | FMODE_EXCL);
-- 
2.27.0


  parent reply	other threads:[~2022-03-07 12:34 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-07 12:32 [PATCH v4 00/21] fscache,erofs: fscache-based on-demand read semantics Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 01/21] fscache: export fscache_end_operation() Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 02/21] cachefiles: export write routine Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 03/21] cachefiles: introduce on-demand read mode Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 04/21] cachefiles: notify user daemon with anon_fd when opening cache file Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 05/21] cachefiles: implement on-demand read Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 06/21] cachefiles: document on-demand read mode Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 07/21] erofs: use meta buffers for erofs_read_superblock() Jeffle Xu
2022-03-11  7:36   ` Chao Yu
2022-03-07 12:32 ` [PATCH v4 08/21] erofs: export erofs_map_blocks() Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 09/21] erofs: add mode checking helper Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 10/21] erofs: register global fscache volume Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 11/21] erofs: add cookie context helper functions Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 12/21] erofs: add anonymous inode managing page cache of blob file Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 13/21] erofs: add erofs_fscache_read_pages() helper Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 14/21] erofs: register cookie context for bootstrap blob Jeffle Xu
2022-03-07 12:32 ` [PATCH v4 15/21] erofs: implement fscache-based metadata read Jeffle Xu
2022-03-07 12:33 ` [PATCH v4 16/21] erofs: implement fscache-based data read for non-inline layout Jeffle Xu
2022-03-07 12:33 ` [PATCH v4 17/21] erofs: implement fscache-based data read for inline layout Jeffle Xu
2022-03-07 12:33 ` Jeffle Xu [this message]
2022-03-07 12:33 ` [PATCH v4 19/21] erofs: implement fscache-based data read for data blobs Jeffle Xu
2022-03-07 12:33 ` [PATCH v4 20/21] erofs: implement fscache-based data readahead Jeffle Xu
2022-03-07 12:33 ` [PATCH v4 21/21] erofs: add 'uuid' mount option Jeffle Xu
2022-03-14  9:24 ` [PATCH v4 00/21] fscache,erofs: fscache-based on-demand read semantics luodaowen.backend
2022-03-18  9:42 ` Fan,Naihao
2022-03-18 11:48 ` JeffleXu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220307123305.79520-19-jefflexu@linux.alibaba.com \
    --to=jefflexu@linux.alibaba.com \
    --cc=bo.liu@linux.alibaba.com \
    --cc=chao@kernel.org \
    --cc=dhowells@redhat.com \
    --cc=eguan@linux.alibaba.com \
    --cc=gerry@linux.alibaba.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=joseph.qi@linux.alibaba.com \
    --cc=linux-cachefs@redhat.com \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tao.peng@linux.alibaba.com \
    --cc=torvalds@linux-foundation.org \
    --cc=willy@infradead.org \
    --cc=xiang@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).