Messages in this thread Patch in this message | | | From | Dawei Li <> | Subject | [PATCH] erofs: protect s_inodes with s_inode_list_lock | Date | Sun, 16 Oct 2022 20:37:27 +0800 |
| |
s_inodes is superblock-specific resource, which should be protected by sb's specific lock s_inode_list_lock.
base-commit: 8436c4a57bd147b0bd2943ab499bb8368981b9e1
Signed-off-by: Dawei Li <set_pte_at@outlook.com> --- fs/erofs/fscache.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c index 998cd26a1b3b..bbf5268440df 100644 --- a/fs/erofs/fscache.c +++ b/fs/erofs/fscache.c @@ -589,15 +589,18 @@ struct erofs_fscache *erofs_domain_register_cookie(struct super_block *sb, 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)) continue; igrab(inode); - mutex_unlock(&erofs_domain_cookies_lock); + spin_unlock(&psb->s_inode_list_lock); return ctx; } + spin_unlock(&psb->s_inode_list_lock); + + mutex_lock(&erofs_domain_cookies_lock); ctx = erofs_fscache_domain_init_cookie(sb, name, need_inode); mutex_unlock(&erofs_domain_cookies_lock); return ctx; -- 2.25.1
| |