bcachefs: Fix errors early in the fs init process
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 15 Oct 2020 19:58:36 +0000 (15:58 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:44 +0000 (17:08 -0400)
At some point bch2_fs_alloc() was changed to always call bch2_fs_free()
in the error path, which means we need c->cl to always be initialized.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/super.c

index d0d4602..988c678 100644 (file)
@@ -654,6 +654,14 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts)
 
        __module_get(THIS_MODULE);
 
+       closure_init(&c->cl, NULL);
+
+       c->kobj.kset = bcachefs_kset;
+       kobject_init(&c->kobj, &bch2_fs_ktype);
+       kobject_init(&c->internal, &bch2_fs_internal_ktype);
+       kobject_init(&c->opts_dir, &bch2_fs_opts_dir_ktype);
+       kobject_init(&c->time_stats, &bch2_fs_time_stats_ktype);
+
        c->minor                = -1;
        c->disk_sb.fs_sb        = true;
 
@@ -785,18 +793,6 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts)
                    bch2_dev_alloc(c, i))
                        goto err;
 
-       /*
-        * Now that all allocations have succeeded, init various refcounty
-        * things that let us shutdown:
-        */
-       closure_init(&c->cl, NULL);
-
-       c->kobj.kset = bcachefs_kset;
-       kobject_init(&c->kobj, &bch2_fs_ktype);
-       kobject_init(&c->internal, &bch2_fs_internal_ktype);
-       kobject_init(&c->opts_dir, &bch2_fs_opts_dir_ktype);
-       kobject_init(&c->time_stats, &bch2_fs_time_stats_ktype);
-
        mutex_lock(&bch_fs_list_lock);
        err = bch2_fs_online(c);
        mutex_unlock(&bch_fs_list_lock);