diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index b69f722..aba00ab 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -200,7 +200,6 @@
     AddToCache("/bar", 200, kBarResponseBody);
     // Enable fixes for bugs found in tests and prod.
     SetQuicReloadableFlag(quic_donot_change_queued_ack, true);
-    SetQuicReloadableFlag(quic_fix_last_inflight_packets_sent_time, true);
     SetQuicReloadableFlag(quic_fix_server_pto_timeout, true);
     SetQuicReloadableFlag(quic_do_not_retransmit_immediately_on_zero_rtt_reject,
                           true);
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc
index 7af3063..89c9c89 100644
--- a/quic/core/quic_sent_packet_manager_test.cc
+++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -3957,7 +3957,6 @@
 
   // Send INITIAL 1.
   SendDataPacket(1, ENCRYPTION_INITIAL);
-  const QuicTime packet1_sent_time = clock_.Now();
   // Send HANDSHAKE 2.
   clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
   SendDataPacket(2, ENCRYPTION_HANDSHAKE);
@@ -3987,34 +3986,12 @@
       (GetQuicReloadableFlag(quic_fix_pto_timeout)
            ? QuicTime::Delta::Zero()
            : QuicTime::Delta::FromMilliseconds(kDefaultDelayedAckTimeMs));
-  if (GetQuicReloadableFlag(quic_fix_last_inflight_packets_sent_time)) {
-    // Verify PTO is armed based on handshake data.
-    EXPECT_EQ(packet2_sent_time + pto_delay, manager_.GetRetransmissionTime());
-  } else {
-    // Problematic: PTO is still armed based on initial data.
-    EXPECT_EQ(packet1_sent_time + pto_delay, manager_.GetRetransmissionTime());
-    clock_.AdvanceTime(pto_delay);
-    manager_.OnRetransmissionTimeout();
-    // Nothing to retransmit in INITIAL space.
-    EXPECT_CALL(notifier_, RetransmitFrames(_, _)).Times(0);
-    manager_.MaybeSendProbePackets();
-    // PING packet gets sent.
-    SendPingPacket(6, ENCRYPTION_INITIAL);
-    manager_.AdjustPendingTimerTransmissions();
-
-    // Verify PTO is armed based on packet 2.
-    EXPECT_EQ(packet2_sent_time + pto_delay * 2,
-              manager_.GetRetransmissionTime());
-    clock_.AdvanceTime(pto_delay * 2);
-    manager_.OnRetransmissionTimeout();
-    EXPECT_CALL(notifier_, RetransmitFrames(_, _)).Times(testing::AtLeast(1));
-    manager_.MaybeSendProbePackets();
-  }
+  // Verify PTO is armed based on handshake data.
+  EXPECT_EQ(packet2_sent_time + pto_delay, manager_.GetRetransmissionTime());
 }
 
 // Regression test for b/157895910.
 TEST_F(QuicSentPacketManagerTest, EarliestSentTimeNotInitializedWhenPtoFires) {
-  SetQuicReloadableFlag(quic_fix_last_inflight_packets_sent_time, true);
   manager_.EnableMultiplePacketNumberSpacesSupport();
   EXPECT_CALL(*send_algorithm_, PacingRate(_))
       .WillRepeatedly(Return(QuicBandwidth::Zero()));
diff --git a/quic/core/quic_unacked_packet_map.cc b/quic/core/quic_unacked_packet_map.cc
index 38081ec..4731296 100644
--- a/quic/core/quic_unacked_packet_map.cc
+++ b/quic/core/quic_unacked_packet_map.cc
@@ -211,9 +211,7 @@
       bytes_in_flight_per_packet_number_space_[packet_number_space] -=
           info->bytes_sent;
     }
-    if (GetQuicReloadableFlag(quic_fix_last_inflight_packets_sent_time) &&
-        bytes_in_flight_per_packet_number_space_[packet_number_space] == 0) {
-      QUIC_RELOADABLE_FLAG_COUNT(quic_fix_last_inflight_packets_sent_time);
+    if (bytes_in_flight_per_packet_number_space_[packet_number_space] == 0) {
       last_inflight_packets_sent_time_[packet_number_space] = QuicTime::Zero();
     }
 
@@ -251,14 +249,8 @@
       DCHECK(!HasRetransmittableFrames(*it));
     }
   }
-  if (supports_multiple_packet_number_spaces_) {
-    if (GetQuicReloadableFlag(quic_fix_last_inflight_packets_sent_time)) {
-      DCHECK_EQ(QuicTime::Zero(),
-                last_inflight_packets_sent_time_[INITIAL_DATA]);
-    } else {
-      last_inflight_packets_sent_time_[INITIAL_DATA] = QuicTime::Zero();
-    }
-  }
+  DCHECK(!supports_multiple_packet_number_spaces_ ||
+         last_inflight_packets_sent_time_[INITIAL_DATA] == QuicTime::Zero());
   return neutered_packets;
 }
 
@@ -280,14 +272,8 @@
       NotifyFramesAcked(*it, QuicTime::Delta::Zero(), QuicTime::Zero());
     }
   }
-  if (supports_multiple_packet_number_spaces()) {
-    if (GetQuicReloadableFlag(quic_fix_last_inflight_packets_sent_time)) {
-      DCHECK_EQ(QuicTime::Zero(),
-                last_inflight_packets_sent_time_[HANDSHAKE_DATA]);
-    } else {
-      last_inflight_packets_sent_time_[HANDSHAKE_DATA] = QuicTime::Zero();
-    }
-  }
+  DCHECK(!supports_multiple_packet_number_spaces() ||
+         last_inflight_packets_sent_time_[HANDSHAKE_DATA] == QuicTime::Zero());
   return neutered_packets;
 }
 
