diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index fc93641..8744909 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -79,8 +79,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_ignore_peer_max_ack_delay_during_handshake, true)
 // If true, include stream information in idle timeout connection close detail.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_add_stream_info_to_idle_close_detail, true)
-// If true, increase the size of stream sequencer buffer block container on demand.
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_allocate_stream_sequencer_buffer_blocks_on_demand, true)
 // If true, looks up session to close via connection ID managed by self_issued_connection_id_manager instead of the one on default path.
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_use_active_cid_for_session_lookup, true)
 // If true, pass the received PATH_RESPONSE payload to path validator to move forward the path validation.
diff --git a/quic/core/quic_stream_sequencer_buffer.cc b/quic/core/quic_stream_sequencer_buffer.cc
index 871b832..194b149 100644
--- a/quic/core/quic_stream_sequencer_buffer.cc
+++ b/quic/core/quic_stream_sequencer_buffer.cc
@@ -46,9 +46,7 @@
       current_blocks_count_(0u),
       total_bytes_read_(0),
       blocks_(nullptr) {
-  if (allocate_blocks_on_demand_) {
-    QUICHE_DCHECK_GE(max_blocks_count_, kInitialBlockCount);
-  }
+  QUICHE_DCHECK_GE(max_blocks_count_, kInitialBlockCount);
   Clear();
 }
 
@@ -58,9 +56,7 @@
 
 void QuicStreamSequencerBuffer::Clear() {
   if (blocks_ != nullptr) {
-    size_t blocks_to_clear =
-        allocate_blocks_on_demand_ ? current_blocks_count_ : max_blocks_count_;
-    for (size_t i = 0; i < blocks_to_clear; ++i) {
+    for (size_t i = 0; i < current_blocks_count_; ++i) {
       if (blocks_[i] != nullptr) {
         RetireBlock(i);
       }
@@ -129,11 +125,7 @@
     *error_details = "Received data beyond available range.";
     return QUIC_INTERNAL_ERROR;
   }
-  if (allocate_blocks_on_demand_) {
-    QUIC_RELOADABLE_FLAG_COUNT(
-        quic_allocate_stream_sequencer_buffer_blocks_on_demand);
-    MaybeAddMoreBlocks(starting_offset + size);
-  }
+  MaybeAddMoreBlocks(starting_offset + size);
 
   if (bytes_received_.Empty() ||
       starting_offset >= bytes_received_.rbegin()->max() ||
@@ -202,8 +194,7 @@
   while (source_remaining > 0) {
     const size_t write_block_num = GetBlockIndex(offset);
     const size_t write_block_offset = GetInBlockOffset(offset);
-    size_t current_blocks_count =
-        allocate_blocks_on_demand_ ? current_blocks_count_ : max_blocks_count_;
+    size_t current_blocks_count = current_blocks_count_;
     QUICHE_DCHECK_GT(current_blocks_count, write_block_num);
 
     size_t block_capacity = GetBlockCapacity(write_block_num);
@@ -215,15 +206,6 @@
       bytes_avail = total_bytes_read_ + max_buffer_capacity_bytes_ - offset;
     }
 
-    if (!allocate_blocks_on_demand_) {
-      if (blocks_ == nullptr) {
-        blocks_.reset(new BufferBlock*[max_blocks_count_]());
-        for (size_t i = 0; i < max_blocks_count_; ++i) {
-          blocks_[i] = nullptr;
-        }
-      }
-    }
-
     if (write_block_num >= current_blocks_count) {
       *error_details = absl::StrCat(
           "QuicStreamSequencerBuffer error: OnStreamData() exceed array bounds."
diff --git a/quic/core/quic_stream_sequencer_buffer.h b/quic/core/quic_stream_sequencer_buffer.h
index 05d41b8..c99cc93 100644
--- a/quic/core/quic_stream_sequencer_buffer.h
+++ b/quic/core/quic_stream_sequencer_buffer.h
@@ -229,10 +229,6 @@
   // Number of bytes read out of buffer.
   QuicStreamOffset total_bytes_read_;
 
-  // Whether size of blocks_ grows on demand.
-  bool allocate_blocks_on_demand_ = GetQuicReloadableFlag(
-      quic_allocate_stream_sequencer_buffer_blocks_on_demand);
-
   // An ordered, variable-length list of blocks, with the length limited
   // such that the number of blocks never exceeds max_blocks_count_.
   // Each list entry can hold up to kBlockSizeBytes bytes.
diff --git a/quic/core/quic_stream_sequencer_buffer_test.cc b/quic/core/quic_stream_sequencer_buffer_test.cc
index dc21a09..212c25f 100644
--- a/quic/core/quic_stream_sequencer_buffer_test.cc
+++ b/quic/core/quic_stream_sequencer_buffer_test.cc
@@ -1091,8 +1091,6 @@
 }
 
 TEST_F(QuicStreamSequencerBufferTest, GrowBlockSizeOnDemand) {
-  SetQuicReloadableFlag(quic_allocate_stream_sequencer_buffer_blocks_on_demand,
-                        true);
   max_capacity_bytes_ = 1024 * kBlockSizeBytes;
   std::string source_of_one_block(kBlockSizeBytes, 'a');
   Initialize();
diff --git a/quic/test_tools/quic_stream_sequencer_buffer_peer.cc b/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
index 01ada82..a950f0b 100644
--- a/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
+++ b/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
@@ -46,8 +46,7 @@
     return true;
   }
 
-  size_t count = buffer_->allocate_blocks_on_demand_ ? current_blocks_count()
-                                                     : max_blocks_count();
+  size_t count = current_blocks_count();
   for (size_t i = 0; i < count; i++) {
     if (buffer_->blocks_[i] != nullptr) {
       return false;
