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

Merge branch 'iocb' into for-davem

trivial conflict in net/socket.c and non-trivial one in crypto -
that one had evaded aio_complete() removal.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 237dae88 7abccdba

+199 -266
+1 -1
arch/s390/hypfs/inode.c
··· 21 21 #include <linux/module.h> 22 22 #include <linux/seq_file.h> 23 23 #include <linux/mount.h> 24 - #include <linux/aio.h> 24 + #include <linux/uio.h> 25 25 #include <asm/ebcdic.h> 26 26 #include "hypfs.h" 27 27
+1 -1
crypto/algif_skcipher.c
··· 106 106 atomic_dec(&ctx->inflight); 107 107 skcipher_free_async_sgls(sreq); 108 108 kfree(req); 109 - aio_complete(iocb, err, err); 109 + iocb->ki_complete(iocb, err, err); 110 110 } 111 111 112 112 static inline int skcipher_sndbuf(struct sock *sk)
+1 -1
drivers/char/mem.c
··· 26 26 #include <linux/pfn.h> 27 27 #include <linux/export.h> 28 28 #include <linux/io.h> 29 - #include <linux/aio.h> 29 + #include <linux/uio.h> 30 30 31 31 #include <linux/uaccess.h> 32 32
-1
drivers/char/tile-srom.c
··· 27 27 #include <linux/types.h> /* size_t */ 28 28 #include <linux/proc_fs.h> 29 29 #include <linux/fcntl.h> /* O_ACCMODE */ 30 - #include <linux/aio.h> 31 30 #include <linux/pagemap.h> 32 31 #include <linux/hugetlb.h> 33 32 #include <linux/uaccess.h>
-1
drivers/infiniband/hw/ipath/ipath_file_ops.c
··· 40 40 #include <linux/slab.h> 41 41 #include <linux/highmem.h> 42 42 #include <linux/io.h> 43 - #include <linux/aio.h> 44 43 #include <linux/jiffies.h> 45 44 #include <linux/cpu.h> 46 45 #include <asm/pgtable.h>
-1
drivers/infiniband/hw/qib/qib_file_ops.c
··· 39 39 #include <linux/vmalloc.h> 40 40 #include <linux/highmem.h> 41 41 #include <linux/io.h> 42 - #include <linux/aio.h> 43 42 #include <linux/jiffies.h> 44 43 #include <asm/pgtable.h> 45 44 #include <linux/delay.h>
-1
drivers/misc/mei/amthif.c
··· 19 19 #include <linux/errno.h> 20 20 #include <linux/types.h> 21 21 #include <linux/fcntl.h> 22 - #include <linux/aio.h> 23 22 #include <linux/ioctl.h> 24 23 #include <linux/cdev.h> 25 24 #include <linux/list.h>
-1
drivers/misc/mei/main.c
··· 22 22 #include <linux/errno.h> 23 23 #include <linux/types.h> 24 24 #include <linux/fcntl.h> 25 - #include <linux/aio.h> 26 25 #include <linux/poll.h> 27 26 #include <linux/init.h> 28 27 #include <linux/ioctl.h>
-1
drivers/misc/mei/pci-me.c
··· 21 21 #include <linux/errno.h> 22 22 #include <linux/types.h> 23 23 #include <linux/fcntl.h> 24 - #include <linux/aio.h> 25 24 #include <linux/pci.h> 26 25 #include <linux/poll.h> 27 26 #include <linux/ioctl.h>
+1 -1
drivers/scsi/sg.c
··· 33 33 #include <linux/sched.h> 34 34 #include <linux/string.h> 35 35 #include <linux/mm.h> 36 - #include <linux/aio.h> 37 36 #include <linux/errno.h> 38 37 #include <linux/mtio.h> 39 38 #include <linux/ioctl.h> ··· 50 51 #include <linux/mutex.h> 51 52 #include <linux/atomic.h> 52 53 #include <linux/ratelimit.h> 54 + #include <linux/uio.h> 53 55 54 56 #include "scsi.h" 55 57 #include <scsi/scsi_dbg.h>
-1
drivers/staging/unisys/include/timskmod.h
··· 46 46 #include <linux/module.h> 47 47 #include <linux/moduleparam.h> 48 48 #include <linux/fcntl.h> 49 - #include <linux/aio.h> 50 49 #include <linux/workqueue.h> 51 50 #include <linux/kthread.h> 52 51 #include <linux/seq_file.h>
+4 -2
drivers/usb/gadget/function/f_fs.c
··· 23 23 #include <linux/export.h> 24 24 #include <linux/hid.h> 25 25 #include <linux/module.h> 26 + #include <linux/uio.h> 26 27 #include <asm/unaligned.h> 27 28 28 29 #include <linux/usb/composite.h> ··· 656 655 unuse_mm(io_data->mm); 657 656 } 658 657 659 - aio_complete(io_data->kiocb, ret, ret); 658 + io_data->kiocb->ki_complete(io_data->kiocb, ret, ret); 660 659 661 - if (io_data->ffs->ffs_eventfd && !io_data->kiocb->ki_eventfd) 660 + if (io_data->ffs->ffs_eventfd && 661 + !(io_data->kiocb->ki_flags & IOCB_EVENTFD)) 662 662 eventfd_signal(io_data->ffs->ffs_eventfd, 1); 663 663 664 664 usb_ep_free_request(io_data->ep, io_data->req);
+4 -2
drivers/usb/gadget/legacy/inode.c
··· 26 26 #include <linux/poll.h> 27 27 #include <linux/mmu_context.h> 28 28 #include <linux/aio.h> 29 + #include <linux/uio.h> 29 30 30 31 #include <linux/device.h> 31 32 #include <linux/moduleparam.h> ··· 470 469 ret = -EFAULT; 471 470 472 471 /* completing the iocb can drop the ctx and mm, don't touch mm after */ 473 - aio_complete(iocb, ret, ret); 472 + iocb->ki_complete(iocb, ret, ret); 474 473 475 474 kfree(priv->buf); 476 475 kfree(priv->to_free); ··· 498 497 kfree(priv); 499 498 iocb->private = NULL; 500 499 /* aio_complete() reports bytes-transferred _and_ faults */ 501 - aio_complete(iocb, req->actual ? req->actual : req->status, 500 + 501 + iocb->ki_complete(iocb, req->actual ? req->actual : req->status, 502 502 req->status); 503 503 } else { 504 504 /* ep_copy_to_user() won't report both; we hide some faults */
+1 -1
fs/9p/vfs_addr.c
··· 33 33 #include <linux/pagemap.h> 34 34 #include <linux/idr.h> 35 35 #include <linux/sched.h> 36 - #include <linux/aio.h> 36 + #include <linux/uio.h> 37 37 #include <net/9p/9p.h> 38 38 #include <net/9p/client.h> 39 39
+1 -1
fs/affs/file.c
··· 12 12 * affs regular file handling primitives 13 13 */ 14 14 15 - #include <linux/aio.h> 15 + #include <linux/uio.h> 16 16 #include "affs.h" 17 17 18 18 static struct buffer_head *affs_get_extblock_slow(struct inode *inode, u32 ext);
-1
fs/afs/write.c
··· 14 14 #include <linux/pagemap.h> 15 15 #include <linux/writeback.h> 16 16 #include <linux/pagevec.h> 17 - #include <linux/aio.h> 18 17 #include "internal.h" 19 18 20 19 static int afs_write_back_from_locked_page(struct afs_writeback *wb,
+83 -67
fs/aio.c
··· 151 151 unsigned id; 152 152 }; 153 153 154 + /* 155 + * We use ki_cancel == KIOCB_CANCELLED to indicate that a kiocb has been either 156 + * cancelled or completed (this makes a certain amount of sense because 157 + * successful cancellation - io_cancel() - does deliver the completion to 158 + * userspace). 159 + * 160 + * And since most things don't implement kiocb cancellation and we'd really like 161 + * kiocb completion to be lockless when possible, we use ki_cancel to 162 + * synchronize cancellation and completion - we only set it to KIOCB_CANCELLED 163 + * with xchg() or cmpxchg(), see batch_complete_aio() and kiocb_cancel(). 164 + */ 165 + #define KIOCB_CANCELLED ((void *) (~0ULL)) 166 + 167 + struct aio_kiocb { 168 + struct kiocb common; 169 + 170 + struct kioctx *ki_ctx; 171 + kiocb_cancel_fn *ki_cancel; 172 + 173 + struct iocb __user *ki_user_iocb; /* user's aiocb */ 174 + __u64 ki_user_data; /* user's data for completion */ 175 + 176 + struct list_head ki_list; /* the aio core uses this 177 + * for cancellation */ 178 + 179 + /* 180 + * If the aio_resfd field of the userspace iocb is not zero, 181 + * this is the underlying eventfd context to deliver events to. 182 + */ 183 + struct eventfd_ctx *ki_eventfd; 184 + }; 185 + 154 186 /*------ sysctl variables----*/ 155 187 static DEFINE_SPINLOCK(aio_nr_lock); 156 188 unsigned long aio_nr; /* current system wide number of aio requests */ ··· 252 220 if (IS_ERR(aio_mnt)) 253 221 panic("Failed to create aio fs mount."); 254 222 255 - kiocb_cachep = KMEM_CACHE(kiocb, SLAB_HWCACHE_ALIGN|SLAB_PANIC); 223 + kiocb_cachep = KMEM_CACHE(aio_kiocb, SLAB_HWCACHE_ALIGN|SLAB_PANIC); 256 224 kioctx_cachep = KMEM_CACHE(kioctx,SLAB_HWCACHE_ALIGN|SLAB_PANIC); 257 225 258 226 pr_debug("sizeof(struct page) = %zu\n", sizeof(struct page)); ··· 512 480 #define AIO_EVENTS_FIRST_PAGE ((PAGE_SIZE - sizeof(struct aio_ring)) / sizeof(struct io_event)) 513 481 #define AIO_EVENTS_OFFSET (AIO_EVENTS_PER_PAGE - AIO_EVENTS_FIRST_PAGE) 514 482 515 - void kiocb_set_cancel_fn(struct kiocb *req, kiocb_cancel_fn *cancel) 483 + void kiocb_set_cancel_fn(struct kiocb *iocb, kiocb_cancel_fn *cancel) 516 484 { 485 + struct aio_kiocb *req = container_of(iocb, struct aio_kiocb, common); 517 486 struct kioctx *ctx = req->ki_ctx; 518 487 unsigned long flags; 519 488 ··· 529 496 } 530 497 EXPORT_SYMBOL(kiocb_set_cancel_fn); 531 498 532 - static int kiocb_cancel(struct kiocb *kiocb) 499 + static int kiocb_cancel(struct aio_kiocb *kiocb) 533 500 { 534 501 kiocb_cancel_fn *old, *cancel; 535 502 ··· 547 514 cancel = cmpxchg(&kiocb->ki_cancel, old, KIOCB_CANCELLED); 548 515 } while (cancel != old); 549 516 550 - return cancel(kiocb); 517 + return cancel(&kiocb->common); 551 518 } 552 519 553 520 static void free_ioctx(struct work_struct *work) ··· 583 550 static void free_ioctx_users(struct percpu_ref *ref) 584 551 { 585 552 struct kioctx *ctx = container_of(ref, struct kioctx, users); 586 - struct kiocb *req; 553 + struct aio_kiocb *req; 587 554 588 555 spin_lock_irq(&ctx->ctx_lock); 589 556 590 557 while (!list_empty(&ctx->active_reqs)) { 591 558 req = list_first_entry(&ctx->active_reqs, 592 - struct kiocb, ki_list); 559 + struct aio_kiocb, ki_list); 593 560 594 561 list_del_init(&req->ki_list); 595 562 kiocb_cancel(req); ··· 811 778 return 0; 812 779 } 813 780 814 - /* wait_on_sync_kiocb: 815 - * Waits on the given sync kiocb to complete. 816 - */ 817 - ssize_t wait_on_sync_kiocb(struct kiocb *req) 818 - { 819 - while (!req->ki_ctx) { 820 - set_current_state(TASK_UNINTERRUPTIBLE); 821 - if (req->ki_ctx) 822 - break; 823 - io_schedule(); 824 - } 825 - __set_current_state(TASK_RUNNING); 826 - return req->ki_user_data; 827 - } 828 - EXPORT_SYMBOL(wait_on_sync_kiocb); 829 - 830 781 /* 831 782 * exit_aio: called when the last user of mm goes away. At this point, there is 832 783 * no way for any new requests to be submited or any of the io_* syscalls to be ··· 965 948 * Allocate a slot for an aio request. 966 949 * Returns NULL if no requests are free. 967 950 */ 968 - static inline struct kiocb *aio_get_req(struct kioctx *ctx) 951 + static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx) 969 952 { 970 - struct kiocb *req; 953 + struct aio_kiocb *req; 971 954 972 955 if (!get_reqs_available(ctx)) { 973 956 user_refill_reqs_available(ctx); ··· 988 971 return NULL; 989 972 } 990 973 991 - static void kiocb_free(struct kiocb *req) 974 + static void kiocb_free(struct aio_kiocb *req) 992 975 { 993 - if (req->ki_filp) 994 - fput(req->ki_filp); 976 + if (req->common.ki_filp) 977 + fput(req->common.ki_filp); 995 978 if (req->ki_eventfd != NULL) 996 979 eventfd_ctx_put(req->ki_eventfd); 997 980 kmem_cache_free(kiocb_cachep, req); ··· 1027 1010 /* aio_complete 1028 1011 * Called when the io request on the given iocb is complete. 1029 1012 */ 1030 - void aio_complete(struct kiocb *iocb, long res, long res2) 1013 + static void aio_complete(struct kiocb *kiocb, long res, long res2) 1031 1014 { 1015 + struct aio_kiocb *iocb = container_of(kiocb, struct aio_kiocb, common); 1032 1016 struct kioctx *ctx = iocb->ki_ctx; 1033 1017 struct aio_ring *ring; 1034 1018 struct io_event *ev_page, *event; ··· 1043 1025 * ref, no other paths have a way to get another ref 1044 1026 * - the sync task helpfully left a reference to itself in the iocb 1045 1027 */ 1046 - if (is_sync_kiocb(iocb)) { 1047 - iocb->ki_user_data = res; 1048 - smp_wmb(); 1049 - iocb->ki_ctx = ERR_PTR(-EXDEV); 1050 - wake_up_process(iocb->ki_obj.tsk); 1051 - return; 1052 - } 1028 + BUG_ON(is_sync_kiocb(kiocb)); 1053 1029 1054 1030 if (iocb->ki_list.next) { 1055 1031 unsigned long flags; ··· 1069 1057 ev_page = kmap_atomic(ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]); 1070 1058 event = ev_page + pos % AIO_EVENTS_PER_PAGE; 1071 1059 1072 - event->obj = (u64)(unsigned long)iocb->ki_obj.user; 1060 + event->obj = (u64)(unsigned long)iocb->ki_user_iocb; 1073 1061 event->data = iocb->ki_user_data; 1074 1062 event->res = res; 1075 1063 event->res2 = res2; ··· 1078 1066 flush_dcache_page(ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]); 1079 1067 1080 1068 pr_debug("%p[%u]: %p: %p %Lx %lx %lx\n", 1081 - ctx, tail, iocb, iocb->ki_obj.user, iocb->ki_user_data, 1069 + ctx, tail, iocb, iocb->ki_user_iocb, iocb->ki_user_data, 1082 1070 res, res2); 1083 1071 1084 1072 /* after flagging the request as done, we ··· 1125 1113 1126 1114 percpu_ref_put(&ctx->reqs); 1127 1115 } 1128 - EXPORT_SYMBOL(aio_complete); 1129 1116 1130 1117 /* aio_read_events_ring 1131 1118 * Pull an event off of the ioctx's event ring. Returns the number of ··· 1355 1344 static ssize_t aio_setup_vectored_rw(struct kiocb *kiocb, 1356 1345 int rw, char __user *buf, 1357 1346 unsigned long *nr_segs, 1347 + size_t *len, 1358 1348 struct iovec **iovec, 1359 1349 bool compat) 1360 1350 { 1361 1351 ssize_t ret; 1362 1352 1363 - *nr_segs = kiocb->ki_nbytes; 1353 + *nr_segs = *len; 1364 1354 1365 1355 #ifdef CONFIG_COMPAT 1366 1356 if (compat) ··· 1376 1364 if (ret < 0) 1377 1365 return ret; 1378 1366 1379 - /* ki_nbytes now reflect bytes instead of segs */ 1380 - kiocb->ki_nbytes = ret; 1367 + /* len now reflect bytes instead of segs */ 1368 + *len = ret; 1381 1369 return 0; 1382 1370 } 1383 1371 1384 1372 static ssize_t aio_setup_single_vector(struct kiocb *kiocb, 1385 1373 int rw, char __user *buf, 1386 1374 unsigned long *nr_segs, 1375 + size_t len, 1387 1376 struct iovec *iovec) 1388 1377 { 1389 - if (unlikely(!access_ok(!rw, buf, kiocb->ki_nbytes))) 1378 + if (unlikely(!access_ok(!rw, buf, len))) 1390 1379 return -EFAULT; 1391 1380 1392 1381 iovec->iov_base = buf; 1393 - iovec->iov_len = kiocb->ki_nbytes; 1382 + iovec->iov_len = len; 1394 1383 *nr_segs = 1; 1395 1384 return 0; 1396 1385 } ··· 1401 1388 * Performs the initial checks and io submission. 1402 1389 */ 1403 1390 static ssize_t aio_run_iocb(struct kiocb *req, unsigned opcode, 1404 - char __user *buf, bool compat) 1391 + char __user *buf, size_t len, bool compat) 1405 1392 { 1406 1393 struct file *file = req->ki_filp; 1407 1394 ssize_t ret; ··· 1436 1423 if (!rw_op && !iter_op) 1437 1424 return -EINVAL; 1438 1425 1439 - ret = (opcode == IOCB_CMD_PREADV || 1440 - opcode == IOCB_CMD_PWRITEV) 1441 - ? aio_setup_vectored_rw(req, rw, buf, &nr_segs, 1442 - &iovec, compat) 1443 - : aio_setup_single_vector(req, rw, buf, &nr_segs, 1444 - iovec); 1426 + if (opcode == IOCB_CMD_PREADV || opcode == IOCB_CMD_PWRITEV) 1427 + ret = aio_setup_vectored_rw(req, rw, buf, &nr_segs, 1428 + &len, &iovec, compat); 1429 + else 1430 + ret = aio_setup_single_vector(req, rw, buf, &nr_segs, 1431 + len, iovec); 1445 1432 if (!ret) 1446 - ret = rw_verify_area(rw, file, &req->ki_pos, req->ki_nbytes); 1433 + ret = rw_verify_area(rw, file, &req->ki_pos, len); 1447 1434 if (ret < 0) { 1448 1435 if (iovec != inline_vecs) 1449 1436 kfree(iovec); 1450 1437 return ret; 1451 1438 } 1452 1439 1453 - req->ki_nbytes = ret; 1440 + len = ret; 1454 1441 1455 1442 /* XXX: move/kill - rw_verify_area()? */ 1456 1443 /* This matches the pread()/pwrite() logic */ ··· 1463 1450 file_start_write(file); 1464 1451 1465 1452 if (iter_op) { 1466 - iov_iter_init(&iter, rw, iovec, nr_segs, req->ki_nbytes); 1453 + iov_iter_init(&iter, rw, iovec, nr_segs, len); 1467 1454 ret = iter_op(req, &iter); 1468 1455 } else { 1469 1456 ret = rw_op(req, iovec, nr_segs, req->ki_pos); ··· 1513 1500 static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, 1514 1501 struct iocb *iocb, bool compat) 1515 1502 { 1516 - struct kiocb *req; 1503 + struct aio_kiocb *req; 1517 1504 ssize_t ret; 1518 1505 1519 1506 /* enforce forwards compatibility on users */ ··· 1536 1523 if (unlikely(!req)) 1537 1524 return -EAGAIN; 1538 1525 1539 - req->ki_filp = fget(iocb->aio_fildes); 1540 - if (unlikely(!req->ki_filp)) { 1526 + req->common.ki_filp = fget(iocb->aio_fildes); 1527 + if (unlikely(!req->common.ki_filp)) { 1541 1528 ret = -EBADF; 1542 1529 goto out_put_req; 1543 1530 } 1531 + req->common.ki_pos = iocb->aio_offset; 1532 + req->common.ki_complete = aio_complete; 1533 + req->common.ki_flags = 0; 1544 1534 1545 1535 if (iocb->aio_flags & IOCB_FLAG_RESFD) { 1546 1536 /* ··· 1558 1542 req->ki_eventfd = NULL; 1559 1543 goto out_put_req; 1560 1544 } 1545 + 1546 + req->common.ki_flags |= IOCB_EVENTFD; 1561 1547 } 1562 1548 1563 1549 ret = put_user(KIOCB_KEY, &user_iocb->aio_key); ··· 1568 1550 goto out_put_req; 1569 1551 } 1570 1552 1571 - req->ki_obj.user = user_iocb; 1553 + req->ki_user_iocb = user_iocb; 1572 1554 req->ki_user_data = iocb->aio_data; 1573 - req->ki_pos = iocb->aio_offset; 1574 - req->ki_nbytes = iocb->aio_nbytes; 1575 1555 1576 - ret = aio_run_iocb(req, iocb->aio_lio_opcode, 1556 + ret = aio_run_iocb(&req->common, iocb->aio_lio_opcode, 1577 1557 (char __user *)(unsigned long)iocb->aio_buf, 1558 + iocb->aio_nbytes, 1578 1559 compat); 1579 1560 if (ret) 1580 1561 goto out_put_req; ··· 1660 1643 /* lookup_kiocb 1661 1644 * Finds a given iocb for cancellation. 1662 1645 */ 1663 - static struct kiocb *lookup_kiocb(struct kioctx *ctx, struct iocb __user *iocb, 1664 - u32 key) 1646 + static struct aio_kiocb * 1647 + lookup_kiocb(struct kioctx *ctx, struct iocb __user *iocb, u32 key) 1665 1648 { 1666 - struct list_head *pos; 1649 + struct aio_kiocb *kiocb; 1667 1650 1668 1651 assert_spin_locked(&ctx->ctx_lock); 1669 1652 ··· 1671 1654 return NULL; 1672 1655 1673 1656 /* TODO: use a hash or array, this sucks. */ 1674 - list_for_each(pos, &ctx->active_reqs) { 1675 - struct kiocb *kiocb = list_kiocb(pos); 1676 - if (kiocb->ki_obj.user == iocb) 1657 + list_for_each_entry(kiocb, &ctx->active_reqs, ki_list) { 1658 + if (kiocb->ki_user_iocb == iocb) 1677 1659 return kiocb; 1678 1660 } 1679 1661 return NULL; ··· 1692 1676 struct io_event __user *, result) 1693 1677 { 1694 1678 struct kioctx *ctx; 1695 - struct kiocb *kiocb; 1679 + struct aio_kiocb *kiocb; 1696 1680 u32 key; 1697 1681 int ret; 1698 1682
+1
fs/bfs/inode.c
··· 15 15 #include <linux/buffer_head.h> 16 16 #include <linux/vfs.h> 17 17 #include <linux/writeback.h> 18 + #include <linux/uio.h> 18 19 #include <asm/uaccess.h> 19 20 #include "bfs.h" 20 21
-1
fs/block_dev.c
··· 27 27 #include <linux/namei.h> 28 28 #include <linux/log2.h> 29 29 #include <linux/cleancache.h> 30 - #include <linux/aio.h> 31 30 #include <asm/uaccess.h> 32 31 #include "internal.h" 33 32
+1 -1
fs/btrfs/file.c
··· 24 24 #include <linux/string.h> 25 25 #include <linux/backing-dev.h> 26 26 #include <linux/mpage.h> 27 - #include <linux/aio.h> 28 27 #include <linux/falloc.h> 29 28 #include <linux/swap.h> 30 29 #include <linux/writeback.h> ··· 31 32 #include <linux/compat.h> 32 33 #include <linux/slab.h> 33 34 #include <linux/btrfs.h> 35 + #include <linux/uio.h> 34 36 #include "ctree.h" 35 37 #include "disk-io.h" 36 38 #include "transaction.h"
+1 -1
fs/btrfs/inode.c
··· 32 32 #include <linux/writeback.h> 33 33 #include <linux/statfs.h> 34 34 #include <linux/compat.h> 35 - #include <linux/aio.h> 36 35 #include <linux/bit_spinlock.h> 37 36 #include <linux/xattr.h> 38 37 #include <linux/posix_acl.h> ··· 42 43 #include <linux/btrfs.h> 43 44 #include <linux/blkdev.h> 44 45 #include <linux/posix_acl_xattr.h> 46 + #include <linux/uio.h> 45 47 #include "ctree.h" 46 48 #include "disk-io.h" 47 49 #include "transaction.h"
+1 -2
fs/ceph/file.c
··· 7 7 #include <linux/mount.h> 8 8 #include <linux/namei.h> 9 9 #include <linux/writeback.h> 10 - #include <linux/aio.h> 11 10 #include <linux/falloc.h> 12 11 13 12 #include "super.h" ··· 807 808 { 808 809 struct file *filp = iocb->ki_filp; 809 810 struct ceph_file_info *fi = filp->private_data; 810 - size_t len = iocb->ki_nbytes; 811 + size_t len = iov_iter_count(to); 811 812 struct inode *inode = file_inode(filp); 812 813 struct ceph_inode_info *ci = ceph_inode(inode); 813 814 struct page *pinned_page = NULL;
+2 -3
fs/direct-io.c
··· 37 37 #include <linux/uio.h> 38 38 #include <linux/atomic.h> 39 39 #include <linux/prefetch.h> 40 - #include <linux/aio.h> 41 40 42 41 /* 43 42 * How many user pages to map in one call to get_user_pages(). This determines ··· 264 265 ret = err; 265 266 } 266 267 267 - aio_complete(dio->iocb, ret, 0); 268 + dio->iocb->ki_complete(dio->iocb, ret, 0); 268 269 } 269 270 270 271 kmem_cache_free(dio_cache, dio); ··· 1055 1056 * operation. AIO can if it was a broken operation described above or 1056 1057 * in fact if all the bios race to complete before we get here. In 1057 1058 * that case dio_complete() translates the EIOCBQUEUED into the proper 1058 - * return code that the caller will hand to aio_complete(). 1059 + * return code that the caller will hand to ->complete(). 1059 1060 * 1060 1061 * This is managed by the bio_lock instead of being an atomic_t so that 1061 1062 * completion paths can drop their ref and use the remaining count to
-7
fs/ecryptfs/file.c
··· 31 31 #include <linux/security.h> 32 32 #include <linux/compat.h> 33 33 #include <linux/fs_stack.h> 34 - #include <linux/aio.h> 35 34 #include "ecryptfs_kernel.h" 36 35 37 36 /** ··· 51 52 struct file *file = iocb->ki_filp; 52 53 53 54 rc = generic_file_read_iter(iocb, to); 54 - /* 55 - * Even though this is a async interface, we need to wait 56 - * for IO to finish to update atime 57 - */ 58 - if (-EIOCBQUEUED == rc) 59 - rc = wait_on_sync_kiocb(iocb); 60 55 if (rc >= 0) { 61 56 path = ecryptfs_dentry_to_lower_path(file->f_path.dentry); 62 57 touch_atime(path);
+1 -1
fs/ext2/inode.c
··· 31 31 #include <linux/mpage.h> 32 32 #include <linux/fiemap.h> 33 33 #include <linux/namei.h> 34 - #include <linux/aio.h> 34 + #include <linux/uio.h> 35 35 #include "ext2.h" 36 36 #include "acl.h" 37 37 #include "xattr.h"
+1 -1
fs/ext3/inode.c
··· 27 27 #include <linux/writeback.h> 28 28 #include <linux/mpage.h> 29 29 #include <linux/namei.h> 30 - #include <linux/aio.h> 30 + #include <linux/uio.h> 31 31 #include "ext3.h" 32 32 #include "xattr.h" 33 33 #include "acl.h"
+1 -1
fs/ext4/file.c
··· 23 23 #include <linux/jbd2.h> 24 24 #include <linux/mount.h> 25 25 #include <linux/path.h> 26 - #include <linux/aio.h> 27 26 #include <linux/quotaops.h> 28 27 #include <linux/pagevec.h> 28 + #include <linux/uio.h> 29 29 #include "ext4.h" 30 30 #include "ext4_jbd2.h" 31 31 #include "xattr.h"
+1 -1
fs/ext4/indirect.c
··· 20 20 * (sct@redhat.com), 1993, 1998 21 21 */ 22 22 23 - #include <linux/aio.h> 24 23 #include "ext4_jbd2.h" 25 24 #include "truncate.h" 25 + #include <linux/uio.h> 26 26 27 27 #include <trace/events/ext4.h> 28 28
-1
fs/ext4/inode.c
··· 37 37 #include <linux/printk.h> 38 38 #include <linux/slab.h> 39 39 #include <linux/ratelimit.h> 40 - #include <linux/aio.h> 41 40 #include <linux/bitops.h> 42 41 43 42 #include "ext4_jbd2.h"
-1
fs/ext4/page-io.c
··· 18 18 #include <linux/pagevec.h> 19 19 #include <linux/mpage.h> 20 20 #include <linux/namei.h> 21 - #include <linux/aio.h> 22 21 #include <linux/uio.h> 23 22 #include <linux/bio.h> 24 23 #include <linux/workqueue.h>
+1 -1
fs/f2fs/data.c
··· 12 12 #include <linux/f2fs_fs.h> 13 13 #include <linux/buffer_head.h> 14 14 #include <linux/mpage.h> 15 - #include <linux/aio.h> 16 15 #include <linux/writeback.h> 17 16 #include <linux/backing-dev.h> 18 17 #include <linux/blkdev.h> 19 18 #include <linux/bio.h> 20 19 #include <linux/prefetch.h> 20 + #include <linux/uio.h> 21 21 22 22 #include "f2fs.h" 23 23 #include "node.h"
-1
fs/fat/inode.c
··· 19 19 #include <linux/mpage.h> 20 20 #include <linux/buffer_head.h> 21 21 #include <linux/mount.h> 22 - #include <linux/aio.h> 23 22 #include <linux/vfs.h> 24 23 #include <linux/parser.h> 25 24 #include <linux/uio.h>
+1 -1
fs/fuse/cuse.c
··· 38 38 #include <linux/device.h> 39 39 #include <linux/file.h> 40 40 #include <linux/fs.h> 41 - #include <linux/aio.h> 42 41 #include <linux/kdev_t.h> 43 42 #include <linux/kthread.h> 44 43 #include <linux/list.h> ··· 47 48 #include <linux/slab.h> 48 49 #include <linux/stat.h> 49 50 #include <linux/module.h> 51 + #include <linux/uio.h> 50 52 51 53 #include "fuse_i.h" 52 54
-1
fs/fuse/dev.c
··· 19 19 #include <linux/pipe_fs_i.h> 20 20 #include <linux/swap.h> 21 21 #include <linux/splice.h> 22 - #include <linux/aio.h> 23 22 24 23 MODULE_ALIAS_MISCDEV(FUSE_MINOR); 25 24 MODULE_ALIAS("devname:fuse");
+33 -22
fs/fuse/file.c
··· 15 15 #include <linux/module.h> 16 16 #include <linux/compat.h> 17 17 #include <linux/swap.h> 18 - #include <linux/aio.h> 19 18 #include <linux/falloc.h> 19 + #include <linux/uio.h> 20 20 21 21 static const struct file_operations fuse_direct_io_file_operations; 22 22 ··· 528 528 } 529 529 } 530 530 531 + static ssize_t fuse_get_res_by_io(struct fuse_io_priv *io) 532 + { 533 + if (io->err) 534 + return io->err; 535 + 536 + if (io->bytes >= 0 && io->write) 537 + return -EIO; 538 + 539 + return io->bytes < 0 ? io->size : io->bytes; 540 + } 541 + 531 542 /** 532 543 * In case of short read, the caller sets 'pos' to the position of 533 544 * actual end of fuse request in IO request. Otherwise, if bytes_requested ··· 557 546 */ 558 547 static void fuse_aio_complete(struct fuse_io_priv *io, int err, ssize_t pos) 559 548 { 549 + bool is_sync = is_sync_kiocb(io->iocb); 560 550 int left; 561 551 562 552 spin_lock(&io->lock); ··· 567 555 io->bytes = pos; 568 556 569 557 left = --io->reqs; 558 + if (!left && is_sync) 559 + complete(io->done); 570 560 spin_unlock(&io->lock); 571 561 572 - if (!left) { 573 - long res; 562 + if (!left && !is_sync) { 563 + ssize_t res = fuse_get_res_by_io(io); 574 564 575 - if (io->err) 576 - res = io->err; 577 - else if (io->bytes >= 0 && io->write) 578 - res = -EIO; 579 - else { 580 - res = io->bytes < 0 ? io->size : io->bytes; 565 + if (res >= 0) { 566 + struct inode *inode = file_inode(io->iocb->ki_filp); 567 + struct fuse_conn *fc = get_fuse_conn(inode); 568 + struct fuse_inode *fi = get_fuse_inode(inode); 581 569 582 - if (!is_sync_kiocb(io->iocb)) { 583 - struct inode *inode = file_inode(io->iocb->ki_filp); 584 - struct fuse_conn *fc = get_fuse_conn(inode); 585 - struct fuse_inode *fi = get_fuse_inode(inode); 586 - 587 - spin_lock(&fc->lock); 588 - fi->attr_version = ++fc->attr_version; 589 - spin_unlock(&fc->lock); 590 - } 570 + spin_lock(&fc->lock); 571 + fi->attr_version = ++fc->attr_version; 572 + spin_unlock(&fc->lock); 591 573 } 592 574 593 - aio_complete(io->iocb, res, 0); 575 + io->iocb->ki_complete(io->iocb, res, 0); 594 576 kfree(io); 595 577 } 596 578 } ··· 2807 2801 fuse_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, 2808 2802 loff_t offset) 2809 2803 { 2804 + DECLARE_COMPLETION_ONSTACK(wait); 2810 2805 ssize_t ret = 0; 2811 2806 struct file *file = iocb->ki_filp; 2812 2807 struct fuse_file *ff = file->private_data; ··· 2859 2852 if (!is_sync_kiocb(iocb) && (offset + count > i_size) && rw == WRITE) 2860 2853 io->async = false; 2861 2854 2855 + if (io->async && is_sync_kiocb(iocb)) 2856 + io->done = &wait; 2857 + 2862 2858 if (rw == WRITE) 2863 2859 ret = __fuse_direct_write(io, iter, &pos); 2864 2860 else ··· 2874 2864 if (!is_sync_kiocb(iocb)) 2875 2865 return -EIOCBQUEUED; 2876 2866 2877 - ret = wait_on_sync_kiocb(iocb); 2878 - } else { 2879 - kfree(io); 2867 + wait_for_completion(&wait); 2868 + ret = fuse_get_res_by_io(io); 2880 2869 } 2870 + 2871 + kfree(io); 2881 2872 2882 2873 if (rw == WRITE) { 2883 2874 if (ret > 0)
+1
fs/fuse/fuse_i.h
··· 263 263 int err; 264 264 struct kiocb *iocb; 265 265 struct file *file; 266 + struct completion *done; 266 267 }; 267 268 268 269 /**
+1 -1
fs/gfs2/aops.c
··· 20 20 #include <linux/swap.h> 21 21 #include <linux/gfs2_ondisk.h> 22 22 #include <linux/backing-dev.h> 23 - #include <linux/aio.h> 23 + #include <linux/uio.h> 24 24 #include <trace/events/writeback.h> 25 25 26 26 #include "gfs2.h"
-1
fs/gfs2/file.c
··· 25 25 #include <asm/uaccess.h> 26 26 #include <linux/dlm.h> 27 27 #include <linux/dlm_plock.h> 28 - #include <linux/aio.h> 29 28 #include <linux/delay.h> 30 29 31 30 #include "gfs2.h"
+1 -1
fs/hfs/inode.c
··· 14 14 #include <linux/pagemap.h> 15 15 #include <linux/mpage.h> 16 16 #include <linux/sched.h> 17 - #include <linux/aio.h> 17 + #include <linux/uio.h> 18 18 19 19 #include "hfs_fs.h" 20 20 #include "btree.h"
+1 -1
fs/hfsplus/inode.c
··· 14 14 #include <linux/pagemap.h> 15 15 #include <linux/mpage.h> 16 16 #include <linux/sched.h> 17 - #include <linux/aio.h> 17 + #include <linux/uio.h> 18 18 19 19 #include "hfsplus_fs.h" 20 20 #include "hfsplus_raw.h"
+1 -1
fs/jfs/inode.c
··· 22 22 #include <linux/buffer_head.h> 23 23 #include <linux/pagemap.h> 24 24 #include <linux/quotaops.h> 25 + #include <linux/uio.h> 25 26 #include <linux/writeback.h> 26 - #include <linux/aio.h> 27 27 #include "jfs_incore.h" 28 28 #include "jfs_inode.h" 29 29 #include "jfs_filsys.h"
+2 -2
fs/nfs/direct.c
··· 265 265 266 266 return -EINVAL; 267 267 #else 268 - VM_BUG_ON(iocb->ki_nbytes != PAGE_SIZE); 268 + VM_BUG_ON(iov_iter_count(iter) != PAGE_SIZE); 269 269 270 270 if (rw == READ) 271 271 return nfs_file_direct_read(iocb, iter, pos); ··· 393 393 long res = (long) dreq->error; 394 394 if (!res) 395 395 res = (long) dreq->count; 396 - aio_complete(dreq->iocb, res, 0); 396 + dreq->iocb->ki_complete(dreq->iocb, res, 0); 397 397 } 398 398 399 399 complete_all(&dreq->completion);
-1
fs/nfs/file.c
··· 26 26 #include <linux/nfs_mount.h> 27 27 #include <linux/mm.h> 28 28 #include <linux/pagemap.h> 29 - #include <linux/aio.h> 30 29 #include <linux/gfp.h> 31 30 #include <linux/swap.h> 32 31
+1 -1
fs/nilfs2/inode.c
··· 26 26 #include <linux/mpage.h> 27 27 #include <linux/pagemap.h> 28 28 #include <linux/writeback.h> 29 - #include <linux/aio.h> 29 + #include <linux/uio.h> 30 30 #include "nilfs.h" 31 31 #include "btnode.h" 32 32 #include "segment.h"
-1
fs/ntfs/file.c
··· 28 28 #include <linux/swap.h> 29 29 #include <linux/uio.h> 30 30 #include <linux/writeback.h> 31 - #include <linux/aio.h> 32 31 33 32 #include <asm/page.h> 34 33 #include <asm/uaccess.h>
-1
fs/ntfs/inode.c
··· 28 28 #include <linux/quotaops.h> 29 29 #include <linux/slab.h> 30 30 #include <linux/log2.h> 31 - #include <linux/aio.h> 32 31 33 32 #include "aops.h" 34 33 #include "attrib.h"
+1
fs/ocfs2/aops.c
··· 29 29 #include <linux/mpage.h> 30 30 #include <linux/quotaops.h> 31 31 #include <linux/blkdev.h> 32 + #include <linux/uio.h> 32 33 33 34 #include <cluster/masklog.h> 34 35
+1 -1
fs/ocfs2/aops.h
··· 22 22 #ifndef OCFS2_AOPS_H 23 23 #define OCFS2_AOPS_H 24 24 25 - #include <linux/aio.h> 25 + #include <linux/fs.h> 26 26 27 27 handle_t *ocfs2_start_walk_page_trans(struct inode *inode, 28 28 struct page *page,
+3 -5
fs/ocfs2/file.c
··· 2280 2280 file->f_path.dentry->d_name.name, 2281 2281 (unsigned int)from->nr_segs); /* GRRRRR */ 2282 2282 2283 - if (iocb->ki_nbytes == 0) 2283 + if (count == 0) 2284 2284 return 0; 2285 2285 2286 2286 appending = file->f_flags & O_APPEND ? 1 : 0; ··· 2330 2330 } 2331 2331 2332 2332 can_do_direct = direct_io; 2333 - ret = ocfs2_prepare_inode_for_write(file, ppos, 2334 - iocb->ki_nbytes, appending, 2333 + ret = ocfs2_prepare_inode_for_write(file, ppos, count, appending, 2335 2334 &can_do_direct, &has_refcount); 2336 2335 if (ret < 0) { 2337 2336 mlog_errno(ret); ··· 2338 2339 } 2339 2340 2340 2341 if (direct_io && !is_sync_kiocb(iocb)) 2341 - unaligned_dio = ocfs2_is_io_unaligned(inode, iocb->ki_nbytes, 2342 - *ppos); 2342 + unaligned_dio = ocfs2_is_io_unaligned(inode, count, *ppos); 2343 2343 2344 2344 /* 2345 2345 * We can't complete the direct I/O as requested, fall back to
-1
fs/pipe.c
··· 21 21 #include <linux/audit.h> 22 22 #include <linux/syscalls.h> 23 23 #include <linux/fcntl.h> 24 - #include <linux/aio.h> 25 24 26 25 #include <asm/uaccess.h> 27 26 #include <asm/ioctls.h>
+8 -27
fs/read_write.c
··· 9 9 #include <linux/fcntl.h> 10 10 #include <linux/file.h> 11 11 #include <linux/uio.h> 12 - #include <linux/aio.h> 13 12 #include <linux/fsnotify.h> 14 13 #include <linux/security.h> 15 14 #include <linux/export.h> ··· 342 343 343 344 init_sync_kiocb(&kiocb, file); 344 345 kiocb.ki_pos = *ppos; 345 - kiocb.ki_nbytes = iov_iter_count(iter); 346 346 347 347 iter->type |= READ; 348 348 ret = file->f_op->read_iter(&kiocb, iter); 349 - if (ret == -EIOCBQUEUED) 350 - ret = wait_on_sync_kiocb(&kiocb); 351 - 349 + BUG_ON(ret == -EIOCBQUEUED); 352 350 if (ret > 0) 353 351 *ppos = kiocb.ki_pos; 354 352 return ret; ··· 362 366 363 367 init_sync_kiocb(&kiocb, file); 364 368 kiocb.ki_pos = *ppos; 365 - kiocb.ki_nbytes = iov_iter_count(iter); 366 369 367 370 iter->type |= WRITE; 368 371 ret = file->f_op->write_iter(&kiocb, iter); 369 - if (ret == -EIOCBQUEUED) 370 - ret = wait_on_sync_kiocb(&kiocb); 371 - 372 + BUG_ON(ret == -EIOCBQUEUED); 372 373 if (ret > 0) 373 374 *ppos = kiocb.ki_pos; 374 375 return ret; ··· 419 426 420 427 init_sync_kiocb(&kiocb, filp); 421 428 kiocb.ki_pos = *ppos; 422 - kiocb.ki_nbytes = len; 423 429 424 430 ret = filp->f_op->aio_read(&kiocb, &iov, 1, kiocb.ki_pos); 425 - if (-EIOCBQUEUED == ret) 426 - ret = wait_on_sync_kiocb(&kiocb); 431 + BUG_ON(ret == -EIOCBQUEUED); 427 432 *ppos = kiocb.ki_pos; 428 433 return ret; 429 434 } ··· 437 446 438 447 init_sync_kiocb(&kiocb, filp); 439 448 kiocb.ki_pos = *ppos; 440 - kiocb.ki_nbytes = len; 441 449 iov_iter_init(&iter, READ, &iov, 1, len); 442 450 443 451 ret = filp->f_op->read_iter(&kiocb, &iter); 444 - if (-EIOCBQUEUED == ret) 445 - ret = wait_on_sync_kiocb(&kiocb); 452 + BUG_ON(ret == -EIOCBQUEUED); 446 453 *ppos = kiocb.ki_pos; 447 454 return ret; 448 455 } ··· 499 510 500 511 init_sync_kiocb(&kiocb, filp); 501 512 kiocb.ki_pos = *ppos; 502 - kiocb.ki_nbytes = len; 503 513 504 514 ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos); 505 - if (-EIOCBQUEUED == ret) 506 - ret = wait_on_sync_kiocb(&kiocb); 515 + BUG_ON(ret == -EIOCBQUEUED); 507 516 *ppos = kiocb.ki_pos; 508 517 return ret; 509 518 } ··· 517 530 518 531 init_sync_kiocb(&kiocb, filp); 519 532 kiocb.ki_pos = *ppos; 520 - kiocb.ki_nbytes = len; 521 533 iov_iter_init(&iter, WRITE, &iov, 1, len); 522 534 523 535 ret = filp->f_op->write_iter(&kiocb, &iter); 524 - if (-EIOCBQUEUED == ret) 525 - ret = wait_on_sync_kiocb(&kiocb); 536 + BUG_ON(ret == -EIOCBQUEUED); 526 537 *ppos = kiocb.ki_pos; 527 538 return ret; 528 539 } ··· 704 719 705 720 init_sync_kiocb(&kiocb, filp); 706 721 kiocb.ki_pos = *ppos; 707 - kiocb.ki_nbytes = len; 708 722 709 723 iov_iter_init(&iter, rw, iov, nr_segs, len); 710 724 ret = fn(&kiocb, &iter); 711 - if (ret == -EIOCBQUEUED) 712 - ret = wait_on_sync_kiocb(&kiocb); 725 + BUG_ON(ret == -EIOCBQUEUED); 713 726 *ppos = kiocb.ki_pos; 714 727 return ret; 715 728 } ··· 720 737 721 738 init_sync_kiocb(&kiocb, filp); 722 739 kiocb.ki_pos = *ppos; 723 - kiocb.ki_nbytes = len; 724 740 725 741 ret = fn(&kiocb, iov, nr_segs, kiocb.ki_pos); 726 - if (ret == -EIOCBQUEUED) 727 - ret = wait_on_sync_kiocb(&kiocb); 742 + BUG_ON(ret == -EIOCBQUEUED); 728 743 *ppos = kiocb.ki_pos; 729 744 return ret; 730 745 }
+1 -1
fs/reiserfs/inode.c
··· 18 18 #include <linux/writeback.h> 19 19 #include <linux/quotaops.h> 20 20 #include <linux/swap.h> 21 - #include <linux/aio.h> 21 + #include <linux/uio.h> 22 22 23 23 int reiserfs_commit_write(struct file *f, struct page *page, 24 24 unsigned from, unsigned to);
-1
fs/splice.c
··· 32 32 #include <linux/gfp.h> 33 33 #include <linux/socket.h> 34 34 #include <linux/compat.h> 35 - #include <linux/aio.h> 36 35 #include "internal.h" 37 36 38 37 /*
-1
fs/ubifs/file.c
··· 50 50 */ 51 51 52 52 #include "ubifs.h" 53 - #include <linux/aio.h> 54 53 #include <linux/mount.h> 55 54 #include <linux/namei.h> 56 55 #include <linux/slab.h>
+2 -2
fs/udf/file.c
··· 34 34 #include <linux/errno.h> 35 35 #include <linux/pagemap.h> 36 36 #include <linux/buffer_head.h> 37 - #include <linux/aio.h> 37 + #include <linux/uio.h> 38 38 39 39 #include "udf_i.h" 40 40 #include "udf_sb.h" ··· 122 122 struct file *file = iocb->ki_filp; 123 123 struct inode *inode = file_inode(file); 124 124 int err, pos; 125 - size_t count = iocb->ki_nbytes; 125 + size_t count = iov_iter_count(from); 126 126 struct udf_inode_info *iinfo = UDF_I(inode); 127 127 128 128 mutex_lock(&inode->i_mutex);
+1 -1
fs/udf/inode.c
··· 38 38 #include <linux/slab.h> 39 39 #include <linux/crc-itu-t.h> 40 40 #include <linux/mpage.h> 41 - #include <linux/aio.h> 41 + #include <linux/uio.h> 42 42 43 43 #include "udf_i.h" 44 44 #include "udf_sb.h"
-1
fs/xfs/xfs_aops.c
··· 31 31 #include "xfs_bmap.h" 32 32 #include "xfs_bmap_util.h" 33 33 #include "xfs_bmap_btree.h" 34 - #include <linux/aio.h> 35 34 #include <linux/gfp.h> 36 35 #include <linux/mpage.h> 37 36 #include <linux/pagevec.h>
-1
fs/xfs/xfs_file.c
··· 38 38 #include "xfs_icache.h" 39 39 #include "xfs_pnfs.h" 40 40 41 - #include <linux/aio.h> 42 41 #include <linux/dcache.h> 43 42 #include <linux/falloc.h> 44 43 #include <linux/pagevec.h>
+1 -69
include/linux/aio.h
··· 1 1 #ifndef __LINUX__AIO_H 2 2 #define __LINUX__AIO_H 3 3 4 - #include <linux/list.h> 5 - #include <linux/workqueue.h> 6 4 #include <linux/aio_abi.h> 7 - #include <linux/uio.h> 8 - #include <linux/rcupdate.h> 9 - 10 - #include <linux/atomic.h> 11 5 12 6 struct kioctx; 13 7 struct kiocb; 8 + struct mm_struct; 14 9 15 10 #define KIOCB_KEY 0 16 11 17 - /* 18 - * We use ki_cancel == KIOCB_CANCELLED to indicate that a kiocb has been either 19 - * cancelled or completed (this makes a certain amount of sense because 20 - * successful cancellation - io_cancel() - does deliver the completion to 21 - * userspace). 22 - * 23 - * And since most things don't implement kiocb cancellation and we'd really like 24 - * kiocb completion to be lockless when possible, we use ki_cancel to 25 - * synchronize cancellation and completion - we only set it to KIOCB_CANCELLED 26 - * with xchg() or cmpxchg(), see batch_complete_aio() and kiocb_cancel(). 27 - */ 28 - #define KIOCB_CANCELLED ((void *) (~0ULL)) 29 - 30 12 typedef int (kiocb_cancel_fn)(struct kiocb *); 31 - 32 - struct kiocb { 33 - struct file *ki_filp; 34 - struct kioctx *ki_ctx; /* NULL for sync ops */ 35 - kiocb_cancel_fn *ki_cancel; 36 - void *private; 37 - 38 - union { 39 - void __user *user; 40 - struct task_struct *tsk; 41 - } ki_obj; 42 - 43 - __u64 ki_user_data; /* user's data for completion */ 44 - loff_t ki_pos; 45 - size_t ki_nbytes; /* copy of iocb->aio_nbytes */ 46 - 47 - struct list_head ki_list; /* the aio core uses this 48 - * for cancellation */ 49 - 50 - /* 51 - * If the aio_resfd field of the userspace iocb is not zero, 52 - * this is the underlying eventfd context to deliver events to. 53 - */ 54 - struct eventfd_ctx *ki_eventfd; 55 - }; 56 - 57 - static inline bool is_sync_kiocb(struct kiocb *kiocb) 58 - { 59 - return kiocb->ki_ctx == NULL; 60 - } 61 - 62 - static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp) 63 - { 64 - *kiocb = (struct kiocb) { 65 - .ki_ctx = NULL, 66 - .ki_filp = filp, 67 - .ki_obj.tsk = current, 68 - }; 69 - } 70 13 71 14 /* prototypes */ 72 15 #ifdef CONFIG_AIO 73 - extern ssize_t wait_on_sync_kiocb(struct kiocb *iocb); 74 - extern void aio_complete(struct kiocb *iocb, long res, long res2); 75 - struct mm_struct; 76 16 extern void exit_aio(struct mm_struct *mm); 77 17 extern long do_io_submit(aio_context_t ctx_id, long nr, 78 18 struct iocb __user *__user *iocbpp, bool compat); 79 19 void kiocb_set_cancel_fn(struct kiocb *req, kiocb_cancel_fn *cancel); 80 20 #else 81 - static inline ssize_t wait_on_sync_kiocb(struct kiocb *iocb) { return 0; } 82 - static inline void aio_complete(struct kiocb *iocb, long res, long res2) { } 83 - struct mm_struct; 84 21 static inline void exit_aio(struct mm_struct *mm) { } 85 22 static inline long do_io_submit(aio_context_t ctx_id, long nr, 86 23 struct iocb __user * __user *iocbpp, ··· 25 88 static inline void kiocb_set_cancel_fn(struct kiocb *req, 26 89 kiocb_cancel_fn *cancel) { } 27 90 #endif /* CONFIG_AIO */ 28 - 29 - static inline struct kiocb *list_kiocb(struct list_head *h) 30 - { 31 - return list_entry(h, struct kiocb, ki_list); 32 - } 33 91 34 92 /* for sysctl: */ 35 93 extern unsigned long aio_nr;
+22
include/linux/fs.h
··· 314 314 struct address_space; 315 315 struct writeback_control; 316 316 317 + #define IOCB_EVENTFD (1 << 0) 318 + 319 + struct kiocb { 320 + struct file *ki_filp; 321 + loff_t ki_pos; 322 + void (*ki_complete)(struct kiocb *iocb, long ret, long ret2); 323 + void *private; 324 + int ki_flags; 325 + }; 326 + 327 + static inline bool is_sync_kiocb(struct kiocb *kiocb) 328 + { 329 + return kiocb->ki_complete == NULL; 330 + } 331 + 332 + static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp) 333 + { 334 + *kiocb = (struct kiocb) { 335 + .ki_filp = filp, 336 + }; 337 + } 338 + 317 339 /* 318 340 * "descriptor" for what we're up to with a read. 319 341 * This allows us to use the same read code yet
-1
include/net/sock.h
··· 57 57 #include <linux/page_counter.h> 58 58 #include <linux/memcontrol.h> 59 59 #include <linux/static_key.h> 60 - #include <linux/aio.h> 61 60 #include <linux/sched.h> 62 61 63 62 #include <linux/filter.h>
+2 -2
kernel/printk/printk.c
··· 32 32 #include <linux/security.h> 33 33 #include <linux/bootmem.h> 34 34 #include <linux/memblock.h> 35 - #include <linux/aio.h> 36 35 #include <linux/syscalls.h> 37 36 #include <linux/kexec.h> 38 37 #include <linux/kdb.h> ··· 45 46 #include <linux/irq_work.h> 46 47 #include <linux/utsname.h> 47 48 #include <linux/ctype.h> 49 + #include <linux/uio.h> 48 50 49 51 #include <asm/uaccess.h> 50 52 ··· 521 521 int i; 522 522 int level = default_message_loglevel; 523 523 int facility = 1; /* LOG_USER */ 524 - size_t len = iocb->ki_nbytes; 524 + size_t len = iov_iter_count(from); 525 525 ssize_t ret = len; 526 526 527 527 if (len > LOG_LINE_MAX)
+1
kernel/sysctl.c
··· 19 19 */ 20 20 21 21 #include <linux/module.h> 22 + #include <linux/aio.h> 22 23 #include <linux/mm.h> 23 24 #include <linux/swap.h> 24 25 #include <linux/slab.h>
-1
mm/filemap.c
··· 13 13 #include <linux/compiler.h> 14 14 #include <linux/fs.h> 15 15 #include <linux/uaccess.h> 16 - #include <linux/aio.h> 17 16 #include <linux/capability.h> 18 17 #include <linux/kernel_stat.h> 19 18 #include <linux/gfp.h>
+1 -2
mm/page_io.c
··· 20 20 #include <linux/buffer_head.h> 21 21 #include <linux/writeback.h> 22 22 #include <linux/frontswap.h> 23 - #include <linux/aio.h> 24 23 #include <linux/blkdev.h> 24 + #include <linux/uio.h> 25 25 #include <asm/pgtable.h> 26 26 27 27 static struct bio *get_swap_bio(gfp_t gfp_flags, ··· 274 274 iov_iter_bvec(&from, ITER_BVEC | WRITE, &bv, 1, PAGE_SIZE); 275 275 init_sync_kiocb(&kiocb, swap_file); 276 276 kiocb.ki_pos = page_file_offset(page); 277 - kiocb.ki_nbytes = PAGE_SIZE; 278 277 279 278 set_page_writeback(page); 280 279 unlock_page(page);
+1 -1
mm/shmem.c
··· 31 31 #include <linux/mm.h> 32 32 #include <linux/export.h> 33 33 #include <linux/swap.h> 34 - #include <linux/aio.h> 34 + #include <linux/uio.h> 35 35 36 36 static struct vfsmount *shm_mnt; 37 37
-1
net/ipv4/raw.c
··· 46 46 #include <linux/stddef.h> 47 47 #include <linux/slab.h> 48 48 #include <linux/errno.h> 49 - #include <linux/aio.h> 50 49 #include <linux/kernel.h> 51 50 #include <linux/export.h> 52 51 #include <linux/spinlock.h>
+3 -3
net/socket.c
··· 808 808 if (iocb->ki_pos != 0) 809 809 return -ESPIPE; 810 810 811 - if (iocb->ki_nbytes == 0) /* Match SYS5 behaviour */ 811 + if (!iov_iter_count(to)) /* Match SYS5 behaviour */ 812 812 return 0; 813 813 814 - res = sock_recvmsg(sock, &msg, iocb->ki_nbytes, msg.msg_flags); 814 + res = sock_recvmsg(sock, &msg, iov_iter_count(to), msg.msg_flags); 815 815 *to = msg.msg_iter; 816 816 return res; 817 817 } ··· 833 833 if (sock->type == SOCK_SEQPACKET) 834 834 msg.msg_flags |= MSG_EOR; 835 835 836 - res = sock_sendmsg(sock, &msg, iocb->ki_nbytes); 836 + res = sock_sendmsg(sock, &msg, iov_iter_count(from)); 837 837 *from = msg.msg_iter; 838 838 return res; 839 839 }
+1 -1
sound/core/pcm_native.c
··· 25 25 #include <linux/slab.h> 26 26 #include <linux/time.h> 27 27 #include <linux/pm_qos.h> 28 - #include <linux/aio.h> 29 28 #include <linux/io.h> 30 29 #include <linux/dma-mapping.h> 31 30 #include <sound/core.h> ··· 34 35 #include <sound/pcm_params.h> 35 36 #include <sound/timer.h> 36 37 #include <sound/minors.h> 38 + #include <linux/uio.h> 37 39 38 40 /* 39 41 * Compatibility