bcachefs: Fix stripe create error path
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 13 Mar 2023 13:53:04 +0000 (09:53 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:57 +0000 (17:09 -0400)
If we errored out on a new stripe before fully allocating it, we
shouldn't be zeroing out unwritten data.

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

index 9ee29da..74cfd9e 100644 (file)
@@ -1078,13 +1078,15 @@ static void ec_stripe_create(struct ec_stripe_new *s)
 
        closure_sync(&s->iodone);
 
-       for (i = 0; i < nr_data; i++)
-               if (s->blocks[i]) {
-                       ob = c->open_buckets + s->blocks[i];
+       if (!s->err) {
+               for (i = 0; i < nr_data; i++)
+                       if (s->blocks[i]) {
+                               ob = c->open_buckets + s->blocks[i];
 
-                       if (ob->sectors_free)
-                               zero_out_rest_of_ec_bucket(c, s, i, ob);
-               }
+                               if (ob->sectors_free)
+                                       zero_out_rest_of_ec_bucket(c, s, i, ob);
+                       }
+       }
 
        if (s->err) {
                if (!bch2_err_matches(s->err, EROFS))