mirror of https://gitee.com/openkylin/linux.git
wait: kill is_sync_wait()
is_sync_wait() is used to distinguish between sync and async waits. Basically sync waits are the ones initialized with init_waitqueue_entry() and async ones with init_waitqueue_func_entry(). The sync/async distinction is used only in prepare_to_wait[_exclusive]() and its only function is to skip setting the current task state if the wait is async. This has a few problems. * No one uses it. None of func_entry users use prepare_to_wait() functions, so the code path never gets executed. * The distinction is bogus. Maybe back when func_entry is used only by aio but it's now also used by epoll and in future possibly by 9p and poll/select. * Taking @state as argument and ignoring it silenly depending on how @wait is initialized is just a bad error-prone API. * It prevents func_entry waits from using wait->private for no good reason. This patch kills is_sync_wait() and the associated code paths from prepare_to_wait[_exclusive](). As there was no user of these code paths, this patch doesn't cause any behavior difference. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c80cfb0406
commit
a25d644fc0
|
@ -108,15 +108,6 @@ static inline int waitqueue_active(wait_queue_head_t *q)
|
|||
return !list_empty(&q->task_list);
|
||||
}
|
||||
|
||||
/*
|
||||
* Used to distinguish between sync and async io wait context:
|
||||
* sync i/o typically specifies a NULL wait queue entry or a wait
|
||||
* queue entry bound to a task (current task) to wake up.
|
||||
* aio specifies a wait queue entry with an async notification
|
||||
* callback routine, not associated with any task.
|
||||
*/
|
||||
#define is_sync_wait(wait) (!(wait) || ((wait)->private))
|
||||
|
||||
extern void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
|
||||
extern void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait);
|
||||
extern void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
|
||||
|
|
|
@ -72,12 +72,7 @@ prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state)
|
|||
spin_lock_irqsave(&q->lock, flags);
|
||||
if (list_empty(&wait->task_list))
|
||||
__add_wait_queue(q, wait);
|
||||
/*
|
||||
* don't alter the task state if this is just going to
|
||||
* queue an async wait queue callback
|
||||
*/
|
||||
if (is_sync_wait(wait))
|
||||
set_current_state(state);
|
||||
set_current_state(state);
|
||||
spin_unlock_irqrestore(&q->lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(prepare_to_wait);
|
||||
|
@ -91,12 +86,7 @@ prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state)
|
|||
spin_lock_irqsave(&q->lock, flags);
|
||||
if (list_empty(&wait->task_list))
|
||||
__add_wait_queue_tail(q, wait);
|
||||
/*
|
||||
* don't alter the task state if this is just going to
|
||||
* queue an async wait queue callback
|
||||
*/
|
||||
if (is_sync_wait(wait))
|
||||
set_current_state(state);
|
||||
set_current_state(state);
|
||||
spin_unlock_irqrestore(&q->lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(prepare_to_wait_exclusive);
|
||||
|
|
Loading…
Reference in New Issue