]> git.proxmox.com Git - mirror_spl-debian.git/commitdiff
Add list_link_replace() function
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 27 Aug 2010 20:51:25 +0000 (13:51 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 27 Aug 2010 21:23:48 +0000 (14:23 -0700)
The list_link_replace() function with swap a new item it to the place
of an old item in a list.  It is the callers responsibility to ensure
all lists involved are locked properly.

include/sys/list.h

index e30d7b7e0f4e38ee7b663c0dd4e392f41ce10318..303b959de09574d4f7265c0a7ab791db5679198f 100644 (file)
@@ -203,4 +203,17 @@ spl_list_move_tail(list_t *dst, list_t *src)
 
 #define list_move_tail(dst, src)       spl_list_move_tail(dst, src)
 
+static inline void
+list_link_replace(list_node_t *old_node, list_node_t *new_node)
+{
+       ASSERT(list_link_active(old_node));
+       ASSERT(!list_link_active(new_node));
+
+       new_node->next = old_node->next;
+       new_node->prev = old_node->prev;
+       old_node->prev->next = new_node;
+       old_node->next->prev = new_node;
+       list_link_init(old_node);
+}
+
 #endif /* SPL_LIST_H */