- if (!ret) {
- if ((flags & RCUJA_SHADOW_CLEAR_FREE_NODE)
- && shadow_node->level) {
- if (shadow_node->level == shadow_node->ja->tree_depth - 1) {
- rcuja_free_all_children(shadow_node,
- shadow_node->node_flag,
- rcu_free_node);
- }
- if (flags & RCUJA_SHADOW_CLEAR_FREE_LOCK) {
- flavor->update_call_rcu(&shadow_node->head,
- free_shadow_node_and_node_and_lock);
- } else {
- flavor->update_call_rcu(&shadow_node->head,
- free_shadow_node_and_node);
- }
+ if (ret)
+ goto unlock;
+ if ((flags & RCUJA_SHADOW_CLEAR_FREE_NODE)
+ && shadow_node->level) {
+ if (flags & RCUJA_SHADOW_CLEAR_FREE_LOCK) {
+ flavor->update_call_rcu(&shadow_node->head,
+ free_shadow_node_and_node_and_lock);