diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-04-10 19:19:09 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-04-10 19:23:58 -0400 |
commit | c598d91dcb0c7e95abdacb2711898ae14ab52ca1 (patch) | |
tree | 645b7838f62826547ea0c830738a88061827c698 /libbcachefs/movinggc.c | |
parent | ff5e165532a2eed87700649d03f91a612a58e92a (diff) |
Update bcachefs sources to edf5f38218 bcachefs: Refactor superblock code
Diffstat (limited to 'libbcachefs/movinggc.c')
-rw-r--r-- | libbcachefs/movinggc.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/libbcachefs/movinggc.c b/libbcachefs/movinggc.c index 3b4a5292..28dabca7 100644 --- a/libbcachefs/movinggc.c +++ b/libbcachefs/movinggc.c @@ -9,6 +9,7 @@ #include "btree_update.h" #include "buckets.h" #include "clock.h" +#include "disk_groups.h" #include "extents.h" #include "eytzinger.h" #include "io.h" @@ -51,7 +52,7 @@ static inline int sectors_used_cmp(copygc_heap *heap, struct copygc_heap_entry l, struct copygc_heap_entry r) { - return bucket_sectors_used(l.mark) - bucket_sectors_used(r.mark); + return (l.sectors > r.sectors) - (l.sectors < r.sectors); } static int bucket_offset_cmp(const void *_l, const void *_r, size_t size) @@ -78,7 +79,7 @@ static bool __copygc_pred(struct bch_dev *ca, return (i >= 0 && ptr->offset < h->data[i].offset + ca->mi.bucket_size && - ptr->gen == h->data[i].mark.gen); + ptr->gen == h->data[i].gen); } return false; @@ -154,8 +155,9 @@ static void bch2_copygc(struct bch_fs *c, struct bch_dev *ca) continue; e = (struct copygc_heap_entry) { - .offset = bucket_to_sector(ca, b), - .mark = m + .gen = m.gen, + .sectors = bucket_sectors_used(m), + .offset = bucket_to_sector(ca, b), }; heap_add_or_replace(h, e, -sectors_used_cmp); } @@ -163,11 +165,11 @@ static void bch2_copygc(struct bch_fs *c, struct bch_dev *ca) up_read(&c->gc_lock); for (i = h->data; i < h->data + h->used; i++) - sectors_to_move += bucket_sectors_used(i->mark); + sectors_to_move += i->sectors; while (sectors_to_move > COPYGC_SECTORS_PER_ITER(ca)) { BUG_ON(!heap_pop(h, e, -sectors_used_cmp)); - sectors_to_move -= bucket_sectors_used(e.mark); + sectors_to_move -= e.sectors; } buckets_to_move = h->used; @@ -191,7 +193,7 @@ static void bch2_copygc(struct bch_fs *c, struct bch_dev *ca) size_t b = sector_to_bucket(ca, i->offset); struct bucket_mark m = READ_ONCE(buckets->b[b].mark); - if (i->mark.gen == m.gen && bucket_sectors_used(m)) { + if (i->gen == m.gen && bucket_sectors_used(m)) { sectors_not_moved += bucket_sectors_used(m); buckets_not_moved++; } @@ -284,7 +286,8 @@ int bch2_copygc_start(struct bch_fs *c, struct bch_dev *ca) if (bch2_fs_init_fault("copygc_start")) return -ENOMEM; - t = kthread_create(bch2_copygc_thread, ca, "bch_copygc"); + t = kthread_create(bch2_copygc_thread, ca, + "bch_copygc[%s]", ca->name); if (IS_ERR(t)) return PTR_ERR(t); |