diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index 6c6f3ef..d465690 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -304,9 +304,7 @@
   const QuicBandwidth& bandwidth = params.bandwidth;
   const QuicTime::Delta& rtt = params.rtt;
 
-  if (params.quic_bbr_donot_inject_bandwidth) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_bbr_donot_inject_bandwidth);
-  } else if (!bandwidth.IsZero()) {
+  if (!params.quic_bbr_donot_inject_bandwidth && !bandwidth.IsZero()) {
     max_bandwidth_.Update(bandwidth, round_trip_count_);
   }
   if (!rtt.IsZero() && (min_rtt_ > rtt || min_rtt_.IsZero())) {
diff --git a/quic/core/congestion_control/bbr_sender_test.cc b/quic/core/congestion_control/bbr_sender_test.cc
index 8994c29..d1a796a 100644
--- a/quic/core/congestion_control/bbr_sender_test.cc
+++ b/quic/core/congestion_control/bbr_sender_test.cc
@@ -115,7 +115,6 @@
   }
 
   void SetUp() override {
-    SetQuicReloadableFlag(quic_bbr_donot_inject_bandwidth, true);
     if (GetQuicFlag(FLAGS_quic_bbr_test_regression_mode) == "regress") {
       SendAlgorithmTestResult expected;
       ASSERT_TRUE(LoadSendAlgorithmTestResult(&expected));
@@ -1048,10 +1047,6 @@
   bbr_sender_.connection()->AdjustNetworkParameters(
       SendAlgorithmInterface::NetworkParams(kTestLinkBandwidth, kTestRtt,
                                             false));
-  if (!GetQuicReloadableFlag(quic_bbr_donot_inject_bandwidth)) {
-    EXPECT_EQ(kTestLinkBandwidth, sender_->ExportDebugState().max_bandwidth);
-    EXPECT_EQ(kTestLinkBandwidth, sender_->BandwidthEstimate());
-  }
   EXPECT_EQ(kTestLinkBandwidth * kTestRtt,
             sender_->ExportDebugState().congestion_window);
 
@@ -1132,10 +1127,6 @@
   bbr_sender_.connection()->AdjustNetworkParameters(
       SendAlgorithmInterface::NetworkParams(kTestLinkBandwidth,
                                             QuicTime::Delta::Zero(), false));
-  if (!GetQuicReloadableFlag(quic_bbr_donot_inject_bandwidth)) {
-    EXPECT_EQ(kTestLinkBandwidth, sender_->ExportDebugState().max_bandwidth);
-    EXPECT_EQ(kTestLinkBandwidth, sender_->BandwidthEstimate());
-  }
   EXPECT_LT(previous_cwnd, sender_->ExportDebugState().congestion_window);
 
   // Verify pacing rate is re-calculated based on the new cwnd and min_rtt.
@@ -1154,10 +1145,6 @@
   bbr_sender_.connection()->AdjustNetworkParameters(
       SendAlgorithmInterface::NetworkParams(kTestLinkBandwidth,
                                             QuicTime::Delta::Zero(), false));
-  if (!GetQuicReloadableFlag(quic_bbr_donot_inject_bandwidth)) {
-    EXPECT_EQ(kTestLinkBandwidth, sender_->ExportDebugState().max_bandwidth);
-    EXPECT_EQ(kTestLinkBandwidth, sender_->BandwidthEstimate());
-  }
   EXPECT_LT(kInitialCongestionWindowPackets * kDefaultTCPMSS,
             sender_->ExportDebugState().congestion_window);
   // No Rtt sample is available.
diff --git a/quic/core/congestion_control/send_algorithm_interface.h b/quic/core/congestion_control/send_algorithm_interface.h
index aed7d98..b794940 100644
--- a/quic/core/congestion_control/send_algorithm_interface.h
+++ b/quic/core/congestion_control/send_algorithm_interface.h
@@ -41,9 +41,7 @@
                   bool allow_cwnd_to_decrease)
         : bandwidth(bandwidth),
           rtt(rtt),
-          allow_cwnd_to_decrease(allow_cwnd_to_decrease),
-          quic_bbr_donot_inject_bandwidth(
-              GetQuicReloadableFlag(quic_bbr_donot_inject_bandwidth)) {}
+          allow_cwnd_to_decrease(allow_cwnd_to_decrease) {}
 
     bool operator==(const NetworkParams& other) const {
       return bandwidth == other.bandwidth && rtt == other.rtt &&
@@ -64,7 +62,7 @@
     // TODO(b/143540157): Remove after impact of fix is measured.
     bool quic_bbr_fix_pacing_rate = true;
     // TODO(b/72089315, b/143891040): Remove after impact of fix is measured.
-    bool quic_bbr_donot_inject_bandwidth;
+    bool quic_bbr_donot_inject_bandwidth = true;
   };
 
   static SendAlgorithmInterface* Create(
