From cb6f66f944dbb48a31c90823dd23a6a5d6313250 Mon Sep 17 00:00:00 2001
From: Daniil Davidov <d.davydov@postgrespro.ru>
Date: Sat, 7 Feb 2026 00:04:17 +0700
Subject: [PATCH 1/7] fixes for patch 1

---
 src/backend/commands/vacuumparallel.c         |  5 ++++-
 src/backend/postmaster/autovacuum.c           | 18 +++++-------------
 src/backend/utils/misc/postgresql.conf.sample |  2 +-
 3 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c
index 1e35b82aeaf..d3e0c32b7ee 100644
--- a/src/backend/commands/vacuumparallel.c
+++ b/src/backend/commands/vacuumparallel.c
@@ -710,8 +710,11 @@ parallel_vacuum_process_all_indexes(ParallelVacuumState *pvs, int num_index_scan
 		 * Tell autovacuum that we could not launch all the previously
 		 * reserved workers.
 		 */
-		if (AmAutoVacuumWorkerProcess() && pvs->pcxt->nworkers_launched < nworkers)
+		if (AmAutoVacuumWorkerProcess() &&
+			pvs->pcxt->nworkers_launched < nworkers)
+		{
 			AutoVacuumReleaseParallelWorkers(nworkers - pvs->pcxt->nworkers_launched);
+		}
 
 		if (pvs->pcxt->nworkers_launched > 0)
 		{
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 784c1178d61..f40abe90ed5 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -3526,7 +3526,7 @@ AutoVacuumShmemInit(void)
 
 		AutoVacuumShmem->av_launcherpid = 0;
 		AutoVacuumShmem->av_maxParallelWorkers =
-			Min(autovacuum_max_parallel_workers, max_worker_processes);
+			Min(autovacuum_max_parallel_workers, max_parallel_workers);
 		AutoVacuumShmem->av_freeParallelWorkers =
 			AutoVacuumShmem->av_maxParallelWorkers;
 		dclist_init(&AutoVacuumShmem->av_freeWorkers);
@@ -3622,23 +3622,15 @@ adjust_free_parallel_workers(int prev_max_parallel_workers)
 
 	LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
 
-	nfree_workers =
-		autovacuum_max_parallel_workers - prev_max_parallel_workers +
-		AutoVacuumShmem->av_freeParallelWorkers;
-
 	/*
 	 * Cap or increase number of free parallel workers according to the
 	 * parameter change.
 	 */
-	AutoVacuumShmem->av_freeParallelWorkers = Max(nfree_workers, 0);
-
-	/*
-	 * Don't allow number of free workers to become less than zero if the
-	 * patameter was decreased.
-	 */
-	AutoVacuumShmem->av_freeParallelWorkers =
-		Max(AutoVacuumShmem->av_freeParallelWorkers, 0);
+	nfree_workers =
+		autovacuum_max_parallel_workers - prev_max_parallel_workers +
+		AutoVacuumShmem->av_freeParallelWorkers;
 
+	AutoVacuumShmem->av_freeParallelWorkers = Max(nfree_workers, 0);
 	AutoVacuumShmem->av_maxParallelWorkers = autovacuum_max_parallel_workers;
 
 	LWLockRelease(AutovacuumLock);
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 35c37f21239..e456fd759eb 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -695,7 +695,7 @@
 #autovacuum_worker_slots = 16           # autovacuum worker slots to allocate
                                         # (change requires restart)
 #autovacuum_max_workers = 3             # max number of autovacuum subprocesses
-#autovacuum_max_parallel_workers = 2    # limited by max_worker_processes
+#autovacuum_max_parallel_workers = 2    # limited by max_parallel_workers
 #autovacuum_naptime = 1min              # time between autovacuum runs
 #autovacuum_vacuum_threshold = 50       # min number of row updates before
                                         # vacuum
-- 
2.43.0

