};
 ATTRIBUTE_GROUPS(f2fs_feat);
 
+static struct attribute *f2fs_stat_attrs[] = {
+       NULL,
+};
+ATTRIBUTE_GROUPS(f2fs_stat);
+
 static const struct sysfs_ops f2fs_attr_ops = {
        .show   = f2fs_attr_show,
        .store  = f2fs_attr_store,
        .kset   = &f2fs_kset,
 };
 
+static ssize_t f2fs_stat_attr_show(struct kobject *kobj,
+                               struct attribute *attr, char *buf)
+{
+       struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+                                                               s_stat_kobj);
+       struct f2fs_attr *a = container_of(attr, struct f2fs_attr, attr);
+
+       return a->show ? a->show(a, sbi, buf) : 0;
+}
+
+static ssize_t f2fs_stat_attr_store(struct kobject *kobj, struct attribute *attr,
+                                               const char *buf, size_t len)
+{
+       struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+                                                               s_stat_kobj);
+       struct f2fs_attr *a = container_of(attr, struct f2fs_attr, attr);
+
+       return a->store ? a->store(a, sbi, buf, len) : 0;
+}
+
+static void f2fs_stat_kobj_release(struct kobject *kobj)
+{
+       struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+                                                               s_stat_kobj);
+       complete(&sbi->s_stat_kobj_unregister);
+}
+
+static const struct sysfs_ops f2fs_stat_attr_ops = {
+       .show   = f2fs_stat_attr_show,
+       .store  = f2fs_stat_attr_store,
+};
+
+static struct kobj_type f2fs_stat_ktype = {
+       .default_groups = f2fs_stat_groups,
+       .sysfs_ops      = &f2fs_stat_attr_ops,
+       .release        = f2fs_stat_kobj_release,
+};
+
 static int __maybe_unused segment_info_seq_show(struct seq_file *seq,
                                                void *offset)
 {
        init_completion(&sbi->s_kobj_unregister);
        err = kobject_init_and_add(&sbi->s_kobj, &f2fs_sb_ktype, NULL,
                                "%s", sb->s_id);
-       if (err) {
-               kobject_put(&sbi->s_kobj);
-               wait_for_completion(&sbi->s_kobj_unregister);
-               return err;
-       }
+       if (err)
+               goto put_sb_kobj;
+
+       sbi->s_stat_kobj.kset = &f2fs_kset;
+       init_completion(&sbi->s_stat_kobj_unregister);
+       err = kobject_init_and_add(&sbi->s_stat_kobj, &f2fs_stat_ktype,
+                                               &sbi->s_kobj, "stat");
+       if (err)
+               goto put_stat_kobj;
 
        if (f2fs_proc_root)
                sbi->s_proc = proc_mkdir(sb->s_id, f2fs_proc_root);
                                victim_bits_seq_show, sb);
        }
        return 0;
+put_stat_kobj:
+       kobject_put(&sbi->s_stat_kobj);
+       wait_for_completion(&sbi->s_stat_kobj_unregister);
+put_sb_kobj:
+       kobject_put(&sbi->s_kobj);
+       wait_for_completion(&sbi->s_kobj_unregister);
+       return err;
 }
 
 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi)
                remove_proc_entry("victim_bits", sbi->s_proc);
                remove_proc_entry(sbi->sb->s_id, f2fs_proc_root);
        }
+
+       kobject_del(&sbi->s_stat_kobj);
+       kobject_put(&sbi->s_stat_kobj);
+       wait_for_completion(&sbi->s_stat_kobj_unregister);
+
        kobject_del(&sbi->s_kobj);
        kobject_put(&sbi->s_kobj);
        wait_for_completion(&sbi->s_kobj_unregister);