]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Update bcachefs sources to 07bac0c685 bcachefs: fsck: Work around transaction restarts
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 6 Apr 2022 18:42:00 +0000 (14:42 -0400)
committerKent Overstreet <kent.overstreet@gmail.com>
Wed, 6 Apr 2022 18:42:00 +0000 (14:42 -0400)
.bcachefs_revision
libbcachefs/fsck.c

index 3cdd136f5fa860face3ebc9b55678eba153e4ae8..7086277777294606c89aa99c234993f9b8454f26 100644 (file)
@@ -1 +1 @@
-e027cf9aa0e18b688d76cd6c2702491b8d06f48f
+07bac0c685f553f66938053e9aa725dc8df0e3ee
index 2582ddf14803f7ba504e088dedc9180b4300bf9b..d2b155f07fc10a185dde5fbd80ca3cfa02db36a6 100644 (file)
@@ -1146,7 +1146,7 @@ static int check_extent(struct btree_trans *trans, struct btree_iter *iter,
        struct inode_walker_entry *i;
        struct printbuf buf = PRINTBUF;
        int ret = 0;
-
+peek:
        k = bch2_btree_iter_peek(iter);
        if (!k.k)
                goto out;
@@ -1173,6 +1173,15 @@ static int check_extent(struct btree_trans *trans, struct btree_iter *iter,
                if (ret)
                        goto err;
        }
+
+       if (!iter->path->should_be_locked) {
+               /*
+                * hack: check_i_sectors may have handled a transaction restart,
+                * it shouldn't be but we need to fix the new i_sectors check
+                * code and delete the old bch2_count_inode_sectors() first
+                */
+               goto peek;
+       }
 #if 0
        if (bkey_cmp(prev.k->k.p, bkey_start_pos(k.k)) > 0) {
                char buf1[200];
@@ -1464,7 +1473,7 @@ static int check_dirent(struct btree_trans *trans, struct btree_iter *iter,
        struct inode_walker_entry *i;
        struct printbuf buf = PRINTBUF;
        int ret = 0;
-
+peek:
        k = bch2_btree_iter_peek(iter);
        if (!k.k)
                goto out;
@@ -1492,6 +1501,11 @@ static int check_dirent(struct btree_trans *trans, struct btree_iter *iter,
                        goto err;
        }
 
+       if (!iter->path->should_be_locked) {
+               /* hack: see check_extent() */
+               goto peek;
+       }
+
        ret = __walk_inode(trans, dir, k.k->p);
        if (ret < 0)
                goto err;