diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 16cf40c2c968198076bd8442181aad5a18377fb3..e2f7bb433a4d31fafab1999e13b33b7a5e11768c 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -1446,14 +1446,16 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op,
     GPR_ASSERT(!s->pending_byte_stream);
     s->recv_message_ready = op_payload->recv_message.recv_message_ready;
     s->recv_message = op_payload->recv_message.recv_message;
-    if (s->pending_byte_stream) {
-      already_received = s->frame_storage.length;
-    } else {
-      already_received = s->frame_storage.length +
-                         s->unprocessed_incoming_frames_buffer.length;
+    if (s->id != 0) {
+      if (s->pending_byte_stream) {
+        already_received = s->frame_storage.length;
+      } else {
+        already_received = s->frame_storage.length +
+                           s->unprocessed_incoming_frames_buffer.length;
+      }
+      incoming_byte_stream_update_flow_control(exec_ctx, t, s, 5,
+                                               already_received);
     }
-    incoming_byte_stream_update_flow_control(exec_ctx, t, s, 5,
-                                             already_received);
     grpc_chttp2_maybe_complete_recv_message(exec_ctx, t, s);
   }