[PATCH] list: introduce list_replace() helper
list_replace() is similar to list_replace_rcu(), but unlike list_replace_rcu() it could be used when list_empty(old) == 1 doesn't use barriers Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
cb259f07b1
commit
54e7377035
@@ -197,12 +197,35 @@ static inline void list_del_rcu(struct list_head *entry)
|
|||||||
entry->prev = LIST_POISON2;
|
entry->prev = LIST_POISON2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* list_replace - replace old entry by new one
|
||||||
|
* @old : the element to be replaced
|
||||||
|
* @new : the new element to insert
|
||||||
|
* Note: if 'old' was empty, it will be overwritten.
|
||||||
|
*/
|
||||||
|
static inline void list_replace(struct list_head *old,
|
||||||
|
struct list_head *new)
|
||||||
|
{
|
||||||
|
new->next = old->next;
|
||||||
|
new->next->prev = new;
|
||||||
|
new->prev = old->prev;
|
||||||
|
new->prev->next = new;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void list_replace_init(struct list_head *old,
|
||||||
|
struct list_head *new)
|
||||||
|
{
|
||||||
|
list_replace(old, new);
|
||||||
|
INIT_LIST_HEAD(old);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* list_replace_rcu - replace old entry by new one
|
* list_replace_rcu - replace old entry by new one
|
||||||
* @old : the element to be replaced
|
* @old : the element to be replaced
|
||||||
* @new : the new element to insert
|
* @new : the new element to insert
|
||||||
*
|
*
|
||||||
* The old entry will be replaced with the new entry atomically.
|
* The old entry will be replaced with the new entry atomically.
|
||||||
|
* Note: 'old' should not be empty.
|
||||||
*/
|
*/
|
||||||
static inline void list_replace_rcu(struct list_head *old,
|
static inline void list_replace_rcu(struct list_head *old,
|
||||||
struct list_head *new)
|
struct list_head *new)
|
||||||
|
Reference in New Issue
Block a user