diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index 2cb2cd6e9805f1ddf96f6966fd186d27816788e2..1e85b0f0826736ddeb77ecf39ed90cf048db73ba 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -49,6 +49,17 @@
 #include <stdlib.h>
 #include <string.h>
 
+/** The maximum number of completions possible.
+    Based upon the maximum number of individually queueable ops in the batch
+   api:
+      - initial metadata send
+      - message send
+      - status/close send (depending on client/server)
+      - initial metadata recv
+      - message recv
+      - status/close recv (depending on client/server) */
+#define MAX_CONCURRENT_COMPLETIONS 6
+
 typedef enum { REQ_INITIAL = 0, REQ_READY, REQ_DONE } req_state;
 
 typedef enum {
@@ -255,7 +266,7 @@ struct grpc_call {
   grpc_iomgr_closure on_done_bind;
 
   /** completion events - for completion queue use */
-  grpc_cq_completion completions[6];
+  grpc_cq_completion completions[MAX_CONCURRENT_COMPLETIONS];
 };
 
 #define CALL_STACK_FROM_CALL(call) ((grpc_call_stack *)((call) + 1))