diff --git a/src/bin/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
index b1ab7d550cc24bae360f3bbeaa3e84b5cb042df1..8804562f2d06a96204ae1dbd3a78e302a9bf6748 100644
--- a/src/bin/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -113,6 +113,65 @@ get_control_data(ClusterInfo *cluster, bool live_check)
 	pg_putenv("LC_ALL", NULL);
 	pg_putenv("LC_MESSAGES", "C");
 
+	/*
+	 * Check for clean shutdown
+	 */
+	if (!live_check || cluster == &new_cluster)
+	{
+		/* only pg_controldata outputs the cluster state */
+		snprintf(cmd, sizeof(cmd), "\"%s/pg_controldata\" \"%s\"",
+				 cluster->bindir, cluster->pgdata);
+		fflush(stdout);
+		fflush(stderr);
+
+		if ((output = popen(cmd, "r")) == NULL)
+			pg_fatal("could not get control data using %s: %s\n",
+					 cmd, strerror(errno));
+
+		/* we have the result of cmd in "output". so parse it line by line now */
+		while (fgets(bufin, sizeof(bufin), output))
+		{
+			if ((p = strstr(bufin, "Database cluster state:")) != NULL)
+			{
+				p = strchr(p, ':');
+
+				if (p == NULL || strlen(p) <= 1)
+					pg_fatal("%d: database cluster state problem\n", __LINE__);
+
+				p++;				/* remove ':' char */
+
+				/*
+				 * We checked earlier for a postmaster lock file, and if we found
+				 * one, we tried to start/stop the server to replay the WAL.  However,
+				 * pg_ctl -m immediate doesn't leave a lock file, but does require
+				 * WAL replay, so we check here that the server was shut down cleanly,
+				 * from the controldata perspective.
+				 */
+				/* remove leading spaces */
+				while (*p == ' ')
+					p++;
+				if (strcmp(p, "shut down\n") != 0)
+				{
+					if (cluster == &old_cluster)
+						pg_fatal("The source cluster was not shut down cleanly.\n");
+					else
+						pg_fatal("The target cluster was not shut down cleanly.\n");
+				}
+				got_cluster_state = true;
+			}
+		}
+
+		pclose(output);
+
+		if (!got_cluster_state)
+		{
+			if (cluster == &old_cluster)
+				pg_fatal("The source cluster lacks cluster state information:\n");
+			else
+				pg_fatal("The target cluster lacks cluster state information:\n");
+		}
+	}
+
 	/* pg_resetxlog has been renamed to pg_resetwal in version 10 */
 	if (GET_MAJOR_VERSION(cluster->bin_version) < 1000)
 		resetwal_bin = "pg_resetxlog\" -n";
@@ -423,64 +482,6 @@ get_control_data(ClusterInfo *cluster, bool live_check)
 
 	pclose(output);
 
-	/*
-	 * Check for clean shutdown
-	 */
-
-	/* only pg_controldata outputs the cluster state */
-	snprintf(cmd, sizeof(cmd), "\"%s/pg_controldata\" \"%s\"",
-			 cluster->bindir, cluster->pgdata);
-	fflush(stdout);
-	fflush(stderr);
-
-	if ((output = popen(cmd, "r")) == NULL)
-		pg_fatal("could not get control data using %s: %s\n",
-				 cmd, strerror(errno));
-
-	/* we have the result of cmd in "output". so parse it line by line now */
-	while (fgets(bufin, sizeof(bufin), output))
-	{
-		if ((!live_check || cluster == &new_cluster) &&
-			(p = strstr(bufin, "Database cluster state:")) != NULL)
-		{
-			p = strchr(p, ':');
-
-			if (p == NULL || strlen(p) <= 1)
-				pg_fatal("%d: database cluster state problem\n", __LINE__);
-
-			p++;				/* remove ':' char */
-
-			/*
-			 * We checked earlier for a postmaster lock file, and if we found
-			 * one, we tried to start/stop the server to replay the WAL.  However,
-			 * pg_ctl -m immediate doesn't leave a lock file, but does require
-			 * WAL replay, so we check here that the server was shut down cleanly,
-			 * from the controldata perspective.
-			 */
-			/* remove leading spaces */
-			while (*p == ' ')
-				p++;
-			if (strcmp(p, "shut down\n") != 0)
-			{
-				if (cluster == &old_cluster)
-					pg_fatal("The source cluster was not shut down cleanly.\n");
-				else
-					pg_fatal("The target cluster was not shut down cleanly.\n");
-			}
-			got_cluster_state = true;
-		}
-	}
-
-	pclose(output);
-
-	if (!got_cluster_state)
-	{
-		if (cluster == &old_cluster)
-			pg_fatal("The source cluster lacks cluster state information:\n");
-		else
-			pg_fatal("The target cluster lacks cluster state information:\n");
-	}
-
 	/*
 	 * Restore environment variables
 	 */