* no pages, so we expect to be able to remove them all and
         * delete and free the empty node afterwards.
         */
-       BUG_ON(!workingset_node_shadows(node));
-       BUG_ON(workingset_node_pages(node));
-
+       if (WARN_ON_ONCE(!workingset_node_shadows(node)))
+               goto out_invalid;
+       if (WARN_ON_ONCE(workingset_node_pages(node)))
+               goto out_invalid;
        for (i = 0; i < RADIX_TREE_MAP_SIZE; i++) {
                if (node->slots[i]) {
-                       BUG_ON(!radix_tree_exceptional_entry(node->slots[i]));
+                       if (WARN_ON_ONCE(!radix_tree_exceptional_entry(node->slots[i])))
+                               goto out_invalid;
+                       if (WARN_ON_ONCE(!mapping->nrexceptional))
+                               goto out_invalid;
                        node->slots[i] = NULL;
                        workingset_node_shadows_dec(node);
-                       BUG_ON(!mapping->nrexceptional);
                        mapping->nrexceptional--;
                }
        }
-       BUG_ON(workingset_node_shadows(node));
+       if (WARN_ON_ONCE(workingset_node_shadows(node)))
+               goto out_invalid;
        inc_node_state(page_pgdat(virt_to_page(node)), WORKINGSET_NODERECLAIM);
-       if (!__radix_tree_delete_node(&mapping->page_tree, node))
-               BUG();
+       __radix_tree_delete_node(&mapping->page_tree, node);
 
+out_invalid:
        spin_unlock(&mapping->tree_lock);
        ret = LRU_REMOVED_RETRY;
 out: