btrfs_node_key(c, &disk_key, mid);
 
        split = alloc_tree_block_no_bg_flush(trans, root, 0, &disk_key, level,
-                                            c->start, 0, BTRFS_NESTING_NORMAL);
+                                            c->start, 0, BTRFS_NESTING_SPLIT);
        if (IS_ERR(split))
                return PTR_ERR(split);
 
                btrfs_item_key(l, &disk_key, mid);
 
        right = alloc_tree_block_no_bg_flush(trans, root, 0, &disk_key, 0,
-                                            l->start, 0, BTRFS_NESTING_NORMAL);
+                                            l->start, 0, BTRFS_NESTING_SPLIT);
        if (IS_ERR(right))
                return PTR_ERR(right);
 
 
        BTRFS_NESTING_LEFT_COW,
        BTRFS_NESTING_RIGHT_COW,
 
+       /*
+        * When splitting we may push nodes to the left or right, but still use
+        * the subsequent nodes in our path, keeping our locks on those adjacent
+        * blocks.  Thus when we go to allocate a new split block we've already
+        * used up all of our available subclasses, so this subclass exists to
+        * handle this case where we need to allocate a new split block.
+        */
+       BTRFS_NESTING_SPLIT,
+
        /*
         * We are limited to MAX_LOCKDEP_SUBLCLASSES number of subclasses, so
         * add this in here and add a static_assert to keep us from going over