]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Update bcachefs sources to bb2281735c bcachefs: Factor out bch2_ec_stripes_heap_start()
authorKent Overstreet <kent.overstreet@gmail.com>
Fri, 15 Jan 2021 19:30:01 +0000 (14:30 -0500)
committerKent Overstreet <kent.overstreet@gmail.com>
Fri, 15 Jan 2021 19:30:01 +0000 (14:30 -0500)
.bcachefs_revision
libbcachefs/btree_gc.c
libbcachefs/ec.c
libbcachefs/ec.h
libbcachefs/recovery.c

index 84443a03cfab18d9fb0a94dabe96b7055a70f131..cf6567cda78ac520ff048214e63f1a6bb4005f9a 100644 (file)
@@ -1 +1 @@
-93347f716249d5b2503bb7504fe9faac2bcd8d36
+bb2281735c5992c8da66a4da552eeab1d376b6df
index 6b06f60799086167a0e643920b1a6430eb779808..d0635a08d68f930c40e26fcfa75d84379f823724 100644 (file)
@@ -607,8 +607,6 @@ static int bch2_gc_done(struct bch_fs *c,
                struct genradix_iter src_iter = genradix_iter_init(&c->stripes[1], 0);
                struct stripe *dst, *src;
 
-               c->ec_stripes_heap.used = 0;
-
                while ((dst = genradix_iter_peek(&dst_iter, &c->stripes[0])) &&
                       (src = genradix_iter_peek(&src_iter, &c->stripes[1]))) {
                        BUG_ON(src_iter.pos != dst_iter.pos);
@@ -625,12 +623,6 @@ static int bch2_gc_done(struct bch_fs *c,
                                copy_stripe_field(block_sectors[i],
                                                  "block_sectors[%u]", i);
 
-                       if (dst->alive) {
-                               spin_lock(&c->ec_stripes_heap_lock);
-                               bch2_stripes_heap_insert(c, dst, dst_iter.pos);
-                               spin_unlock(&c->ec_stripes_heap_lock);
-                       }
-
                        genradix_iter_advance(&dst_iter, &c->stripes[0]);
                        genradix_iter_advance(&src_iter, &c->stripes[1]);
                }
index a33be9f609ac8f1f1e4aa4751776c3959a5bbbd9..75f39e995c528b9b329722744918de6c63ffa4ca 100644 (file)
@@ -1450,6 +1450,16 @@ unlock:
        mutex_unlock(&c->ec_stripe_head_lock);
 }
 
+void bch2_stripes_heap_start(struct bch_fs *c)
+{
+       struct genradix_iter iter;
+       struct stripe *m;
+
+       genradix_for_each(&c->stripes[0], iter, m)
+               if (m->alive)
+                       bch2_stripes_heap_insert(c, m, iter.pos);
+}
+
 static int __bch2_stripe_write_key(struct btree_trans *trans,
                                   struct btree_iter *iter,
                                   struct stripe *m,
@@ -1529,18 +1539,11 @@ static int bch2_stripes_read_fn(struct bch_fs *c, enum btree_id id,
        int ret = 0;
 
        if (k.k->type == KEY_TYPE_stripe) {
-               struct stripe *m;
-
                ret = __ec_stripe_mem_alloc(c, k.k->p.offset, GFP_KERNEL) ?:
                        bch2_mark_key(c, k, 0, 0, NULL, 0,
                                      BTREE_TRIGGER_NOATOMIC);
                if (ret)
                        return ret;
-
-               spin_lock(&c->ec_stripes_heap_lock);
-               m = genradix_ptr(&c->stripes[0], k.k->p.offset);
-               bch2_stripes_heap_insert(c, m, k.k->p.offset);
-               spin_unlock(&c->ec_stripes_heap_lock);
        }
 
        return ret;
index c3959af468337ed479e0cad0a8175ee6cebaeed4..f124582fdc5fddf51004c01ba35afe07a7e2ef12 100644 (file)
@@ -200,6 +200,8 @@ void bch2_ec_stop_dev(struct bch_fs *, struct bch_dev *);
 
 void bch2_ec_flush_new_stripes(struct bch_fs *);
 
+void bch2_stripes_heap_start(struct bch_fs *);
+
 struct journal_keys;
 int bch2_stripes_read(struct bch_fs *, struct journal_keys *);
 int bch2_stripes_write(struct bch_fs *, unsigned);
index c700b12b2ac0eee6d3451d3c6df05b3c25660392..8c67f146894522a3ef8871473ad866158b337a37 100644 (file)
@@ -1125,6 +1125,8 @@ use_clean:
                bch_verbose(c, "mark and sweep done");
        }
 
+       bch2_stripes_heap_start(c);
+
        clear_bit(BCH_FS_REBUILD_REPLICAS, &c->flags);
        set_bit(BCH_FS_INITIAL_GC_DONE, &c->flags);