summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-12-19 20:35:20 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-12-19 20:35:24 -0500
commit4158833a51eedaa2880c88631ea2c41b026af2e6 (patch)
treebc82b0fa750596526415dbf0e7b55f5fc80d2c44
parentf06fd08067397adffd8362da4660602daf1a2473 (diff)
cmd_migrate: don't link data above i_size
The new filesystem might have a smaller blocksize than the old blocksize, which trips this. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--cmd_migrate.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/cmd_migrate.c b/cmd_migrate.c
index f2a6cc7d..07fc1452 100644
--- a/cmd_migrate.c
+++ b/cmd_migrate.c
@@ -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);