]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
cmd_migrate: don't link data above i_size
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 20 Dec 2023 01:35:20 +0000 (20:35 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 20 Dec 2023 01:35:24 +0000 (20:35 -0500)
The new filesystem might have a smaller blocksize than the old
blocksize, which trips this.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
cmd_migrate.c

index f2a6cc7d8e6345d4a2cd7ec52dcf0be960f591ac..07fc145290034ae9eed9706d86caada62c116202 100644 (file)
@@ -378,6 +378,10 @@ static void copy_file(struct bch_fs *c, struct bch_inode_unpacked *dst,
        fiemap_iter_exit(&iter);
 
        fiemap_for_each(src_fd, iter, e) {
+               u64 src_max = roundup(src_size, block_bytes(c));
+
+               e.fe_length = min(e.fe_length, src_max - e.fe_logical);
+
                if ((e.fe_logical       & (block_bytes(c) - 1)) ||
                    (e.fe_length        & (block_bytes(c) - 1)))
                        die("Unaligned extent in %s - can't handle", src_path);