Index: src/wp-admin/includes/meta-boxes.php
===================================================================
--- src/wp-admin/includes/meta-boxes.php	(revision 53828)
+++ src/wp-admin/includes/meta-boxes.php	(working copy)
@@ -1459,13 +1459,13 @@
 	$publish_callback_args = array( '__back_compat_meta_box' => true );
 
 	if ( post_type_supports( $post_type, 'revisions' ) && 'auto-draft' !== $post->post_status ) {
-		$revisions = wp_get_post_revisions( $post->ID, array( 'fields' => 'ids' ) );
+		$revisions = wp_get_latest_revision_id_and_total_count( $post->ID );
 
 		// We should aim to show the revisions meta box only when there are revisions.
-		if ( count( $revisions ) > 1 ) {
+		if ( ! is_wp_error( $revisions ) && $revisions['count'] > 1 ) {
 			$publish_callback_args = array(
-				'revisions_count'        => count( $revisions ),
-				'revision_id'            => reset( $revisions ),
+				'revisions_count'        => $revisions['count'],
+				'revision_id'            => $revisions['latest_id'],
 				'__back_compat_meta_box' => true,
 			);
 
Index: src/wp-includes/revision.php
===================================================================
--- src/wp-includes/revision.php	(revision 53841)
+++ src/wp-includes/revision.php	(working copy)
@@ -603,14 +603,13 @@
 		return null;
 	}
 
-	$revisions = wp_get_post_revisions( $post->ID, array( 'posts_per_page' => 1 ) );
+	$revisions = wp_get_latest_revision_id_and_total_count( $post->ID );
 
-	if ( 0 === count( $revisions ) ) {
+	if ( is_wp_error( $revisions ) || 0 === $revisions['count'] ) {
 		return null;
 	}
 
-	$revision = reset( $revisions );
-	return get_edit_post_link( $revision );
+	return get_edit_post_link( $revisions['latest_id'] );
 }
 
 /**
Index: src/wp-includes/theme.php
===================================================================
--- src/wp-includes/theme.php	(revision 53828)
+++ src/wp-includes/theme.php	(working copy)
@@ -2068,7 +2068,8 @@
 			}
 
 			// Trigger creation of a revision. This should be removed once #30854 is resolved.
-			if ( 0 === count( wp_get_post_revisions( $r ) ) ) {
+			$revisions = wp_get_latest_revision_id_and_total_count( $r );
+			if ( ! is_wp_error( $revisions ) && 0 === $revisions['count'] ) {
 				wp_save_post_revision( $r );
 			}
 		}
