workqueue: add missing wmb() in clear_work_data()
authorTejun Heo <tj@kernel.org>
Tue, 14 Aug 2012 00:08:19 +0000 (17:08 -0700)
committerTejun Heo <tj@kernel.org>
Tue, 14 Aug 2012 00:08:19 +0000 (17:08 -0700)
commit23657bb192f14b789e4c478def8f11ecc95b4f6c
tree53d92c542c219d60ccef2ada045235f5e7076863
parent1265057fa02c7bed3b6d9ddc8a2048065a370364
workqueue: add missing wmb() in clear_work_data()

Any operation which clears PENDING should be preceded by a wmb to
guarantee that the next PENDING owner sees all the changes made before
PENDING release.

There are only two places where PENDING is cleared -
set_work_cpu_and_clear_pending() and clear_work_data().  The caller of
the former already does smp_wmb() but the latter doesn't have any.

Move the wmb above set_work_cpu_and_clear_pending() into it and add
one to clear_work_data().

There hasn't been any report related to this issue, and, given how
clear_work_data() is used, it is extremely unlikely to have caused any
actual problems on any architecture.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
kernel/workqueue.c