diff options
-rw-r--r-- | fs/aio.c | 16 | ||||
-rw-r--r-- | include/linux/aio.h | 12 | ||||
-rw-r--r-- | include/linux/sched.h | 7 | ||||
-rw-r--r-- | kernel/fork.c | 1 |
4 files changed, 2 insertions, 34 deletions
@@ -710,18 +710,9 @@ static ssize_t aio_run_iocb(struct kiocb *iocb) | |||
710 | 710 | ||
711 | /* | 711 | /* |
712 | * Now we are all set to call the retry method in async | 712 | * Now we are all set to call the retry method in async |
713 | * context. By setting this thread's io_wait context | 713 | * context. |
714 | * to point to the wait queue entry inside the currently | ||
715 | * running iocb for the duration of the retry, we ensure | ||
716 | * that async notification wakeups are queued by the | ||
717 | * operation instead of blocking waits, and when notified, | ||
718 | * cause the iocb to be kicked for continuation (through | ||
719 | * the aio_wake_function callback). | ||
720 | */ | 714 | */ |
721 | BUG_ON(current->io_wait != NULL); | ||
722 | current->io_wait = &iocb->ki_wait; | ||
723 | ret = retry(iocb); | 715 | ret = retry(iocb); |
724 | current->io_wait = NULL; | ||
725 | 716 | ||
726 | if (ret != -EIOCBRETRY && ret != -EIOCBQUEUED) { | 717 | if (ret != -EIOCBRETRY && ret != -EIOCBQUEUED) { |
727 | BUG_ON(!list_empty(&iocb->ki_wait.task_list)); | 718 | BUG_ON(!list_empty(&iocb->ki_wait.task_list)); |
@@ -1508,10 +1499,7 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb) | |||
1508 | * Simply triggers a retry of the operation via kick_iocb. | 1499 | * Simply triggers a retry of the operation via kick_iocb. |
1509 | * | 1500 | * |
1510 | * This callback is specified in the wait queue entry in | 1501 | * This callback is specified in the wait queue entry in |
1511 | * a kiocb (current->io_wait points to this wait queue | 1502 | * a kiocb. |
1512 | * entry when an aio operation executes; it is used | ||
1513 | * instead of a synchronous wait when an i/o blocking | ||
1514 | * condition is encountered during aio). | ||
1515 | * | 1503 | * |
1516 | * Note: | 1504 | * Note: |
1517 | * This routine is executed with the wait queue lock held. | 1505 | * This routine is executed with the wait queue lock held. |
diff --git a/include/linux/aio.h b/include/linux/aio.h index d10e608f232d..7ef8de662001 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -232,18 +232,6 @@ int FASTCALL(io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | |||
232 | __put_ioctx(kioctx); \ | 232 | __put_ioctx(kioctx); \ |
233 | } while (0) | 233 | } while (0) |
234 | 234 | ||
235 | #define in_aio() (unlikely(!is_sync_wait(current->io_wait))) | ||
236 | |||
237 | /* may be used for debugging */ | ||
238 | #define warn_if_async() \ | ||
239 | do { \ | ||
240 | if (in_aio()) { \ | ||
241 | printk(KERN_ERR "%s(%s:%d) called in async context!\n", \ | ||
242 | __FUNCTION__, __FILE__, __LINE__); \ | ||
243 | dump_stack(); \ | ||
244 | } \ | ||
245 | } while (0) | ||
246 | |||
247 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) | 235 | #define io_wait_to_kiocb(wait) container_of(wait, struct kiocb, ki_wait) |
248 | 236 | ||
249 | #include <linux/aio_abi.h> | 237 | #include <linux/aio_abi.h> |
diff --git a/include/linux/sched.h b/include/linux/sched.h index c204ab0d4df1..269b234609b8 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -1110,13 +1110,6 @@ struct task_struct { | |||
1110 | 1110 | ||
1111 | unsigned long ptrace_message; | 1111 | unsigned long ptrace_message; |
1112 | siginfo_t *last_siginfo; /* For ptrace use. */ | 1112 | siginfo_t *last_siginfo; /* For ptrace use. */ |
1113 | /* | ||
1114 | * current io wait handle: wait queue entry to use for io waits | ||
1115 | * If this thread is processing aio, this points at the waitqueue | ||
1116 | * inside the currently handled kiocb. It may be NULL (i.e. default | ||
1117 | * to a stack based synchronous wait) if its doing sync IO. | ||
1118 | */ | ||
1119 | wait_queue_t *io_wait; | ||
1120 | #ifdef CONFIG_TASK_XACCT | 1113 | #ifdef CONFIG_TASK_XACCT |
1121 | /* i/o counters(bytes read/written, #syscalls */ | 1114 | /* i/o counters(bytes read/written, #syscalls */ |
1122 | u64 rchar, wchar, syscr, syscw; | 1115 | u64 rchar, wchar, syscr, syscw; |
diff --git a/kernel/fork.c b/kernel/fork.c index 7e455a93a75a..125246fc75a5 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1084,7 +1084,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1084 | p->security = NULL; | 1084 | p->security = NULL; |
1085 | #endif | 1085 | #endif |
1086 | p->io_context = NULL; | 1086 | p->io_context = NULL; |
1087 | p->io_wait = NULL; | ||
1088 | p->audit_context = NULL; | 1087 | p->audit_context = NULL; |
1089 | cpuset_fork(p); | 1088 | cpuset_fork(p); |
1090 | #ifdef CONFIG_NUMA | 1089 | #ifdef CONFIG_NUMA |