diff --git a/lib/idr.c b/lib/idr.c index 83ef51e57381..f773fa053524 100644 --- a/lib/idr.c +++ b/lib/idr.c @@ -238,10 +238,9 @@ void *idr_get_next_ul(struct idr *idr, unsigned long *nextid) entry = rcu_dereference_raw(*slot); if (!entry) continue; - if (!radix_tree_deref_retry(entry)) + if (!xa_is_internal(entry)) break; - if (slot != (void *)&idr->idr_rt.rnode && - entry != (void *)RADIX_TREE_INTERNAL_NODE) + if (slot != &idr->idr_rt.xa_head && !xa_is_retry(entry)) break; slot = radix_tree_iter_retry(&iter); }