Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 16570)
+++ wp-includes/post.php	(working copy)
@@ -4240,8 +4240,9 @@
  * @uses do_action() Calls 'clean_post_cache' on $id before adding children (if any).
  *
  * @param int $id The Post ID in the cache to clean
+ * @param string|array $context The reason(s) the cache is being cleaned
  */
-function clean_post_cache($id) {
+function clean_post_cache( $id, $context = array() ) {
 	global $_wp_suspend_cache_invalidation, $wpdb;
 
 	if ( !empty($_wp_suspend_cache_invalidation) )
@@ -4259,14 +4260,18 @@
 
 	wp_cache_delete( 'wp_get_archives', 'general' );
 
-	do_action('clean_post_cache', $id);
+	$context = (array) $context;
+	do_action( 'clean_post_cache', $id, $context );
 
 	if ( $children = $wpdb->get_col( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_parent = %d", $id) ) ) {
+		if ( !in_array( 'recurse', $context ) )
+			$context[] = 'recurse';
+
 		foreach ( $children as $cid ) {
 			// Loop detection
 			if ( $cid == $id )
 				continue;
-			clean_post_cache( $cid );
+			clean_post_cache( $cid, $context );
 		}
 	}
 
@@ -4302,14 +4307,15 @@
  * @uses do_action() Will call the 'clean_page_cache' hook action.
  *
  * @param int $id Page ID to clean
+ * @param string|array $context The reason(s) the cache is being cleaned
  */
-function clean_page_cache($id) {
-	clean_post_cache($id);
+function clean_page_cache( $id, $context = array() ) {
+	clean_post_cache( $id, $context );
 
 	wp_cache_delete( 'all_page_ids', 'posts' );
 	wp_cache_delete( 'get_pages', 'posts' );
 
-	do_action('clean_page_cache', $id);
+	do_action( 'clean_page_cache', $id, (array) $context );
 }
 
 /**
Index: wp-includes/comment.php
===================================================================
--- wp-includes/comment.php	(revision 16570)
+++ wp-includes/comment.php	(working copy)
@@ -1565,9 +1565,9 @@
 	$wpdb->update( $wpdb->posts, array('comment_count' => $new), array('ID' => $post_id) );
 
 	if ( 'page' == $post->post_type )
-		clean_page_cache( $post_id );
+		clean_page_cache( $post_id, 'comment_count' );
 	else
-		clean_post_cache( $post_id );
+		clean_post_cache( $post_id, 'comment_count' );
 
 	do_action('wp_update_comment_count', $post_id, $new, $old);
 	do_action('edit_post', $post_id, $post);
