struct rtrs_clt_path *(*next_path)(struct path_it *it);
 };
 
-/**
- * list_next_or_null_rr_rcu - get next list element in round-robin fashion.
+/*
+ * rtrs_clt_get_next_path_or_null - get clt path from the list or return NULL
  * @head:      the head for the list.
- * @ptr:        the list head to take the next element from.
- * @type:       the type of the struct this is embedded in.
- * @memb:       the name of the list_head within the struct.
+ * @clt_path:  The element to take the next clt_path from.
  *
- * Next element returned in round-robin fashion, i.e. head will be skipped,
+ * Next clt path returned in round-robin fashion, i.e. head will be skipped,
  * but if list is observed as empty, NULL will be returned.
  *
- * This primitive may safely run concurrently with the _rcu list-mutation
+ * This function may safely run concurrently with the _rcu list-mutation
  * primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().
  */
-#define list_next_or_null_rr_rcu(head, ptr, type, memb) \
-({ \
-       list_next_or_null_rcu(head, ptr, type, memb) ?: \
-               list_next_or_null_rcu(head, READ_ONCE((ptr)->next), \
-                                     type, memb); \
-})
+static inline struct rtrs_clt_path *
+rtrs_clt_get_next_path_or_null(struct list_head *head, struct rtrs_clt_path *clt_path)
+{
+       return list_next_or_null_rcu(head, &clt_path->s.entry, typeof(*clt_path), s.entry) ?:
+                                    list_next_or_null_rcu(head,
+                                                          READ_ONCE((&clt_path->s.entry)->next),
+                                                          typeof(*clt_path), s.entry);
+}
 
 /**
  * get_next_path_rr() - Returns path in round-robin fashion.
                path = list_first_or_null_rcu(&clt->paths_list,
                                              typeof(*path), s.entry);
        else
-               path = list_next_or_null_rr_rcu(&clt->paths_list,
-                                               &path->s.entry,
-                                               typeof(*path),
-                                               s.entry);
+               path = rtrs_clt_get_next_path_or_null(&clt->paths_list, path);
+
        rcu_assign_pointer(*ppcpu_path, path);
 
        return path;
         * removed.  If @sess is the last element, then @next is NULL.
         */
        rcu_read_lock();
-       next = list_next_or_null_rr_rcu(&clt->paths_list, &clt_path->s.entry,
-                                       typeof(*next), s.entry);
+       next = rtrs_clt_get_next_path_or_null(&clt->paths_list, clt_path);
        rcu_read_unlock();
 
        /*