diff --git a/contrib/pg_upgrade/page.c b/contrib/pg_upgrade/page.c
index c76d049631ee62e7b56fce5ca3df2783a317446b..d11d227fa930fd9d958311e2cc7f688606220d78 100644
--- a/contrib/pg_upgrade/page.c
+++ b/contrib/pg_upgrade/page.c
@@ -17,7 +17,7 @@
 #ifdef PAGE_CONVERSION
 
 
-static const char *getPageVersion(
+static void getPageVersion(
 			   uint16 *version, const char *pathName);
 static pageCnvCtx *loadConverterPlugin(
 					uint16 newPageVersion, uint16 oldPageVersion);
@@ -33,13 +33,9 @@ static pageCnvCtx *loadConverterPlugin(
  *	to the new format.	If the versions are identical, this function just
  *	returns a NULL pageCnvCtx pointer to indicate that page-by-page conversion
  *	is not required.
- *
- *	If successful this function sets *result and returns NULL.	If an error
- *	occurs, this function returns an error message in the form of an null-terminated
- *	string.
  */
-const char *
-setupPageConverter(pageCnvCtx **result)
+pageCnvCtx *
+setupPageConverter(void)
 {
 	uint16		oldPageVersion;
 	uint16		newPageVersion;
@@ -53,35 +49,28 @@ setupPageConverter(pageCnvCtx **result)
 	snprintf(srcName, sizeof(srcName), "%s/global/%u", old_cluster.pgdata,
 			 old_cluster.pg_database_oid);
 
-	if ((msg = getPageVersion(&oldPageVersion, srcName)) != NULL)
-		return msg;
-
-	if ((msg = getPageVersion(&newPageVersion, dstName)) != NULL)
-		return msg;
+	getPageVersion(&oldPageVersion, srcName);
+	getPageVersion(&newPageVersion, dstName);
 
 	/*
 	 * If the old cluster and new cluster use the same page layouts, then we
 	 * don't need a page converter.
 	 */
-	if (newPageVersion == oldPageVersion)
+	if (newPageVersion != oldPageVersion)
 	{
-		*result = NULL;
-		return NULL;
-	}
-
-	/*
-	 * The clusters use differing page layouts, see if we can find a plugin
-	 * that knows how to convert from the old page layout to the new page
-	 * layout.
-	 */
+		/*
+		 * The clusters use differing page layouts, see if we can find a plugin
+		 * that knows how to convert from the old page layout to the new page
+		 * layout.
+		 */
+	
+		if ((converter = loadConverterPlugin(newPageVersion, oldPageVersion)) == NULL)
+			pg_log(PG_FATAL, "could not find plugin to convert from old page layout to new page layout\n");
 
-	if ((converter = loadConverterPlugin(newPageVersion, oldPageVersion)) == NULL)
-		return "could not find plugin to convert from old page layout to new page layout";
+		return converter;
+	}
 	else
-	{
-		*result = converter;
 		return NULL;
-	}
 }
 
 
@@ -94,7 +83,7 @@ setupPageConverter(pageCnvCtx **result)
  *	if an error occurs, this function returns an error message (in the form
  *	of a null-terminated string).
  */
-static const char *
+static void
 getPageVersion(uint16 *version, const char *pathName)
 {
 	int			relfd;
@@ -102,19 +91,16 @@ getPageVersion(uint16 *version, const char *pathName)
 	ssize_t		bytesRead;
 
 	if ((relfd = open(pathName, O_RDONLY, 0)) < 0)
-		return "could not open relation";
+		pg_log(PG_FATAL, "could not open relation %s\n", pathName);
 
 	if ((bytesRead = read(relfd, &page, sizeof(page))) != sizeof(page))
-	{
-		close(relfd);
-		return "could not read page header";
-	}
+		pg_log(PG_FATAL, "could not read page header of %s\n", pathName);
 
 	*version = PageGetPageLayoutVersion(&page);
 
 	close(relfd);
 
-	return NULL;
+	return;
 }
 
 
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 914c72ffe635aa89a9665dfb6969ad810a1f7fac..c1a2f532e71f8b783db1cbf1b4b82a9ed69e8a2a 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -359,7 +359,7 @@ typedef struct
 	pluginShutdown shutdown;	/* Pointer to plugin's shutdown function */
 } pageCnvCtx;
 
-const char *setupPageConverter(pageCnvCtx **result);
+const pageCnvCtx *setupPageConverter(void);
 #else
 /* dummy */
 typedef void *pageCnvCtx;
@@ -398,7 +398,7 @@ void		get_sock_dir(ClusterInfo *cluster, bool live_check);
 /* relfilenode.c */
 
 void		get_pg_database_relfilenode(ClusterInfo *cluster);
-const char *transfer_all_new_dbs(DbInfoArr *olddb_arr,
+void		transfer_all_new_dbs(DbInfoArr *olddb_arr,
 				   DbInfoArr *newdb_arr, char *old_pgdata, char *new_pgdata);
 
 
diff --git a/contrib/pg_upgrade/relfilenode.c b/contrib/pg_upgrade/relfilenode.c
index b114352bc5d28286edfac8888cd4dc9396dfa6ad..9d0d5a0917e4dc6abb049141777ed343eec4c00b 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/contrib/pg_upgrade/relfilenode.c
@@ -27,13 +27,12 @@ static void transfer_relfile(pageCnvCtx *pageConverter, FileNameMap *map,
  * Responsible for upgrading all database. invokes routines to generate mappings and then
  * physically link the databases.
  */
-const char *
+void
 transfer_all_new_dbs(DbInfoArr *old_db_arr,
 				   DbInfoArr *new_db_arr, char *old_pgdata, char *new_pgdata)
 {
 	int			old_dbnum,
 				new_dbnum;
-	const char *msg = NULL;
 
 	pg_log(PG_REPORT, "%s user relation files\n",
 	  user_opts.transfer_mode == TRANSFER_MODE_LINK ? "Linking" : "Copying");
@@ -74,7 +73,7 @@ transfer_all_new_dbs(DbInfoArr *old_db_arr,
 			print_maps(mappings, n_maps, new_db->db_name);
 
 #ifdef PAGE_CONVERSION
-			msg = setupPageConverter(&pageConverter);
+			pageConverter = setupPageConverter();
 #endif
 			transfer_single_new_db(pageConverter, mappings, n_maps);
 
@@ -85,7 +84,7 @@ transfer_all_new_dbs(DbInfoArr *old_db_arr,
 	end_progress_output();
 	check_ok();
 
-	return msg;
+	return;
 }