Index: wp-admin/post.php
===================================================================
--- wp-admin/post.php	(revision 23884)
+++ wp-admin/post.php	(working copy)
@@ -154,9 +154,6 @@
 		exit();
 	}
 
-	//upgrade any old bad revision data (#16215)
-	_wp_upgrade_revisions_of_post( $p );
-
 	$post_type = $post->post_type;
 	if ( 'post' == $post_type ) {
 		$parent_file = "edit.php";
Index: wp-includes/revision.php
===================================================================
--- wp-includes/revision.php	(revision 23884)
+++ wp-includes/revision.php	(working copy)
@@ -434,6 +434,8 @@
  * @return array empty if no revisions
  */
 function wp_get_post_revisions( $post_id = 0, $args = null ) {
+	static $checked = array();
+
 	$post = get_post( $post_id );
 	if ( ! $post || empty( $post->ID ) || ! wp_revisions_enabled( $post ) )
 		return array();
@@ -445,6 +447,17 @@
 	if ( ! $revisions = get_children( $args ) )
 		return array();
 
+	if ( ! in_array( $post->ID, $checked ) ) {
+		$checked[] = $post->ID;
+
+		// Check if the revisions have already been updated
+		if ( 1 > _wp_get_post_revision_version( reset( $revisions ) ) )
+			return $revisions;
+
+		if ( _wp_upgrade_revisions_of_post( $post, $revisions ) )
+			return wp_get_post_revisions( $post, $args );
+	}
+
 	return $revisions;
 }
 
@@ -564,28 +577,12 @@
  * @uses post_type_supports()
  * @uses wp_get_post_revisions()
  *
- * @param int|object $post_id Post ID or post object
- * @return true if success, false if problems
+ * @param object Post object
+ * @return bool true if the revisions were upgraded, false if problems
  */
-function _wp_upgrade_revisions_of_post( $post ) {
+function _wp_upgrade_revisions_of_post( $post, $revisions ) {
 	global $wpdb;
 
-	$post = get_post( $post );
-	if ( ! $post )
-		return false;
-
-	if ( ! post_type_supports( $post->post_type, 'revisions' ) )
-		return false;
-
-	$revisions = wp_get_post_revisions( $post->ID ); // array( 'order' => 'DESC', 'orderby' => 'date' ); // Always work from most recent to oldest
-
-	if ( ! $first = reset( $revisions ) )
-		return true;
-
-	// Check if the revisions have already been updated
-	if ( preg_match( '/^\d+-(?:autosave|revision)-v\d+$/', $first->post_name ) )
-		return true;
-
 	// Add post option exclusively
 	$lock = "revision-upgrade-{$post->ID}";
 	$now = time();
