bcachefs: bch2_dev_freespace_init() Print out status every 10 seconds
authorKent Overstreet <kent.overstreet@linux.dev>
Thu, 23 Mar 2023 01:22:51 +0000 (21:22 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:58 +0000 (17:09 -0400)
It appears freespace init can still take awhile, and we've had a report
or two of it getting stuck - let's have it print out where it's at every
10 seconds.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_background.c

index 23de3ecc6a1ee4cec0598b59b3a73f32c4ad1911..aea6caa791ea9112e31e09a8f40d183767a99d0a 100644 (file)
@@ -1890,7 +1890,8 @@ void bch2_do_invalidates(struct bch_fs *c)
                bch2_write_ref_put(c, BCH_WRITE_REF_invalidate);
 }
 
-static int bch2_dev_freespace_init(struct bch_fs *c, struct bch_dev *ca)
+static int bch2_dev_freespace_init(struct bch_fs *c, struct bch_dev *ca,
+                                  unsigned long *last_updated)
 {
        struct btree_trans trans;
        struct btree_iter iter;
@@ -1910,6 +1911,12 @@ static int bch2_dev_freespace_init(struct bch_fs *c, struct bch_dev *ca)
         * freespace/need_discard/need_gc_gens btrees as needed:
         */
        while (1) {
+               if (*last_updated + HZ * 10 < jiffies) {
+                       bch_info(ca, "%s: currently at %llu/%llu",
+                                __func__, iter.pos.offset, ca->mi.nbuckets);
+                       *last_updated = jiffies;
+               }
+
                bch2_trans_begin(&trans);
 
                if (bkey_ge(iter.pos, end)) {
@@ -1989,6 +1996,7 @@ int bch2_fs_freespace_init(struct bch_fs *c)
        unsigned i;
        int ret = 0;
        bool doing_init = false;
+       unsigned long last_updated = jiffies;
 
        /*
         * We can crash during the device add path, so we need to check this on
@@ -2004,7 +2012,7 @@ int bch2_fs_freespace_init(struct bch_fs *c)
                        doing_init = true;
                }
 
-               ret = bch2_dev_freespace_init(c, ca);
+               ret = bch2_dev_freespace_init(c, ca, &last_updated);
                if (ret) {
                        percpu_ref_put(&ca->ref);
                        return ret;