diff options
Diffstat (limited to 'fs/aio.c')
| -rw-r--r-- | fs/aio.c | 40 |
1 files changed, 2 insertions, 38 deletions
| @@ -711,10 +711,8 @@ static ssize_t aio_run_iocb(struct kiocb *iocb) | |||
| 711 | */ | 711 | */ |
| 712 | ret = retry(iocb); | 712 | ret = retry(iocb); |
| 713 | 713 | ||
| 714 | if (ret != -EIOCBRETRY && ret != -EIOCBQUEUED) { | 714 | if (ret != -EIOCBRETRY && ret != -EIOCBQUEUED) |
| 715 | BUG_ON(!list_empty(&iocb->ki_wait.task_list)); | ||
| 716 | aio_complete(iocb, ret, 0); | 715 | aio_complete(iocb, ret, 0); |
| 717 | } | ||
| 718 | out: | 716 | out: |
| 719 | spin_lock_irq(&ctx->ctx_lock); | 717 | spin_lock_irq(&ctx->ctx_lock); |
| 720 | 718 | ||
| @@ -866,13 +864,6 @@ static void try_queue_kicked_iocb(struct kiocb *iocb) | |||
| 866 | unsigned long flags; | 864 | unsigned long flags; |
| 867 | int run = 0; | 865 | int run = 0; |
| 868 | 866 | ||
| 869 | /* We're supposed to be the only path putting the iocb back on the run | ||
| 870 | * list. If we find that the iocb is *back* on a wait queue already | ||
| 871 | * than retry has happened before we could queue the iocb. This also | ||
| 872 | * means that the retry could have completed and freed our iocb, no | ||
| 873 | * good. */ | ||
| 874 | BUG_ON((!list_empty(&iocb->ki_wait.task_list))); | ||
| 875 | |||
| 876 | spin_lock_irqsave(&ctx->ctx_lock, flags); | 867 | spin_lock_irqsave(&ctx->ctx_lock, flags); |
| 877 | /* set this inside the lock so that we can't race with aio_run_iocb() | 868 | /* set this inside the lock so that we can't race with aio_run_iocb() |
| 878 | * testing it and putting the iocb on the run list under the lock */ | 869 | * testing it and putting the iocb on the run list under the lock */ |
| @@ -886,7 +877,7 @@ static void try_queue_kicked_iocb(struct kiocb *iocb) | |||
| 886 | /* | 877 | /* |
| 887 | * kick_iocb: | 878 | * kick_iocb: |
| 888 | * Called typically from a wait queue callback context | 879 | * Called typically from a wait queue callback context |
| 889 | * (aio_wake_function) to trigger a retry of the iocb. | 880 | * to trigger a retry of the iocb. |
| 890 | * The retry is usually executed by aio workqueue | 881 | * The retry is usually executed by aio workqueue |
| 891 | * threads (See aio_kick_handler). | 882 | * threads (See aio_kick_handler). |
| 892 | */ | 883 | */ |
| @@ -1520,31 +1511,6 @@ static ssize_t aio_setup_iocb(struct kiocb *kiocb) | |||
| 1520 | return 0; | 1511 | return 0; |
| 1521 | } | 1512 | } |
| 1522 | 1513 | ||
| 1523 | /* | ||
| 1524 | * aio_wake_function: | ||
| 1525 | * wait queue callback function for aio notification, | ||
| 1526 | * Simply triggers a retry of the operation via kick_iocb. | ||
| 1527 | * | ||
| 1528 | * This callback is specified in the wait queue entry in | ||
| 1529 | * a kiocb. | ||
| 1530 | * | ||
| 1531 | * Note: | ||
| 1532 | * This routine is executed with the wait queue lock held. | ||
| 1533 | * Since kick_iocb acquires iocb->ctx->ctx_lock, it nests | ||
| 1534 | * the ioctx lock inside the wait queue lock. This is safe | ||
| 1535 | * because this callback isn't used for wait queues which | ||
| 1536 | * are nested inside ioctx lock (i.e. ctx->wait) | ||
| 1537 | */ | ||
| 1538 | static int aio_wake_function(wait_queue_t *wait, unsigned mode, | ||
| 1539 | int sync, void *key) | ||
| 1540 | { | ||
| 1541 | struct kiocb *iocb = container_of(wait, struct kiocb, ki_wait); | ||
| 1542 | |||
| 1543 | list_del_init(&wait->task_list); | ||
| 1544 | kick_iocb(iocb); | ||
| 1545 | return 1; | ||
| 1546 | } | ||
| 1547 | |||
| 1548 | static void aio_batch_add(struct address_space *mapping, | 1514 | static void aio_batch_add(struct address_space *mapping, |
| 1549 | struct hlist_head *batch_hash) | 1515 | struct hlist_head *batch_hash) |
| 1550 | { | 1516 | { |
| @@ -1642,8 +1608,6 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | |||
| 1642 | req->ki_buf = (char __user *)(unsigned long)iocb->aio_buf; | 1608 | req->ki_buf = (char __user *)(unsigned long)iocb->aio_buf; |
| 1643 | req->ki_left = req->ki_nbytes = iocb->aio_nbytes; | 1609 | req->ki_left = req->ki_nbytes = iocb->aio_nbytes; |
| 1644 | req->ki_opcode = iocb->aio_lio_opcode; | 1610 | req->ki_opcode = iocb->aio_lio_opcode; |
| 1645 | init_waitqueue_func_entry(&req->ki_wait, aio_wake_function); | ||
| 1646 | INIT_LIST_HEAD(&req->ki_wait.task_list); | ||
| 1647 | 1611 | ||
| 1648 | ret = aio_setup_iocb(req); | 1612 | ret = aio_setup_iocb(req); |
| 1649 | 1613 | ||
