diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index bc032ed6aa0..10f657f7736 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -411,43 +411,6 @@ fil_space_is_flushed(
 	return(true);
 }
 
-/** Validate the compression algorithm for full crc32 format.
-@param[in]	space	tablespace object
-@return whether the compression algorithm support */
-static bool fil_comp_algo_validate(const fil_space_t* space)
-{
-	if (!space->full_crc32()) {
-		return true;
-	}
-
-	DBUG_EXECUTE_IF("fil_comp_algo_validate_fail",
-			return false;);
-
-	ulint	comp_algo = space->get_compression_algo();
-	switch (comp_algo) {
-	case PAGE_UNCOMPRESSED:
-	case PAGE_ZLIB_ALGORITHM:
-#ifdef HAVE_LZ4
-	case PAGE_LZ4_ALGORITHM:
-#endif /* HAVE_LZ4 */
-#ifdef HAVE_LZO
-	case PAGE_LZO_ALGORITHM:
-#endif /* HAVE_LZO */
-#ifdef HAVE_LZMA
-	case PAGE_LZMA_ALGORITHM:
-#endif /* HAVE_LZMA */
-#ifdef HAVE_BZIP2
-	case PAGE_BZIP2_ALGORITHM:
-#endif /* HAVE_BZIP2 */
-#ifdef HAVE_SNAPPY
-	case PAGE_SNAPPY_ALGORITHM:
-#endif /* HAVE_SNAPPY */
-		return true;
-	}
-
-	return false;
-}
-
 /** Append a file to the chain of files of a space.
 @param[in]	name		file name of a file that is not open
 @param[in]	handle		file handle, or OS_FILE_CLOSED
@@ -550,16 +513,11 @@ static bool fil_node_open_file(fil_node_t* node)
 		}
 
 		if (!node->read_page0(first_time_open)) {
-fail:
 			os_file_close(node->handle);
 			node->handle = OS_FILE_CLOSED;
 			return false;
 		}
 
-		if (first_time_open && !fil_comp_algo_validate(space)) {
-			goto fail;
-		}
-
 	} else if (space->purpose == FIL_TYPE_LOG) {
 		node->handle = os_file_create(
 			innodb_log_file_key, node->name, OS_FILE_OPEN,
diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc
index ceb6c69aec8..5ebd8ad6445 100644
--- a/storage/innobase/os/os0file.cc
+++ b/storage/innobase/os/os0file.cc
@@ -7577,6 +7577,43 @@ static bool win32_is_ssd(HANDLE volume_handle)
 }
 #endif
 
+/** Validate the compression algorithm for full crc32 format.
+@param[in]	space	tablespace object
+@return whether the compression algorithm support */
+static bool fil_comp_algo_validate(const fil_space_t* space)
+{
+	if (!space->full_crc32()) {
+		return true;
+	}
+
+	DBUG_EXECUTE_IF("fil_comp_algo_validate_fail",
+			return false;);
+
+	ulint	comp_algo = space->get_compression_algo();
+	switch (comp_algo) {
+	case PAGE_UNCOMPRESSED:
+	case PAGE_ZLIB_ALGORITHM:
+#ifdef HAVE_LZ4
+	case PAGE_LZ4_ALGORITHM:
+#endif /* HAVE_LZ4 */
+#ifdef HAVE_LZO
+	case PAGE_LZO_ALGORITHM:
+#endif /* HAVE_LZO */
+#ifdef HAVE_LZMA
+	case PAGE_LZMA_ALGORITHM:
+#endif /* HAVE_LZMA */
+#ifdef HAVE_BZIP2
+	case PAGE_BZIP2_ALGORITHM:
+#endif /* HAVE_BZIP2 */
+#ifdef HAVE_SNAPPY
+	case PAGE_SNAPPY_ALGORITHM:
+#endif /* HAVE_SNAPPY */
+		return true;
+	}
+
+	return false;
+}
+
 /** Determine some file metadata when creating or reading the file.
 @param	file	the file that is being created, or OS_FILE_CLOSED */
 void fil_node_t::find_metadata(os_file_t file
@@ -7789,6 +7826,10 @@ bool fil_node_t::read_page0(bool first)
 
 		space->flags = (space->flags & FSP_FLAGS_MEM_MASK) | flags;
 
+		if (!fil_comp_algo_validate(space)) {
+			return false;
+		}
+
 		this->size = ulint(size_bytes / psize);
 		space->size += this->size;
 	} else if (space->id != TRX_SYS_SPACE || space->size_in_header) {
