diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index 5a30467..97d645c 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -111,10 +111,8 @@
   // Avoid updating |max_bandwidth_filter_| if a) this is a loss-only event, or
   // b) all packets in |acked_packets| did not generate valid samples. (e.g. ack
   // of ack-only packets). In both cases, total_bytes_acked() will not change.
-  if (!fix_zero_bw_on_loss_only_event_ ||
-      (prior_bytes_acked != total_bytes_acked())) {
-    QUIC_BUG_IF((prior_bytes_acked != total_bytes_acked()) &&
-                sample.sample_max_bandwidth.IsZero())
+  if (prior_bytes_acked != total_bytes_acked()) {
+    QUIC_BUG_IF(sample.sample_max_bandwidth.IsZero())
         << total_bytes_acked() - prior_bytes_acked << " bytes from "
         << acked_packets.size()
         << " packets have been acked, but sample_max_bandwidth is zero.";
@@ -123,14 +121,6 @@
       congestion_event->sample_max_bandwidth = sample.sample_max_bandwidth;
       max_bandwidth_filter_.Update(congestion_event->sample_max_bandwidth);
     }
-  } else {
-    if (acked_packets.empty()) {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr_fix_zero_bw_on_loss_only_event, 3,
-                                   4);
-    } else {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr_fix_zero_bw_on_loss_only_event, 4,
-                                   4);
-    }
   }
 
   if (!sample.sample_rtt.IsInfinite()) {
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index 2315e63..a71f517 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -476,9 +476,6 @@
 
   float cwnd_gain_;
   float pacing_gain_;
-
-  const bool fix_zero_bw_on_loss_only_event_ =
-      GetQuicReloadableFlag(quic_bbr_fix_zero_bw_on_loss_only_event);
 };
 
 enum class Bbr2Mode : uint8_t {
diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index b6aee5a..f2fa80c 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -428,10 +428,8 @@
   // packets in |acked_packets| did not generate valid samples. (e.g. ack of
   // ack-only packets). In both cases, sampler_.total_bytes_acked() will not
   // change.
-  if (!fix_zero_bw_on_loss_only_event_ ||
-      (total_bytes_acked_before != sampler_.total_bytes_acked())) {
-    QUIC_BUG_IF((total_bytes_acked_before != sampler_.total_bytes_acked()) &&
-                sample.sample_max_bandwidth.IsZero())
+  if (total_bytes_acked_before != sampler_.total_bytes_acked()) {
+    QUIC_BUG_IF(sample.sample_max_bandwidth.IsZero())
         << sampler_.total_bytes_acked() - total_bytes_acked_before
         << " bytes from " << acked_packets.size()
         << " packets have been acked, but sample_max_bandwidth is zero.";
@@ -439,15 +437,8 @@
         sample.sample_max_bandwidth > max_bandwidth_.GetBest()) {
       max_bandwidth_.Update(sample.sample_max_bandwidth, round_trip_count_);
     }
-  } else {
-    if (acked_packets.empty()) {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr_fix_zero_bw_on_loss_only_event, 1,
-                                   4);
-    } else {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_bbr_fix_zero_bw_on_loss_only_event, 2,
-                                   4);
-    }
   }
+
   if (!sample.sample_rtt.IsInfinite()) {
     min_rtt_expired = MaybeUpdateMinRtt(event_time, sample.sample_rtt);
   }
diff --git a/quic/core/congestion_control/bbr_sender.h b/quic/core/congestion_control/bbr_sender.h
index ab5d819..8000f17 100644
--- a/quic/core/congestion_control/bbr_sender.h
+++ b/quic/core/congestion_control/bbr_sender.h
@@ -390,9 +390,6 @@
   // or it's time for high gain mode.
   bool drain_to_target_;
 
-  const bool fix_zero_bw_on_loss_only_event_ =
-      GetQuicReloadableFlag(quic_bbr_fix_zero_bw_on_loss_only_event);
-
   // True if network parameters are adjusted, and this will be reset if
   // overshooting is detected and pacing rate gets slowed.
   bool network_parameters_adjusted_;
diff --git a/quic/core/congestion_control/bbr_sender_test.cc b/quic/core/congestion_control/bbr_sender_test.cc
index f76e33c..e50a7c0 100644
--- a/quic/core/congestion_control/bbr_sender_test.cc
+++ b/quic/core/congestion_control/bbr_sender_test.cc
@@ -1371,9 +1371,7 @@
                              lost_packets);
 
   // Bandwidth estimate should not change for the loss only event.
-  if (GetQuicReloadableFlag(quic_bbr_fix_zero_bw_on_loss_only_event)) {
-    EXPECT_EQ(prior_bandwidth_estimate, sender_->BandwidthEstimate());
-  }
+  EXPECT_EQ(prior_bandwidth_estimate, sender_->BandwidthEstimate());
 }
 
 }  // namespace test
