]> git.dujemihanovic.xyz Git - linux.git/commitdiff
bcachefs: Fix overlapping extent repair
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 30 Mar 2024 05:00:50 +0000 (01:00 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Apr 2024 05:05:50 +0000 (01:05 -0400)
overlapping extent repair was colliding with extent past end of inode
checks - don't update "extent ends at" until we know we have an extent.

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

index 0a47b0a473d8d3404ca6313e44afe279daf12a45..cbb8b43e419fecbbaf1177d09729ad1b6e014186 100644 (file)
@@ -1372,10 +1372,6 @@ static int check_overlapping_extents(struct btree_trans *trans,
                        goto err;
        }
 
-       ret = extent_ends_at(c, extent_ends, seen, k);
-       if (ret)
-               goto err;
-
        extent_ends->last_pos = k.k->p;
 err:
        return ret;
@@ -1505,6 +1501,12 @@ static int check_extent(struct btree_trans *trans, struct btree_iter *iter,
 
                i->seen_this_pos = true;
        }
+
+       if (k.k->type != KEY_TYPE_whiteout) {
+               ret = extent_ends_at(c, extent_ends, s, k);
+               if (ret)
+                       goto err;
+       }
 out:
 err:
 fsck_err: