git: 40734fc57ec0 - main - aio: Fix a test and set race in aio_biowakeup.

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 15 Feb 2023 18:57:44 UTC
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=40734fc57ec0158690e9f03284229553b050b8ea

commit 40734fc57ec0158690e9f03284229553b050b8ea
Author:     Keith Reynolds <keith.reynolds@hpe.com>
AuthorDate: 2023-02-15 18:56:39 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2023-02-15 18:56:39 +0000

    aio: Fix a test and set race in aio_biowakeup.
    
    Use atomic_fetchadd in place of separate atomic_subtract / atomic_load.
    
    Reviewed by:    markj
    Sponsored by:   HPE TidalScale
    Differential Revision:  https://reviews.freebsd.org/D38559
---
 sys/kern/vfs_aio.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index 43e54e1ad9bf..34671f67191f 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -2493,10 +2493,9 @@ aio_biowakeup(struct bio *bp)
 		atomic_add_int(&job->outblock, nblks);
 	else
 		atomic_add_int(&job->inblock, nblks);
-	atomic_subtract_int(&job->nbio, 1);
 
 
-	if (atomic_load_int(&job->nbio) == 0) {
+	if (atomic_fetchadd_int(&job->nbio, -1) == 1) {
 		if (atomic_load_int(&job->error))
 			aio_complete(job, -1, job->error);
 		else