Commit afe928c1 authored by Tejun Heo's avatar Tejun Heo

workqueue: Remove clear_work_data()

clear_work_data() is only used in one place and immediately followed by
smp_mb(), making it equivalent to set_work_pool_and_clear_pending() w/
WORK_OFFQ_POOL_NONE for @pool_id. Drop it. No functional changes.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Reviewed-by: default avatarLai Jiangshan <jiangshanlai@gmail.com>
parent 978b8409
...@@ -763,10 +763,9 @@ static int work_next_color(int color) ...@@ -763,10 +763,9 @@ static int work_next_color(int color)
* contain the pointer to the queued pwq. Once execution starts, the flag * contain the pointer to the queued pwq. Once execution starts, the flag
* is cleared and the high bits contain OFFQ flags and pool ID. * is cleared and the high bits contain OFFQ flags and pool ID.
* *
* set_work_pwq(), set_work_pool_and_clear_pending(), mark_work_canceling() * set_work_pwq(), set_work_pool_and_clear_pending() and mark_work_canceling()
* and clear_work_data() can be used to set the pwq, pool or clear * can be used to set the pwq, pool or clear work->data. These functions should
* work->data. These functions should only be called while the work is * only be called while the work is owned - ie. while the PENDING bit is set.
* owned - ie. while the PENDING bit is set.
* *
* get_work_pool() and get_work_pwq() can be used to obtain the pool or pwq * get_work_pool() and get_work_pwq() can be used to obtain the pool or pwq
* corresponding to a work. Pool is available once the work has been * corresponding to a work. Pool is available once the work has been
...@@ -841,12 +840,6 @@ static void set_work_pool_and_clear_pending(struct work_struct *work, ...@@ -841,12 +840,6 @@ static void set_work_pool_and_clear_pending(struct work_struct *work,
smp_mb(); smp_mb();
} }
static void clear_work_data(struct work_struct *work)
{
smp_wmb(); /* see set_work_pool_and_clear_pending() */
set_work_data(work, WORK_STRUCT_NO_POOL, 0);
}
static inline struct pool_workqueue *work_struct_pwq(unsigned long data) static inline struct pool_workqueue *work_struct_pwq(unsigned long data)
{ {
return (struct pool_workqueue *)(data & WORK_STRUCT_PWQ_MASK); return (struct pool_workqueue *)(data & WORK_STRUCT_PWQ_MASK);
...@@ -4217,14 +4210,13 @@ static bool __cancel_work_sync(struct work_struct *work, u32 cflags) ...@@ -4217,14 +4210,13 @@ static bool __cancel_work_sync(struct work_struct *work, u32 cflags)
if (wq_online) if (wq_online)
__flush_work(work, true); __flush_work(work, true);
clear_work_data(work);
/* /*
* Paired with prepare_to_wait() above so that either * smp_mb() at the end of set_work_pool_and_clear_pending() is paired
* waitqueue_active() is visible here or !work_is_canceling() is * with prepare_to_wait() above so that either waitqueue_active() is
* visible there. * visible here or !work_is_canceling() is visible there.
*/ */
smp_mb(); set_work_pool_and_clear_pending(work, WORK_OFFQ_POOL_NONE);
if (waitqueue_active(&wq_cancel_waitq)) if (waitqueue_active(&wq_cancel_waitq))
__wake_up(&wq_cancel_waitq, TASK_NORMAL, 1, work); __wake_up(&wq_cancel_waitq, TASK_NORMAL, 1, work);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment