diff --git a/lib/libc/sys/Symbol.map b/lib/libc/sys/Symbol.map --- a/lib/libc/sys/Symbol.map +++ b/lib/libc/sys/Symbol.map @@ -495,10 +495,12 @@ __sys_aio_error; __sys_aio_fsync; __sys_aio_read; + __sys_aio_readv; __sys_aio_return; __sys_aio_suspend; __sys_aio_waitcomplete; __sys_aio_write; + __sys_aio_writev; _audit; __sys_audit; _auditctl; diff --git a/lib/librt/Symbol.map b/lib/librt/Symbol.map --- a/lib/librt/Symbol.map +++ b/lib/librt/Symbol.map @@ -31,6 +31,11 @@ timer_oshandle_np; }; +FBSD_1.6 { + aio_readv; + aio_writev; +}; + FBSDprivate_1.0 { _mq_open; _mq_close; diff --git a/lib/librt/aio.c b/lib/librt/aio.c --- a/lib/librt/aio.c +++ b/lib/librt/aio.c @@ -42,7 +42,9 @@ #include "un-namespace.h" __weak_reference(__aio_read, aio_read); +__weak_reference(__aio_readv, aio_readv); __weak_reference(__aio_write, aio_write); +__weak_reference(__aio_writev, aio_writev); __weak_reference(__aio_return, aio_return); __weak_reference(__aio_waitcomplete, aio_waitcomplete); __weak_reference(__aio_fsync, aio_fsync); @@ -51,7 +53,9 @@ typedef void (*aio_func)(union sigval val, struct aiocb *iocb); extern int __sys_aio_read(struct aiocb *iocb); +extern int __sys_aio_readv(struct aiocb *iocb); extern int __sys_aio_write(struct aiocb *iocb); +extern int __sys_aio_writev(struct aiocb *iocb); extern ssize_t __sys_aio_waitcomplete(struct aiocb **iocbp, struct timespec *timeout); extern ssize_t __sys_aio_return(struct aiocb *iocb); extern int __sys_aio_error(struct aiocb *iocb); @@ -130,6 +134,13 @@ return aio_io(iocb, &__sys_aio_read); } +int +__aio_readv(struct aiocb *iocb) +{ + + return aio_io(iocb, &__sys_aio_readv); +} + int __aio_write(struct aiocb *iocb) { @@ -137,6 +148,13 @@ return aio_io(iocb, &__sys_aio_write); } +int +__aio_writev(struct aiocb *iocb) +{ + + return aio_io(iocb, &__sys_aio_writev); +} + ssize_t __aio_waitcomplete(struct aiocb **iocbp, struct timespec *timeout) { diff --git a/tests/sys/aio/aio_test.c b/tests/sys/aio/aio_test.c --- a/tests/sys/aio/aio_test.c +++ b/tests/sys/aio/aio_test.c @@ -1627,6 +1627,12 @@ aio_file_test(poll, NULL, true); } +ATF_TC_WITHOUT_HEAD(vectored_thread); +ATF_TC_BODY(vectored_thread, tc) +{ + aio_file_test(poll_signaled, setup_thread(), true); +} + ATF_TC_WITH_CLEANUP(vectored_md_poll); ATF_TC_HEAD(vectored_md_poll, tc) { @@ -1814,6 +1820,7 @@ ATF_TP_ADD_TC(tp, vectored_zvol_poll); ATF_TP_ADD_TC(tp, vectored_unaligned); ATF_TP_ADD_TC(tp, vectored_socket_poll); + ATF_TP_ADD_TC(tp, vectored_thread); return (atf_no_error()); }