From 3de62a512b9fa94eb8c93164a4e25bd4824829fa Mon Sep 17 00:00:00 2001
From: Thomas Munro <thomas.munro@gmail.com>
Date: Mon, 4 Aug 2025 22:25:50 +1200
Subject: [PATCH v1 2/4] aio: Set pg_aios.f_sync for worker fallback.

When using io_method=worker, IOs are performed synchronously by the
submitting backend if the submission queue is too full.  This is now
visible in the pg_aios view's f_sync column.
---
 src/backend/storage/aio/method_worker.c | 25 ++++++++-----------------
 1 file changed, 8 insertions(+), 17 deletions(-)

diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c
index bf8f77e6ff6..ba2d54f2839 100644
--- a/src/backend/storage/aio/method_worker.c
+++ b/src/backend/storage/aio/method_worker.c
@@ -240,8 +240,8 @@ pgaio_worker_needs_synchronous_execution(PgAioHandle *ioh)
 		|| !pgaio_io_can_reopen(ioh);
 }
 
-static void
-pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios)
+static int
+pgaio_worker_submit(uint16 num_staged_ios, PgAioHandle **staged_ios)
 {
 	PgAioHandle *synchronous_ios[PGAIO_SUBMIT_BATCH_SIZE];
 	int			nsync = 0;
@@ -254,7 +254,11 @@ pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios)
 	for (int i = 0; i < num_staged_ios; ++i)
 	{
 		Assert(!pgaio_worker_needs_synchronous_execution(staged_ios[i]));
-		if (!pgaio_worker_submission_queue_insert(staged_ios[i]))
+		if (pgaio_worker_submission_queue_insert(staged_ios[i]))
+		{
+			pgaio_io_prepare_submit(staged_ios[i]);
+		}
+		else
 		{
 			/*
 			 * We'll do it synchronously, but only after we've sent as many as
@@ -286,23 +290,10 @@ pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios)
 	{
 		for (int i = 0; i < nsync; ++i)
 		{
+			pgaio_io_prepare_submit_synchronously(synchronous_ios[i]);
 			pgaio_io_perform_synchronously(synchronous_ios[i]);
 		}
 	}
-}
-
-static int
-pgaio_worker_submit(uint16 num_staged_ios, PgAioHandle **staged_ios)
-{
-	for (int i = 0; i < num_staged_ios; i++)
-	{
-		PgAioHandle *ioh = staged_ios[i];
-
-		pgaio_io_prepare_submit(ioh);
-	}
-
-	pgaio_worker_submit_internal(num_staged_ios, staged_ios);
-
 	return num_staged_ios;
 }
 
-- 
2.39.5 (Apple Git-154)

