if (bch2_inode_casefold(c, &inode->ei_inode))
                inode->v.i_flags |= S_CASEFOLD;
+       else
+               inode->v.i_flags &= ~S_CASEFOLD;
 }
 
 void bch2_inode_update_after_write(struct btree_trans *trans,
                set_nlink(&inode->v, 0);
        }
 
-       if (IS_CASEFOLDED(vdir)) {
+       if (IS_CASEFOLDED(vdir))
                d_invalidate(dentry);
-               d_prune_aliases(&inode->v);
-       }
 err:
        bch2_trans_put(trans);
        bch2_unlock_inodes(INODE_UPDATE_LOCK, dir, inode);
        if (ret)
                goto err_put_super;
 
+#ifdef CONFIG_UNICODE
+       sb->s_encoding = c->cf_encoding;
+#endif
+       generic_set_sb_d_ops(sb);
+
        vinode = bch2_vfs_inode_get(c, BCACHEFS_ROOT_SUBVOL_INUM);
        ret = PTR_ERR_OR_ZERO(vinode);
        bch_err_msg(c, ret, "mounting: error getting root inode");
 
        bool ret = false;
 
        for (id = 0; id < Inode_opt_nr; id++) {
+               if (!S_ISDIR(dst_u->bi_mode) && id == Inode_opt_casefold)
+                       continue;
+
                /* Skip attributes that were explicitly set on this inode */
                if (dst_u->bi_fields_set & (1 << id))
                        continue;