- rcu_read_lock();
- head = rcu_dereference(s->head);
- node->next = head;
- /*
- * uatomic_cmpxchg() implicit memory barrier orders earlier
- * stores to node before publication.
- */
- if (uatomic_cmpxchg(&s->head, head, node) == head) {
- rcu_read_unlock();
- return;
- } else {
- /* Failure to prepend. Retry. */
- rcu_read_unlock();
- continue;
- }
- }
-}
+#else /* !_LGPL_SOURCE */
+
+extern void rcu_lfs_node_init(struct rcu_lfs_node *node);
+extern void rcu_lfs_init(struct rcu_lfs_stack *s);
+extern void rcu_lfs_push(struct rcu_lfs_stack *s, struct rcu_lfs_node *node);