Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Aug 2021 17:15:13 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Thomas Munro <tmunro@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 3904e7966eb3 - main - Fix aio_readv(2), aio_writev(2) with SIGEV_THREAD.
Message-ID:  <YSJb8fr8Zt7s39T5@kib.kiev.ua>
In-Reply-To: <202108221216.17MCGCC6079644@gitrepo.freebsd.org>
References:  <202108221216.17MCGCC6079644@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Aug 22, 2021 at 12:16:12PM +0000, Thomas Munro wrote:
> The branch main has been updated by tmunro:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=3904e7966eb353c636c6aa638a6fdf1489ee514c
> 
> commit 3904e7966eb353c636c6aa638a6fdf1489ee514c
> Author:     Thomas Munro <tmunro@FreeBSD.org>
> AuthorDate: 2021-08-22 11:34:07 +0000
> Commit:     Thomas Munro <tmunro@FreeBSD.org>
> CommitDate: 2021-08-22 11:49:23 +0000
> 
>     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
> ---
>  lib/libc/sys/Symbol.map  |  2 ++
>  lib/librt/Symbol.map     |  5 +++++
>  lib/librt/aio.c          | 18 ++++++++++++++++++
>  tests/sys/aio/aio_test.c |  7 +++++++
>  4 files changed, 32 insertions(+)
> 
> diff --git a/lib/libc/sys/Symbol.map b/lib/libc/sys/Symbol.map
> index 93fbc947a7e1..764d712958be 100644
> --- a/lib/libc/sys/Symbol.map
> +++ b/lib/libc/sys/Symbol.map
> @@ -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;
> diff --git a/lib/librt/Symbol.map b/lib/librt/Symbol.map
> index c11b88397afd..b8fde3dd33b8 100644
> --- a/lib/librt/Symbol.map
> +++ b/lib/librt/Symbol.map
> @@ -31,6 +31,11 @@ FBSD_1.5 {
>  	timer_oshandle_np;
>  };
>  
> +FBSD_1.6 {
> +	aio_readv;
> +	aio_writev;
> +};
This must be FBSD_1.7.

> +
>  FBSDprivate_1.0 {
>  	_mq_open;
>  	_mq_close;
> diff --git a/lib/librt/aio.c b/lib/librt/aio.c
> index 9c35644ecf3d..8e819a002613 100644
> --- 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 @@ __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)
>  {
> diff --git a/tests/sys/aio/aio_test.c b/tests/sys/aio/aio_test.c
> index 35bd5dc1264b..1c694ad0c18b 100644
> --- a/tests/sys/aio/aio_test.c
> +++ b/tests/sys/aio/aio_test.c
> @@ -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());
>  }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?YSJb8fr8Zt7s39T5>