bcachefs: Fix error path in bch2_replicas_gc_end()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 27 Oct 2023 03:02:42 +0000 (23:02 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 2 Nov 2023 01:11:08 +0000 (21:11 -0400)
We were dropping a lock we hadn't taken when entering with an error.

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

index cef2a0447b8601a191ac39852ae4a7e0d9fc317d..1c3ae13bfced1d8ce9eeee118cb6e9fe1552e7a5 100644 (file)
@@ -462,18 +462,13 @@ int bch2_replicas_gc_end(struct bch_fs *c, int ret)
 {
        lockdep_assert_held(&c->replicas_gc_lock);
 
-       if (ret)
-               goto err;
-
        mutex_lock(&c->sb_lock);
        percpu_down_write(&c->mark_lock);
 
-       ret = bch2_cpu_replicas_to_sb_replicas(c, &c->replicas_gc);
-       if (ret)
-               goto err;
+       ret =   ret ?:
+               bch2_cpu_replicas_to_sb_replicas(c, &c->replicas_gc) ?:
+               replicas_table_update(c, &c->replicas_gc);
 
-       ret = replicas_table_update(c, &c->replicas_gc);
-err:
        kfree(c->replicas_gc.entries);
        c->replicas_gc.entries = NULL;
 
@@ -579,12 +574,9 @@ retry:
 
        bch2_cpu_replicas_sort(&new);
 
-       ret = bch2_cpu_replicas_to_sb_replicas(c, &new);
-       if (ret)
-               goto err;
+       ret =   bch2_cpu_replicas_to_sb_replicas(c, &new) ?:
+               replicas_table_update(c, &new);
 
-       ret = replicas_table_update(c, &new);
-err:
        kfree(new.entries);
 
        percpu_up_write(&c->mark_lock);