···634634 next->next->pprev = &next->next;635635}636636637637+/**638638+ * hlist_add_before_rcu - adds the specified element to the specified hlist639639+ * before the specified node while permitting racing traversals.640640+ * @n: the new element to add to the hash list.641641+ * @next: the existing element to add the new element before.642642+ *643643+ * The caller must take whatever precautions are necessary644644+ * (such as holding appropriate locks) to avoid racing645645+ * with another list-mutation primitive, such as hlist_add_head_rcu()646646+ * or hlist_del_rcu(), running on this same list.647647+ * However, it is perfectly legal to run concurrently with648648+ * the _rcu list-traversal primitives, such as649649+ * hlist_for_each_rcu(), used to prevent memory-consistency650650+ * problems on Alpha CPUs.651651+ */637652static inline void hlist_add_before_rcu(struct hlist_node *n,638653 struct hlist_node *next)639654{···659644 *(n->pprev) = n;660645}661646647647+/**648648+ * hlist_add_after_rcu - adds the specified element to the specified hlist649649+ * after the specified node while permitting racing traversals.650650+ * @prev: the existing element to add the new element after.651651+ * @n: the new element to add to the hash list.652652+ *653653+ * The caller must take whatever precautions are necessary654654+ * (such as holding appropriate locks) to avoid racing655655+ * with another list-mutation primitive, such as hlist_add_head_rcu()656656+ * or hlist_del_rcu(), running on this same list.657657+ * However, it is perfectly legal to run concurrently with658658+ * the _rcu list-traversal primitives, such as659659+ * hlist_for_each_rcu(), used to prevent memory-consistency660660+ * problems on Alpha CPUs.661661+ */662662static inline void hlist_add_after_rcu(struct hlist_node *prev,663663 struct hlist_node *n)664664{