• Oleg Nesterov's avatar
    llist: fix/simplify llist_add() and llist_add_batch() · fb4214db
    Oleg Nesterov authored
    1. This is mostly theoretical, but llist_add*() need ACCESS_ONCE().
       Otherwise it is not guaranteed that the first cmpxchg() uses the
       same value for old_entry and new_last->next.
    2. These helpers cache the result of cmpxchg() and read the initial
       value of head->first before the main loop. I do not think this
       makes sense. In the likely case cmpxchg() succeeds, otherwise
       it doesn't hurt to reload head->first.
       I think it would be better to simplify the code and simply read
       ->first before cmpxchg().
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Andrey Vagin <avagin@openvz.org>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
llist.c 2.67 KB