Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c43dc2fd authored by Benjamin LaHaise's avatar Benjamin LaHaise Committed by Linus Torvalds
Browse files

[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: default avatarBenjamin LaHaise <benjamin.c.lahaise@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 63e68809
Loading
Loading
Loading
Loading
+8 −8
Original line number Original line Diff line number Diff line
@@ -33,7 +33,7 @@ int default_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key
struct __wait_queue {
struct __wait_queue {
	unsigned int flags;
	unsigned int flags;
#define WQ_FLAG_EXCLUSIVE	0x01
#define WQ_FLAG_EXCLUSIVE	0x01
	struct task_struct * task;
	void *private;
	wait_queue_func_t func;
	wait_queue_func_t func;
	struct list_head task_list;
	struct list_head task_list;
};
};
@@ -60,7 +60,7 @@ typedef struct __wait_queue_head wait_queue_head_t;
 */
 */


#define __WAITQUEUE_INITIALIZER(name, tsk) {				\
#define __WAITQUEUE_INITIALIZER(name, tsk) {				\
	.task		= tsk,						\
	.private	= tsk,						\
	.func		= default_wake_function,			\
	.func		= default_wake_function,			\
	.task_list	= { NULL, NULL } }
	.task_list	= { NULL, NULL } }


@@ -86,7 +86,7 @@ static inline void init_waitqueue_head(wait_queue_head_t *q)
static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
{
{
	q->flags = 0;
	q->flags = 0;
	q->task = p;
	q->private = p;
	q->func = default_wake_function;
	q->func = default_wake_function;
}
}


@@ -94,7 +94,7 @@ static inline void init_waitqueue_func_entry(wait_queue_t *q,
					wait_queue_func_t func)
					wait_queue_func_t func)
{
{
	q->flags = 0;
	q->flags = 0;
	q->task = NULL;
	q->private = NULL;
	q->func = func;
	q->func = func;
}
}


@@ -110,7 +110,7 @@ static inline int waitqueue_active(wait_queue_head_t *q)
 * aio specifies a wait queue entry with an async notification
 * aio specifies a wait queue entry with an async notification
 * callback routine, not associated with any task.
 * callback routine, not associated with any task.
 */
 */
#define is_sync_wait(wait)	(!(wait) || ((wait)->task))
#define is_sync_wait(wait)	(!(wait) || ((wait)->private))


extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
@@ -384,7 +384,7 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);


#define DEFINE_WAIT(name)						\
#define DEFINE_WAIT(name)						\
	wait_queue_t name = {						\
	wait_queue_t name = {						\
		.task		= current,				\
		.private	= current,				\
		.func		= autoremove_wake_function,		\
		.func		= autoremove_wake_function,		\
		.task_list	= LIST_HEAD_INIT((name).task_list),	\
		.task_list	= LIST_HEAD_INIT((name).task_list),	\
	}
	}
@@ -393,7 +393,7 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
	struct wait_bit_queue name = {					\
	struct wait_bit_queue name = {					\
		.key = __WAIT_BIT_KEY_INITIALIZER(word, bit),		\
		.key = __WAIT_BIT_KEY_INITIALIZER(word, bit),		\
		.wait	= {						\
		.wait	= {						\
			.task		= current,			\
			.private	= current,			\
			.func		= wake_bit_function,		\
			.func		= wake_bit_function,		\
			.task_list	=				\
			.task_list	=				\
				LIST_HEAD_INIT((name).wait.task_list),	\
				LIST_HEAD_INIT((name).wait.task_list),	\
@@ -402,7 +402,7 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);


#define init_wait(wait)							\
#define init_wait(wait)							\
	do {								\
	do {								\
		(wait)->task = current;					\
		(wait)->private = current;				\
		(wait)->func = autoremove_wake_function;		\
		(wait)->func = autoremove_wake_function;		\
		INIT_LIST_HEAD(&(wait)->task_list);			\
		INIT_LIST_HEAD(&(wait)->task_list);			\
	} while (0)
	} while (0)
+1 −1
Original line number Original line Diff line number Diff line
@@ -2869,7 +2869,7 @@ asmlinkage void __sched preempt_schedule_irq(void)


int default_wake_function(wait_queue_t *curr, unsigned mode, int sync, void *key)
int default_wake_function(wait_queue_t *curr, unsigned mode, int sync, void *key)
{
{
	task_t *p = curr->task;
	task_t *p = curr->private;
	return try_to_wake_up(p, mode, sync);
	return try_to_wake_up(p, mode, sync);
}
}