Lines Matching full:aio

28  * Regression test to do some very basic AIO exercising on several types of
30 * size buffer with pseudo-random data, writing it to one fd using AIO, then
31 * reading it from a second descriptor using AIO. For some targets, the same
49 #include <aio.h>
80 * A completion function will block until the aio has completed, then return
81 * the result of the aio. errno will be set appropriately.
155 poll(struct aiocb *aio) in poll() argument
159 while ((error = aio_error(aio)) == EINPROGRESS) in poll()
164 return (aio_return(aio)); in poll()
180 poll_signaled(struct aiocb *aio) in poll_signaled() argument
185 error = aio_error(aio); in poll_signaled()
191 return (aio_return(aio)); in poll_signaled()
232 suspend(struct aiocb *aio) in suspend() argument
234 const struct aiocb *const iocbs[] = {aio}; in suspend()
239 return (aio_return(aio)); in suspend()
245 waitcomplete(struct aiocb *aio) in waitcomplete() argument
251 ATF_REQUIRE_EQ(aio, aiop); in waitcomplete()
277 poll_kqueue(struct aiocb *aio) in poll_kqueue() argument
282 kq = aio->aio_sigevent.sigev_notify_kqueue; in poll_kqueue()
286 ATF_CHECK_EQ(events[0].ident, (uintptr_t) aio); in poll_kqueue()
293 return (aio_return(aio)); in poll_kqueue()
303 struct aiocb aio; in aio_write_test() local
306 bzero(&aio, sizeof(aio)); in aio_write_test()
307 aio.aio_buf = ac->ac_buffer; in aio_write_test()
308 aio.aio_nbytes = ac->ac_buflen; in aio_write_test()
309 aio.aio_fildes = ac->ac_write_fd; in aio_write_test()
310 aio.aio_offset = 0; in aio_write_test()
312 aio.aio_sigevent = *sev; in aio_write_test()
314 if (aio_write(&aio) < 0) in aio_write_test()
317 len = comp(&aio); in aio_write_test()
319 atf_tc_fail("aio failed: %s", strerror(errno)); in aio_write_test()
322 atf_tc_fail("aio short write (%jd)", (intmax_t)len); in aio_write_test()
335 struct aiocb aio; in aio_writev_test() local
340 bzero(&aio, sizeof(aio)); in aio_writev_test()
342 aio.aio_fildes = ac->ac_write_fd; in aio_writev_test()
343 aio.aio_offset = 0; in aio_writev_test()
350 aio.aio_iov = iov; in aio_writev_test()
351 aio.aio_iovcnt = 2; in aio_writev_test()
353 aio.aio_sigevent = *sev; in aio_writev_test()
355 if (aio_writev(&aio) < 0) in aio_writev_test()
358 len = comp(&aio); in aio_writev_test()
360 atf_tc_fail("aio failed: %s", strerror(errno)); in aio_writev_test()
363 atf_tc_fail("aio short write (%jd)", (intmax_t)len); in aio_writev_test()
373 struct aiocb aio; in aio_read_test() local
377 bzero(&aio, sizeof(aio)); in aio_read_test()
378 aio.aio_buf = ac->ac_buffer; in aio_read_test()
379 aio.aio_nbytes = ac->ac_buflen; in aio_read_test()
380 aio.aio_fildes = ac->ac_read_fd; in aio_read_test()
381 aio.aio_offset = 0; in aio_read_test()
383 aio.aio_sigevent = *sev; in aio_read_test()
385 if (aio_read(&aio) < 0) in aio_read_test()
388 len = comp(&aio); in aio_read_test()
390 atf_tc_fail("aio failed: %s", strerror(errno)); in aio_read_test()
393 "aio short read (%jd)", (intmax_t)len); in aio_read_test()
402 struct aiocb aio; in aio_readv_test() local
408 bzero(&aio, sizeof(aio)); in aio_readv_test()
409 aio.aio_fildes = ac->ac_read_fd; in aio_readv_test()
410 aio.aio_offset = 0; in aio_readv_test()
417 aio.aio_iov = iov; in aio_readv_test()
418 aio.aio_iovcnt = 2; in aio_readv_test()
420 aio.aio_sigevent = *sev; in aio_readv_test()
422 if (aio_readv(&aio) < 0) in aio_readv_test()
425 len = comp(&aio); in aio_readv_test()
427 atf_tc_fail("aio failed: %s", strerror(errno)); in aio_readv_test()
430 "aio short read (%jd)", (intmax_t)len); in aio_readv_test()
437 * Series of type-specific tests for AIO. For now, we just make sure we can
455 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_file_test()
517 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_fifo_test()
591 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_unix_socketpair_test()
665 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_pty_test()
735 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_pipe_test()
796 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_md_setup()
988 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_zvol_setup()
1060 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1122 * AIO read requests resulting in an uncancellable request.
1136 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1190 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_socket_blocking_short_write_test()
1273 * Verify that AIO requests fail when applied to a listening socket.
1309 * Verify that listen(2) fails if a socket has pending AIO requests.
1359 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1426 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1488 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1532 ATF_REQUIRE_KERNEL_MODULE("aio"); in aio_fsync_test()
1585 ATF_REQUIRE_MSG(false, "unmatched AIO request"); in aio_fsync_test()
1590 "AIO request %u did not complete", i); in aio_fsync_test()
1614 struct aiocb aio; in ATF_TC_BODY() local
1615 const struct aiocb *const iocbs[] = {&aio}; in ATF_TC_BODY()
1621 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1629 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1630 aio.aio_fildes = fd; in ATF_TC_BODY()
1631 aio.aio_offset = 0; in ATF_TC_BODY()
1632 aio.aio_iov = iov; in ATF_TC_BODY()
1633 aio.aio_iovcnt = 1; in ATF_TC_BODY()
1635 r = aio_writev(&aio); in ATF_TC_BODY()
1638 r = aio_return(&aio); in ATF_TC_BODY()
1653 struct aiocb aio; in ATF_TC_BODY() local
1659 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1668 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1669 aio.aio_fildes = fd; in ATF_TC_BODY()
1670 aio.aio_offset = 0; in ATF_TC_BODY()
1671 aio.aio_iov = iov; in ATF_TC_BODY()
1672 aio.aio_iovcnt = 1 << 30; in ATF_TC_BODY()
1674 ATF_REQUIRE_EQ(-1, aio_writev(&aio)); in ATF_TC_BODY()
1684 "Vectored AIO should gracefully handle invalid addresses"); in ATF_TC_HEAD()
1689 struct aiocb aio; in ATF_TC_BODY() local
1696 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1709 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1710 aio.aio_fildes = fd; in ATF_TC_BODY()
1711 aio.aio_offset = 0; in ATF_TC_BODY()
1712 aio.aio_iov = iov; in ATF_TC_BODY()
1713 aio.aio_iovcnt = nitems(iov); in ATF_TC_BODY()
1715 ATF_REQUIRE_EQ(-1, aio_writev(&aio)); in ATF_TC_BODY()
1728 struct aiocb aio; in ATF_TC_BODY() local
1731 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1737 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1738 aio.aio_fildes = fd; in ATF_TC_BODY()
1739 aio.aio_offset = 0; in ATF_TC_BODY()
1740 aio.aio_iovcnt = 0; in ATF_TC_BODY()
1742 ATF_REQUIRE_EQ(0, aio_writev(&aio)); in ATF_TC_BODY()
1743 ATF_REQUIRE_EQ(0, suspend(&aio)); in ATF_TC_BODY()
1751 struct aiocb aio; in ATF_TC_BODY() local
1754 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1760 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1761 aio.aio_fildes = fd; in ATF_TC_BODY()
1762 aio.aio_offset = 0; in ATF_TC_BODY()
1763 aio.aio_iovcnt = 0; in ATF_TC_BODY()
1764 aio.aio_sigevent = *setup_signal(); in ATF_TC_BODY()
1766 ATF_REQUIRE_EQ(0, aio_writev(&aio)); in ATF_TC_BODY()
1767 ATF_REQUIRE_EQ(0, poll_signaled(&aio)); in ATF_TC_BODY()
1784 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1826 // than the number of buffered AIO operations permitted per process.
1831 "Vectored AIO should still work even if the iovcnt is greater than " in ATF_TC_HEAD()
1832 "the number of buffered AIO operations permitted by the process"); in ATF_TC_HEAD()
1837 struct aiocb aio; in ATF_TC_BODY() local
1841 const char *oid = "vfs.aio.max_buf_aio"; in ATF_TC_BODY()
1847 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1861 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1862 aio.aio_fildes = fd; in ATF_TC_BODY()
1863 aio.aio_offset = 0; in ATF_TC_BODY()
1868 aio.aio_iov = iov; in ATF_TC_BODY()
1869 aio.aio_iovcnt = max_buf_aio + 1; in ATF_TC_BODY()
1871 if (aio_writev(&aio) < 0) in ATF_TC_BODY()
1874 len = poll(&aio); in ATF_TC_BODY()
1876 atf_tc_fail("aio failed: %s", strerror(errno)); in ATF_TC_BODY()
1879 atf_tc_fail("aio short write (%jd)", (intmax_t)len); in ATF_TC_BODY()
1881 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1882 aio.aio_fildes = fd; in ATF_TC_BODY()
1883 aio.aio_offset = 0; in ATF_TC_BODY()
1884 aio.aio_iov = iov; in ATF_TC_BODY()
1885 aio.aio_iovcnt = max_buf_aio + 1; in ATF_TC_BODY()
1887 if (aio_readv(&aio) < 0) in ATF_TC_BODY()
1890 len = poll(&aio); in ATF_TC_BODY()
1892 atf_tc_fail("aio failed: %s", strerror(errno)); in ATF_TC_BODY()
1895 atf_tc_fail("aio short read (%jd)", (intmax_t)len); in ATF_TC_BODY()
1946 "Vectored AIO should still work even if the iov contains elements " in ATF_TC_HEAD()
1953 struct aiocb aio; in ATF_TC_BODY() local
1961 ATF_REQUIRE_KERNEL_MODULE("aio"); in ATF_TC_BODY()
1984 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
1985 aio.aio_fildes = ac.ac_write_fd; in ATF_TC_BODY()
1986 aio.aio_offset = 0; in ATF_TC_BODY()
1987 aio.aio_iov = iov; in ATF_TC_BODY()
1988 aio.aio_iovcnt = 3; in ATF_TC_BODY()
1990 if (aio_writev(&aio) < 0) in ATF_TC_BODY()
1993 len = poll(&aio); in ATF_TC_BODY()
1995 atf_tc_fail("aio failed: %s", strerror(errno)); in ATF_TC_BODY()
1998 atf_tc_fail("aio short write (%jd)", (intmax_t)len); in ATF_TC_BODY()
2000 bzero(&aio, sizeof(aio)); in ATF_TC_BODY()
2001 aio.aio_fildes = ac.ac_read_fd; in ATF_TC_BODY()
2002 aio.aio_offset = 0; in ATF_TC_BODY()
2003 aio.aio_iov = iov; in ATF_TC_BODY()
2004 aio.aio_iovcnt = 3; in ATF_TC_BODY()
2006 if (aio_readv(&aio) < 0) in ATF_TC_BODY()
2008 len = poll(&aio); in ATF_TC_BODY()