ovl: Set case-insensitive dentry operations for ovl sb

For filesystems with encoding (i.e. with case-insensitive support), set
the dentry operations for the super block as ovl_dentry_ci_operations.

Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: André Almeida <andrealmeid@igalia.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
This commit is contained in:
André Almeida 2025-08-14 14:22:17 -03:00 committed by Amir Goldstein
parent 1f7168b28f
commit 8a78f18975

View File

@ -161,6 +161,16 @@ static const struct dentry_operations ovl_dentry_operations = {
.d_weak_revalidate = ovl_dentry_weak_revalidate,
};
#if IS_ENABLED(CONFIG_UNICODE)
static const struct dentry_operations ovl_dentry_ci_operations = {
.d_real = ovl_d_real,
.d_revalidate = ovl_dentry_revalidate,
.d_weak_revalidate = ovl_dentry_weak_revalidate,
.d_hash = generic_ci_d_hash,
.d_compare = generic_ci_d_compare,
};
#endif
static struct kmem_cache *ovl_inode_cachep;
static struct inode *ovl_alloc_inode(struct super_block *sb)
@ -1345,6 +1355,19 @@ static struct dentry *ovl_get_root(struct super_block *sb,
return root;
}
static void ovl_set_d_op(struct super_block *sb)
{
#if IS_ENABLED(CONFIG_UNICODE)
struct ovl_fs *ofs = sb->s_fs_info;
if (ofs->casefold) {
set_default_d_op(sb, &ovl_dentry_ci_operations);
return;
}
#endif
set_default_d_op(sb, &ovl_dentry_operations);
}
int ovl_fill_super(struct super_block *sb, struct fs_context *fc)
{
struct ovl_fs *ofs = sb->s_fs_info;
@ -1360,7 +1383,7 @@ int ovl_fill_super(struct super_block *sb, struct fs_context *fc)
if (WARN_ON(fc->user_ns != current_user_ns()))
goto out_err;
set_default_d_op(sb, &ovl_dentry_operations);
ovl_set_d_op(sb);
err = -ENOMEM;
if (!ofs->creator_cred)