]> git.hungrycats.org Git - linux/commitdiff
zygo: btrfs: add some WARN_ONs to chase KASAN stack traces
authorZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Tue, 3 Dec 2019 16:20:44 +0000 (11:20 -0500)
committerZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Sat, 7 Dec 2019 01:12:42 +0000 (20:12 -0500)
(cherry picked from commit 7bc46196ca4d31da287f151b905babbdb429c444)

fs/btrfs/ctree.c
fs/btrfs/relocation.c
fs/btrfs/transaction.c

index 5b6e86aaf2e1a42f468c0dbb94e8231d12973d1e..c456629987d3c4298c6512e4d467fa7d646cc670 100644 (file)
@@ -227,6 +227,7 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans,
        WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) &&
                trans->transid != root->last_trans);
 
+       WARN_ON(!buf);
        level = btrfs_header_level(buf);
        if (level == 0)
                btrfs_item_key(buf, &disk_key, 0);
index 754f18e8019baa97454b508d2b37558ef5e336e2..64b818f9f315835a9543a56907293f2dc6b01e34 100644 (file)
@@ -1403,6 +1403,7 @@ static struct btrfs_root *create_reloc_root(struct btrfs_trans_handle *trans,
                 * set in their headers. so it's OK to not update
                 * the 'last_snapshot'.
                 */
+               WARN_ON(!root->node);
                ret = btrfs_copy_root(trans, root, root->node, &eb,
                                      BTRFS_TREE_RELOC_OBJECTID);
                BUG_ON(ret);
@@ -4803,6 +4804,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
        }
 
        new_root = pending->snap;
+       WARN_ON(!root->reloc_root->node);
        reloc_root = create_reloc_root(trans, root->reloc_root,
                                       new_root->root_key.objectid);
        if (IS_ERR(reloc_root))
index e194d3e4e3a9a5196dc1d90a37b80eca471feb9e..c074e9975c053a326fd5c88c9f2d21d1a413d80a 100644 (file)
@@ -1638,6 +1638,9 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
                goto fail;
        }
 
+       WARN_ON(!pending->root);
+       WARN_ON(!pending->root->reloc_root);
+       WARN_ON(!pending->root->reloc_root->node);
        ret = btrfs_reloc_post_snapshot(trans, pending);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
@@ -1729,6 +1732,9 @@ static noinline int create_pending_snapshots(struct btrfs_trans_handle *trans)
 
        list_for_each_entry_safe(pending, next, head, list) {
                list_del(&pending->list);
+               WARN_ON(!pending->root);
+               WARN_ON(!pending->root->reloc_root);
+               WARN_ON(!pending->root->reloc_root->node);
                ret = create_pending_snapshot(trans, pending);
                if (ret)
                        break;