Fix aio_readv(2), aio_writev(2) with SIGEV_THREAD.
Add missing wrapper code to librt for these new functions so that SIGEV_THREAD works. Without machinery to convert it to SIGEV_THREAD_ID, you got EINVAL. Reviewed by: asomers MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D31618
This commit is contained in:
parent
f30a1ae8d5
commit
3904e7966e
@ -495,10 +495,12 @@ FBSDprivate_1.0 {
|
||||
__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;
|
||||
|
@ -31,6 +31,11 @@ FBSD_1.5 {
|
||||
timer_oshandle_np;
|
||||
};
|
||||
|
||||
FBSD_1.6 {
|
||||
aio_readv;
|
||||
aio_writev;
|
||||
};
|
||||
|
||||
FBSDprivate_1.0 {
|
||||
_mq_open;
|
||||
_mq_close;
|
||||
|
@ -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 @@ __weak_reference(__lio_listio, lio_listio);
|
||||
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 @@ __aio_read(struct aiocb *iocb)
|
||||
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 @@ __aio_write(struct aiocb *iocb)
|
||||
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)
|
||||
{
|
||||
|
@ -1627,6 +1627,12 @@ ATF_TC_BODY(vectored_file_poll, tc)
|
||||
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_TCS(tp)
|
||||
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());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user