* [PATCH v3 0/4] erofs: cleanup for fscache share domain mode
@ 2023-02-09 6:39 Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 1/4] erofs: remove unused device mapping in meta routine Jingbo Xu
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Jingbo Xu @ 2023-02-09 6:39 UTC (permalink / raw)
To: xiang, chao, linux-erofs, zhujia.zj; +Cc: huyue2, linux-kernel
v3:
- patch 2: remove redundant blank lines (Gao Xiang)
- patch 3: add "Fixes" tag
v2: https://lore.kernel.org/all/20230209051838.33297-1-jefflexu@linux.alibaba.com/
v1: https://lore.kernel.org/all/cover.1675840368.git.jefflexu@linux.alibaba.com/
v2:
- patch 4: add EROFS_REG_COOKIE_SHARE flag to indicate that the blob is
shareable among several erofs fs instances (Zhu Jia)
- patch 4: rearrange the prototype of related functions to make it more
compact (including rename erofs_fscache_domain_init_cookie() to
erofs_domain_init_cookie())
Jingbo Xu (4):
erofs: remove unused device mapping in meta routine
erofs: maintain cookies of share domain in self-contained list
erofs: relinquish volume with mutex held
erofs: unify anonymous inodes for blob
fs/erofs/fscache.c | 144 +++++++++++++++++---------------------------
fs/erofs/internal.h | 11 ++--
fs/erofs/super.c | 2 +
3 files changed, 65 insertions(+), 92 deletions(-)
--
2.19.1.6.gb485710b
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/4] erofs: remove unused device mapping in meta routine
2023-02-09 6:39 [PATCH v3 0/4] erofs: cleanup for fscache share domain mode Jingbo Xu
@ 2023-02-09 6:39 ` Jingbo Xu
2023-02-14 15:03 ` Chao Yu
2023-02-09 6:39 ` [PATCH v3 2/4] erofs: maintain cookies of share domain in self-contained list Jingbo Xu
` (2 subsequent siblings)
3 siblings, 1 reply; 6+ messages in thread
From: Jingbo Xu @ 2023-02-09 6:39 UTC (permalink / raw)
To: xiang, chao, linux-erofs, zhujia.zj; +Cc: huyue2, linux-kernel
Currently metadata is always on bootstrap, and thus device mapping is
not needed so far. Remove the redundant device mapping in the meta
routine.
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
---
fs/erofs/fscache.c | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
index 014e20962376..03de4dc99302 100644
--- a/fs/erofs/fscache.c
+++ b/fs/erofs/fscache.c
@@ -164,18 +164,8 @@ static int erofs_fscache_read_folios_async(struct fscache_cookie *cookie,
static int erofs_fscache_meta_read_folio(struct file *data, struct folio *folio)
{
int ret;
- struct super_block *sb = folio_mapping(folio)->host->i_sb;
+ struct erofs_fscache *ctx = folio_mapping(folio)->host->i_private;
struct erofs_fscache_request *req;
- struct erofs_map_dev mdev = {
- .m_deviceid = 0,
- .m_pa = folio_pos(folio),
- };
-
- ret = erofs_map_dev(sb, &mdev);
- if (ret) {
- folio_unlock(folio);
- return ret;
- }
req = erofs_fscache_req_alloc(folio_mapping(folio),
folio_pos(folio), folio_size(folio));
@@ -184,8 +174,8 @@ static int erofs_fscache_meta_read_folio(struct file *data, struct folio *folio)
return PTR_ERR(req);
}
- ret = erofs_fscache_read_folios_async(mdev.m_fscache->cookie,
- req, mdev.m_pa, folio_size(folio));
+ ret = erofs_fscache_read_folios_async(ctx->cookie, req,
+ folio_pos(folio), folio_size(folio));
if (ret)
req->error = ret;
@@ -469,6 +459,7 @@ struct erofs_fscache *erofs_fscache_acquire_cookie(struct super_block *sb,
inode->i_size = OFFSET_MAX;
inode->i_mapping->a_ops = &erofs_fscache_meta_aops;
mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
+ inode->i_private = ctx;
ctx->inode = inode;
}
--
2.19.1.6.gb485710b
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/4] erofs: maintain cookies of share domain in self-contained list
2023-02-09 6:39 [PATCH v3 0/4] erofs: cleanup for fscache share domain mode Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 1/4] erofs: remove unused device mapping in meta routine Jingbo Xu
@ 2023-02-09 6:39 ` Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 3/4] erofs: relinquish volume with mutex held Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 4/4] erofs: unify anonymous inodes for blob Jingbo Xu
3 siblings, 0 replies; 6+ messages in thread
From: Jingbo Xu @ 2023-02-09 6:39 UTC (permalink / raw)
To: xiang, chao, linux-erofs, zhujia.zj; +Cc: huyue2, linux-kernel
We'd better not touch sb->s_inodes list and inode->i_count directly.
Let's maintain cookies of share domain in a self-contained list in erofs.
Besides, relinquish cookie with the mutex held. Otherwise if a cookie
is registered when the old cookie with the same name in the same domain
has been removed from the list but not relinquished yet, fscache may
complain "Duplicate cookie detected".
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
---
fs/erofs/fscache.c | 44 ++++++++++++++++++++------------------------
fs/erofs/internal.h | 4 ++++
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
index 03de4dc99302..a302d6d23ab5 100644
--- a/fs/erofs/fscache.c
+++ b/fs/erofs/fscache.c
@@ -9,6 +9,7 @@
static DEFINE_MUTEX(erofs_domain_list_lock);
static DEFINE_MUTEX(erofs_domain_cookies_lock);
static LIST_HEAD(erofs_domain_list);
+static LIST_HEAD(erofs_domain_cookies_list);
static struct vfsmount *erofs_pseudo_mnt;
struct erofs_fscache_request {
@@ -318,8 +319,6 @@ const struct address_space_operations erofs_fscache_access_aops = {
static void erofs_fscache_domain_put(struct erofs_domain *domain)
{
- if (!domain)
- return;
mutex_lock(&erofs_domain_list_lock);
if (refcount_dec_and_test(&domain->ref)) {
list_del(&domain->list);
@@ -434,6 +433,8 @@ struct erofs_fscache *erofs_fscache_acquire_cookie(struct super_block *sb,
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
if (!ctx)
return ERR_PTR(-ENOMEM);
+ INIT_LIST_HEAD(&ctx->node);
+ refcount_set(&ctx->ref, 1);
cookie = fscache_acquire_cookie(volume, FSCACHE_ADV_WANT_CACHE_SIZE,
name, strlen(name), NULL, 0, 0);
@@ -479,6 +480,7 @@ static void erofs_fscache_relinquish_cookie(struct erofs_fscache *ctx)
fscache_unuse_cookie(ctx->cookie, NULL, NULL);
fscache_relinquish_cookie(ctx->cookie, false);
iput(ctx->inode);
+ iput(ctx->anon_inode);
kfree(ctx->name);
kfree(ctx);
}
@@ -511,6 +513,7 @@ struct erofs_fscache *erofs_fscache_domain_init_cookie(struct super_block *sb,
ctx->domain = domain;
ctx->anon_inode = inode;
+ list_add(&ctx->node, &erofs_domain_cookies_list);
inode->i_private = ctx;
refcount_inc(&domain->ref);
return ctx;
@@ -524,29 +527,23 @@ struct erofs_fscache *erofs_domain_register_cookie(struct super_block *sb,
char *name,
unsigned int flags)
{
- struct inode *inode;
struct erofs_fscache *ctx;
struct erofs_domain *domain = EROFS_SB(sb)->domain;
- struct super_block *psb = erofs_pseudo_mnt->mnt_sb;
mutex_lock(&erofs_domain_cookies_lock);
- spin_lock(&psb->s_inode_list_lock);
- list_for_each_entry(inode, &psb->s_inodes, i_sb_list) {
- ctx = inode->i_private;
- if (!ctx || ctx->domain != domain || strcmp(ctx->name, name))
+ list_for_each_entry(ctx, &erofs_domain_cookies_list, node) {
+ if (ctx->domain != domain || strcmp(ctx->name, name))
continue;
if (!(flags & EROFS_REG_COOKIE_NEED_NOEXIST)) {
- igrab(inode);
+ refcount_inc(&ctx->ref);
} else {
erofs_err(sb, "%s already exists in domain %s", name,
domain->domain_id);
ctx = ERR_PTR(-EEXIST);
}
- spin_unlock(&psb->s_inode_list_lock);
mutex_unlock(&erofs_domain_cookies_lock);
return ctx;
}
- spin_unlock(&psb->s_inode_list_lock);
ctx = erofs_fscache_domain_init_cookie(sb, name, flags);
mutex_unlock(&erofs_domain_cookies_lock);
return ctx;
@@ -563,23 +560,22 @@ struct erofs_fscache *erofs_fscache_register_cookie(struct super_block *sb,
void erofs_fscache_unregister_cookie(struct erofs_fscache *ctx)
{
- bool drop;
- struct erofs_domain *domain;
+ struct erofs_domain *domain = NULL;
if (!ctx)
return;
- domain = ctx->domain;
- if (domain) {
- mutex_lock(&erofs_domain_cookies_lock);
- drop = atomic_read(&ctx->anon_inode->i_count) == 1;
- iput(ctx->anon_inode);
- mutex_unlock(&erofs_domain_cookies_lock);
- if (!drop)
- return;
- }
+ if (!ctx->domain)
+ return erofs_fscache_relinquish_cookie(ctx);
- erofs_fscache_relinquish_cookie(ctx);
- erofs_fscache_domain_put(domain);
+ mutex_lock(&erofs_domain_cookies_lock);
+ if (refcount_dec_and_test(&ctx->ref)) {
+ domain = ctx->domain;
+ list_del(&ctx->node);
+ erofs_fscache_relinquish_cookie(ctx);
+ }
+ mutex_unlock(&erofs_domain_cookies_lock);
+ if (domain)
+ erofs_fscache_domain_put(domain);
}
int erofs_fscache_register_fs(struct super_block *sb)
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 48a2f33de15a..8358cf5f731e 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -109,7 +109,11 @@ struct erofs_fscache {
struct fscache_cookie *cookie;
struct inode *inode;
struct inode *anon_inode;
+
+ /* used for share domain mode */
struct erofs_domain *domain;
+ struct list_head node;
+ refcount_t ref;
char *name;
};
--
2.19.1.6.gb485710b
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 3/4] erofs: relinquish volume with mutex held
2023-02-09 6:39 [PATCH v3 0/4] erofs: cleanup for fscache share domain mode Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 1/4] erofs: remove unused device mapping in meta routine Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 2/4] erofs: maintain cookies of share domain in self-contained list Jingbo Xu
@ 2023-02-09 6:39 ` Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 4/4] erofs: unify anonymous inodes for blob Jingbo Xu
3 siblings, 0 replies; 6+ messages in thread
From: Jingbo Xu @ 2023-02-09 6:39 UTC (permalink / raw)
To: xiang, chao, linux-erofs, zhujia.zj; +Cc: huyue2, linux-kernel
Relinquish fscache volume with mutex held. Otherwise if a new domain is
registered when the old domain with the same name gets removed from the
list but not relinquished yet, fscache may complain the collision.
Fixes: 8b7adf1dff3d ("erofs: introduce fscache-based domain")
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
---
fs/erofs/fscache.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
index a302d6d23ab5..c6f09928b62c 100644
--- a/fs/erofs/fscache.c
+++ b/fs/erofs/fscache.c
@@ -326,8 +326,8 @@ static void erofs_fscache_domain_put(struct erofs_domain *domain)
kern_unmount(erofs_pseudo_mnt);
erofs_pseudo_mnt = NULL;
}
- mutex_unlock(&erofs_domain_list_lock);
fscache_relinquish_volume(domain->volume, NULL, false);
+ mutex_unlock(&erofs_domain_list_lock);
kfree(domain->domain_id);
kfree(domain);
return;
--
2.19.1.6.gb485710b
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 4/4] erofs: unify anonymous inodes for blob
2023-02-09 6:39 [PATCH v3 0/4] erofs: cleanup for fscache share domain mode Jingbo Xu
` (2 preceding siblings ...)
2023-02-09 6:39 ` [PATCH v3 3/4] erofs: relinquish volume with mutex held Jingbo Xu
@ 2023-02-09 6:39 ` Jingbo Xu
3 siblings, 0 replies; 6+ messages in thread
From: Jingbo Xu @ 2023-02-09 6:39 UTC (permalink / raw)
To: xiang, chao, linux-erofs, zhujia.zj; +Cc: huyue2, linux-kernel
Currently there're two anonymous inodes (inode and anon_inode in struct
erofs_fscache) for each blob. The former was introduced as the
address_space of page cache for bootstrap.
The latter was initially introduced as both the address_space of page
cache and also a sentinel in the shared domain. Since now the management
of cookies in share domain has been decoupled with the anonymous inode,
there's no need to maintain an extra anonymous inode. Let's unify these
two anonymous inodes.
Besides, in non-share-domain mode only bootstrap will allocate anonymous
inode. To simplify the implementation, always allocate anonymous inode
for both bootstrap and data blobs. Similarly release anonymous inodes
for data blobs when .put_super() is called, or we'll get "VFS: Busy
inodes after unmount." warning.
Also remove the redundant set_nlink() when initializing the anonymous
inode, since i_nlink has already been initialized to 1 when the inode
gets allocated.
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
---
fs/erofs/fscache.c | 85 ++++++++++++++++++---------------------------
fs/erofs/internal.h | 7 ++--
fs/erofs/super.c | 2 ++
3 files changed, 38 insertions(+), 56 deletions(-)
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
index c6f09928b62c..f41d57893e37 100644
--- a/fs/erofs/fscache.c
+++ b/fs/erofs/fscache.c
@@ -420,14 +420,14 @@ static int erofs_fscache_register_domain(struct super_block *sb)
return err;
}
-static
-struct erofs_fscache *erofs_fscache_acquire_cookie(struct super_block *sb,
- char *name,
- unsigned int flags)
+static struct erofs_fscache *erofs_fscache_acquire_cookie(struct super_block *sb,
+ char *name, unsigned int flags)
{
struct fscache_volume *volume = EROFS_SB(sb)->volume;
struct erofs_fscache *ctx;
struct fscache_cookie *cookie;
+ struct super_block *isb;
+ struct inode *inode;
int ret;
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
@@ -443,33 +443,32 @@ struct erofs_fscache *erofs_fscache_acquire_cookie(struct super_block *sb,
ret = -EINVAL;
goto err;
}
-
fscache_use_cookie(cookie, false);
- ctx->cookie = cookie;
-
- if (flags & EROFS_REG_COOKIE_NEED_INODE) {
- struct inode *const inode = new_inode(sb);
-
- if (!inode) {
- erofs_err(sb, "failed to get anon inode for %s", name);
- ret = -ENOMEM;
- goto err_cookie;
- }
-
- set_nlink(inode, 1);
- inode->i_size = OFFSET_MAX;
- inode->i_mapping->a_ops = &erofs_fscache_meta_aops;
- mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
- inode->i_private = ctx;
- ctx->inode = inode;
+ /*
+ * Allocate anonymous inode in global pseudo mount for shareable blobs,
+ * so that they are accessible among erofs fs instances.
+ */
+ isb = flags & EROFS_REG_COOKIE_SHARE ? erofs_pseudo_mnt->mnt_sb : sb;
+ inode = new_inode(isb);
+ if (!inode) {
+ erofs_err(sb, "failed to get anon inode for %s", name);
+ ret = -ENOMEM;
+ goto err_cookie;
}
+ inode->i_size = OFFSET_MAX;
+ inode->i_mapping->a_ops = &erofs_fscache_meta_aops;
+ mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
+ inode->i_private = ctx;
+
+ ctx->cookie = cookie;
+ ctx->inode = inode;
return ctx;
err_cookie:
- fscache_unuse_cookie(ctx->cookie, NULL, NULL);
- fscache_relinquish_cookie(ctx->cookie, false);
+ fscache_unuse_cookie(cookie, NULL, NULL);
+ fscache_relinquish_cookie(cookie, false);
err:
kfree(ctx);
return ERR_PTR(ret);
@@ -480,18 +479,13 @@ static void erofs_fscache_relinquish_cookie(struct erofs_fscache *ctx)
fscache_unuse_cookie(ctx->cookie, NULL, NULL);
fscache_relinquish_cookie(ctx->cookie, false);
iput(ctx->inode);
- iput(ctx->anon_inode);
kfree(ctx->name);
kfree(ctx);
}
-static
-struct erofs_fscache *erofs_fscache_domain_init_cookie(struct super_block *sb,
- char *name,
- unsigned int flags)
+static struct erofs_fscache *erofs_domain_init_cookie(struct super_block *sb,
+ char *name, unsigned int flags)
{
- int err;
- struct inode *inode;
struct erofs_fscache *ctx;
struct erofs_domain *domain = EROFS_SB(sb)->domain;
@@ -501,35 +495,23 @@ struct erofs_fscache *erofs_fscache_domain_init_cookie(struct super_block *sb,
ctx->name = kstrdup(name, GFP_KERNEL);
if (!ctx->name) {
- err = -ENOMEM;
- goto out;
- }
-
- inode = new_inode(erofs_pseudo_mnt->mnt_sb);
- if (!inode) {
- err = -ENOMEM;
- goto out;
+ erofs_fscache_relinquish_cookie(ctx);
+ return ERR_PTR(-ENOMEM);
}
+ refcount_inc(&domain->ref);
ctx->domain = domain;
- ctx->anon_inode = inode;
list_add(&ctx->node, &erofs_domain_cookies_list);
- inode->i_private = ctx;
- refcount_inc(&domain->ref);
return ctx;
-out:
- erofs_fscache_relinquish_cookie(ctx);
- return ERR_PTR(err);
}
-static
-struct erofs_fscache *erofs_domain_register_cookie(struct super_block *sb,
- char *name,
- unsigned int flags)
+static struct erofs_fscache *erofs_domain_register_cookie(struct super_block *sb,
+ char *name, unsigned int flags)
{
struct erofs_fscache *ctx;
struct erofs_domain *domain = EROFS_SB(sb)->domain;
+ flags |= EROFS_REG_COOKIE_SHARE;
mutex_lock(&erofs_domain_cookies_lock);
list_for_each_entry(ctx, &erofs_domain_cookies_list, node) {
if (ctx->domain != domain || strcmp(ctx->name, name))
@@ -544,7 +526,7 @@ struct erofs_fscache *erofs_domain_register_cookie(struct super_block *sb,
mutex_unlock(&erofs_domain_cookies_lock);
return ctx;
}
- ctx = erofs_fscache_domain_init_cookie(sb, name, flags);
+ ctx = erofs_domain_init_cookie(sb, name, flags);
mutex_unlock(&erofs_domain_cookies_lock);
return ctx;
}
@@ -583,7 +565,7 @@ int erofs_fscache_register_fs(struct super_block *sb)
int ret;
struct erofs_sb_info *sbi = EROFS_SB(sb);
struct erofs_fscache *fscache;
- unsigned int flags;
+ unsigned int flags = 0;
if (sbi->domain_id)
ret = erofs_fscache_register_domain(sb);
@@ -602,7 +584,6 @@ int erofs_fscache_register_fs(struct super_block *sb)
*
* Acquired domain/volume will be relinquished in kill_sb() on error.
*/
- flags = EROFS_REG_COOKIE_NEED_INODE;
if (sbi->domain_id)
flags |= EROFS_REG_COOKIE_NEED_NOEXIST;
fscache = erofs_fscache_register_cookie(sb, sbi->fsid, flags);
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 8358cf5f731e..50cd257d04e3 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -107,8 +107,7 @@ struct erofs_domain {
struct erofs_fscache {
struct fscache_cookie *cookie;
- struct inode *inode;
- struct inode *anon_inode;
+ struct inode *inode; /* anonymous indoe for the blob */
/* used for share domain mode */
struct erofs_domain *domain;
@@ -450,8 +449,8 @@ extern const struct file_operations erofs_dir_fops;
extern const struct iomap_ops z_erofs_iomap_report_ops;
/* flags for erofs_fscache_register_cookie() */
-#define EROFS_REG_COOKIE_NEED_INODE 1
-#define EROFS_REG_COOKIE_NEED_NOEXIST 2
+#define EROFS_REG_COOKIE_SHARE 0x0001
+#define EROFS_REG_COOKIE_NEED_NOEXIST 0x0002
void erofs_unmap_metabuf(struct erofs_buf *buf);
void erofs_put_metabuf(struct erofs_buf *buf);
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 715efa94eed4..19b1ae79cec4 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -968,6 +968,8 @@ static void erofs_put_super(struct super_block *sb)
iput(sbi->packed_inode);
sbi->packed_inode = NULL;
#endif
+ erofs_free_dev_context(sbi->devs);
+ sbi->devs = NULL;
erofs_fscache_unregister_fs(sb);
}
--
2.19.1.6.gb485710b
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/4] erofs: remove unused device mapping in meta routine
2023-02-09 6:39 ` [PATCH v3 1/4] erofs: remove unused device mapping in meta routine Jingbo Xu
@ 2023-02-14 15:03 ` Chao Yu
0 siblings, 0 replies; 6+ messages in thread
From: Chao Yu @ 2023-02-14 15:03 UTC (permalink / raw)
To: Jingbo Xu, xiang, linux-erofs, zhujia.zj; +Cc: huyue2, linux-kernel
On 2023/2/9 14:39, Jingbo Xu wrote:
> Currently metadata is always on bootstrap, and thus device mapping is
> not needed so far. Remove the redundant device mapping in the meta
> routine.
>
> Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
> Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Thanks,
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-02-14 15:03 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-09 6:39 [PATCH v3 0/4] erofs: cleanup for fscache share domain mode Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 1/4] erofs: remove unused device mapping in meta routine Jingbo Xu
2023-02-14 15:03 ` Chao Yu
2023-02-09 6:39 ` [PATCH v3 2/4] erofs: maintain cookies of share domain in self-contained list Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 3/4] erofs: relinquish volume with mutex held Jingbo Xu
2023-02-09 6:39 ` [PATCH v3 4/4] erofs: unify anonymous inodes for blob Jingbo Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox