]> 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>
Tue, 3 Dec 2019 21:41:17 +0000 (16:41 -0500)
(cherry picked from commit 7bc46196ca4d31da287f151b905babbdb429c444)

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

index 322ec4b839edd271c2b452410896fdc0304a8e3b..2456ec86827ab9b94b866e581b292cf3e2060924 100644 (file)
@@ -209,6 +209,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 22a3c69864fac6fb4d771c67d41da6a6e19e8a5c..1568528fb6c28b1b2a4cfacb1affbb5ef9cbab93 100644 (file)
@@ -1388,6 +1388,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);
@@ -4759,6 +4760,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 2db14fdd6bff35eed7f98ae1612a547e63a46715..af4234ca8b1c57edbf4da089d006fce4694f7094 100644 (file)
@@ -1554,6 +1554,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);
@@ -1645,6 +1648,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;