On 6/22/21 6:55 PM, Hannes Reinecke wrote: > On 6/15/21 7:49 AM, Coly Li wrote: >> Currently the meta data bucket locations on cache device are reserved >> after the meta data stored on NVDIMM pages, for the meta data layout >> consistentcy temporarily. So these buckets are still marked as meta data >> by SET_GC_MARK() in bch_btree_gc_finish(). >> >> When BCH_FEATURE_INCOMPAT_NVDIMM_META is set, the sb.d[] stores linear >> address of NVDIMM pages and not bucket index anymore. Therefore we >> should avoid to find bucket index from sb.d[], and directly use bucket >> index from ca->sb.first_bucket to (ca->sb.first_bucket + >> ca->sb.njournal_bucketsi) for setting the gc mark of journal bucket. >> >> Signed-off-by: Coly Li <colyli@xxxxxxx> >> Cc: Jianpeng Ma <jianpeng.ma@xxxxxxxxx> >> Cc: Qiaowei Ren <qiaowei.ren@xxxxxxxxx> >> --- >> drivers/md/bcache/btree.c | 6 ++++-- >> 1 file changed, 4 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c >> index 183a58c89377..e0d7135669ca 100644 >> --- a/drivers/md/bcache/btree.c >> +++ b/drivers/md/bcache/btree.c >> @@ -1761,8 +1761,10 @@ static void bch_btree_gc_finish(struct cache_set *c) >> ca = c->cache; >> ca->invalidate_needs_gc = 0; >> >> - for (k = ca->sb.d; k < ca->sb.d + ca->sb.keys; k++) >> - SET_GC_MARK(ca->buckets + *k, GC_MARK_METADATA); >> + /* Range [first_bucket, first_bucket + keys) is for journal buckets */ >> + for (i = ca->sb.first_bucket; >> + i < ca->sb.first_bucket + ca->sb.njournal_buckets; i++) >> + SET_GC_MARK(ca->buckets + i, GC_MARK_METADATA); >> >> for (k = ca->prio_buckets; >> k < ca->prio_buckets + prio_buckets(ca) * 2; k++) >> > Reviewed-by: Hannes Reinecke <hare@xxxxxxx> Thanks for your review. Coly Li