Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] aio: make wait_queue ->task ->private

In the upcoming aio_down patch, it is useful to store a private data
pointer in the kiocb's wait_queue. Since we provide our own wake up
function and do not require the task_struct pointer, it makes sense to
convert the task pointer into a generic private pointer.

Signed-off-by: Benjamin LaHaise <benjamin.c.lahaise@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Benjamin LaHaise and committed by
Linus Torvalds
c43dc2fd 63e68809

+9 -9
+8 -8
include/linux/wait.h
··· 33 33 struct __wait_queue { 34 34 unsigned int flags; 35 35 #define WQ_FLAG_EXCLUSIVE 0x01 36 - struct task_struct * task; 36 + void *private; 37 37 wait_queue_func_t func; 38 38 struct list_head task_list; 39 39 }; ··· 60 60 */ 61 61 62 62 #define __WAITQUEUE_INITIALIZER(name, tsk) { \ 63 - .task = tsk, \ 63 + .private = tsk, \ 64 64 .func = default_wake_function, \ 65 65 .task_list = { NULL, NULL } } 66 66 ··· 86 86 static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) 87 87 { 88 88 q->flags = 0; 89 - q->task = p; 89 + q->private = p; 90 90 q->func = default_wake_function; 91 91 } 92 92 ··· 94 94 wait_queue_func_t func) 95 95 { 96 96 q->flags = 0; 97 - q->task = NULL; 97 + q->private = NULL; 98 98 q->func = func; 99 99 } 100 100 ··· 110 110 * aio specifies a wait queue entry with an async notification 111 111 * callback routine, not associated with any task. 112 112 */ 113 - #define is_sync_wait(wait) (!(wait) || ((wait)->task)) 113 + #define is_sync_wait(wait) (!(wait) || ((wait)->private)) 114 114 115 115 extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); 116 116 extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait)); ··· 384 384 385 385 #define DEFINE_WAIT(name) \ 386 386 wait_queue_t name = { \ 387 - .task = current, \ 387 + .private = current, \ 388 388 .func = autoremove_wake_function, \ 389 389 .task_list = LIST_HEAD_INIT((name).task_list), \ 390 390 } ··· 393 393 struct wait_bit_queue name = { \ 394 394 .key = __WAIT_BIT_KEY_INITIALIZER(word, bit), \ 395 395 .wait = { \ 396 - .task = current, \ 396 + .private = current, \ 397 397 .func = wake_bit_function, \ 398 398 .task_list = \ 399 399 LIST_HEAD_INIT((name).wait.task_list), \ ··· 402 402 403 403 #define init_wait(wait) \ 404 404 do { \ 405 - (wait)->task = current; \ 405 + (wait)->private = current; \ 406 406 (wait)->func = autoremove_wake_function; \ 407 407 INIT_LIST_HEAD(&(wait)->task_list); \ 408 408 } while (0)
+1 -1
kernel/sched.c
··· 2869 2869 2870 2870 int default_wake_function(wait_queue_t *curr, unsigned mode, int sync, void *key) 2871 2871 { 2872 - task_t *p = curr->task; 2872 + task_t *p = curr->private; 2873 2873 return try_to_wake_up(p, mode, sync); 2874 2874 } 2875 2875