]> git.baikalelectronics.ru Git - kernel.git/commit
mm: slub: be more careful about the double cmpxchg of freelist
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 17 Mar 2020 18:04:09 +0000 (11:04 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 Mar 2020 07:25:57 +0000 (08:25 +0100)
commitd987ab0ec4b80faba1ae2e89cd2eb93e98b5d737
treeaa25cbe53c6d5ee65c5fd4b7a395667a1f9662eb
parent3e85c436278a2d810c8124a9182e93e4dc484ef5
mm: slub: be more careful about the double cmpxchg of freelist

commit c9418a085a4bf603c97d5624fb0083d50a35d36f upstream.

This is just a cleanup addition to Jann's fix to properly update the
transaction ID for the slub slowpath in commit 8bdac3893835 ("mm: slub:
add missing TID bump..").

The transaction ID is what protects us against any concurrent accesses,
but we should really also make sure to make the 'freelist' comparison
itself always use the same freelist value that we then used as the new
next free pointer.

Jann points out that if we do all of this carefully, we could skip the
transaction ID update for all the paths that only remove entries from
the lists, and only update the TID when adding entries (to avoid the ABA
issue with cmpxchg and list handling re-adding a previously seen value).

But this patch just does the "make sure to cmpxchg the same value we
used" rather than then try to be clever.

Acked-by: Jann Horn <jannh@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/slub.c