diff --git a/transport/http2_client.go b/transport/http2_client.go
index <HASH>..<HASH> 100644
--- a/transport/http2_client.go
+++ b/transport/http2_client.go
@@ -252,8 +252,7 @@ func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream {
 	s.windowHandler = func(n int) {
 		t.updateWindow(s, uint32(n))
 	}
-	// Make a stream be able to cancel the pending operations by itself.
-	s.ctx, s.cancel = context.WithCancel(ctx)
+	s.ctx = ctx
 	s.dec = &recvBufferReader{
 		ctx:    s.ctx,
 		goAway: s.goAway,
diff --git a/transport/transport.go b/transport/transport.go
index <HASH>..<HASH> 100644
--- a/transport/transport.go
+++ b/transport/transport.go
@@ -169,7 +169,8 @@ type Stream struct {
 	// nil for client side Stream.
 	st ServerTransport
 	// ctx is the associated context of the stream.
-	ctx    context.Context
+	ctx context.Context
+	// cancel is always nil for client side Stream.
 	cancel context.CancelFunc
 	// done is closed when the final status arrives.
 	done chan struct{}
Use user context instead of creating new context for client side stream