padata: Fix race on sequence number wrap
authorSteffen Klassert <steffen.klassert@secunet.com>
Fri, 9 Mar 2012 06:20:49 +0000 (07:20 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 14 Mar 2012 09:25:56 +0000 (17:25 +0800)
commit2dc9b5dbdef09840de852a4f0cc6a9c9eece7220
tree4164272ddddfc2477005866ce3261c76470c0d1a
parent3047817b894ddae62be07787bc8735a616104398
padata: Fix race on sequence number wrap

When padata_do_parallel() is called from multiple cpus for the same
padata instance, we can get object reordering on sequence number wrap
because testing for sequence number wrap and reseting the sequence
number must happen atomically but is implemented with two atomic
operations. This patch fixes this by converting the sequence number
from atomic_t to an unsigned int and protect the access with a
spin_lock. As a side effect, we get rid of the sequence number wrap
handling because the seqence number wraps back to null now without
the need to do anything.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
include/linux/padata.h
kernel/padata.c