diff options
author | Nikita Ofitserov <himikof@gmail.com> | 2025-09-06 23:55:21 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-09-06 17:56:19 -0400 |
commit | ed95a9f311aea6c324db58c86c18a70dcb5e9651 (patch) | |
tree | e110f537058c4a1d43082931e9930b5b9fb16d1b /c_src/cmd_migrate.c | |
parent | 31c7a7398a28b91cb1721c2721eaf577ed187bf2 (diff) |
cmd_migrate: Introduce mark_nouse_range helper
Signed-off-by: Nikita Ofitserov <himikof@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'c_src/cmd_migrate.c')
-rw-r--r-- | c_src/cmd_migrate.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/c_src/cmd_migrate.c b/c_src/cmd_migrate.c index aa17a160..64131f87 100644 --- a/c_src/cmd_migrate.c +++ b/c_src/cmd_migrate.c @@ -86,6 +86,15 @@ found: return ret; } +static void mark_nouse_range(struct bch_dev *ca, u64 sector_from, u64 sector_to) +{ + u64 b = sector_to_bucket(ca, sector_from); + do { + set_bit(b, ca->buckets_nouse); + b++; + } while (bucket_to_sector(ca, b) < sector_to); +} + static void mark_unreserved_space(struct bch_fs *c, ranges extents) { struct bch_dev *ca = c->devs[0]; @@ -93,16 +102,11 @@ static void mark_unreserved_space(struct bch_fs *c, ranges extents) struct range i; for_each_hole(iter, extents, bucket_to_sector(ca, ca->mi.nbuckets) << 9, i) { - u64 b; - if (i.start == i.end) return; - b = sector_to_bucket(ca, i.start >> 9); - do { - set_bit(b, ca->buckets_nouse); - b++; - } while (bucket_to_sector(ca, b) << 9 < i.end); + mark_nouse_range(ca, i.start >> 9, + round_up(i.end, 1 << 9) >> 9); } } @@ -454,8 +458,7 @@ int cmd_migrate_superblock(int argc, char *argv[]) die("error opening filesystem: %s", bch2_err_str(ret)); struct bch_dev *ca = c->devs[0]; - for (u64 b = 0; bucket_to_sector(ca, b) < BCH_SB_SECTOR + sb_size * 2; b++) - set_bit(b, ca->buckets_nouse); + mark_nouse_range(ca, 0, BCH_SB_SECTOR + sb_size * 2); ret = bch2_fs_start(c); if (ret) |