- assert((flags & RCUJA_SHADOW_CLEAR_FREE_NODE)
- && (flags & RCUJA_SHADOW_CLEAR_FREE_LOCK));
- flavor->update_call_rcu(&shadow_node->head,
- free_shadow_node_and_node_and_lock);
+ if ((flags & RCUJA_SHADOW_CLEAR_FREE_NODE)
+ && !shadow_node->is_root) {
+ 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);
+ }
+ } else {
+ if (flags & RCUJA_SHADOW_CLEAR_FREE_LOCK) {
+ flavor->update_call_rcu(&shadow_node->head,
+ free_shadow_node_and_lock);
+ } else {
+ flavor->update_call_rcu(&shadow_node->head,
+ free_shadow_node);
+ }
+ }