Add a test to ensure that values of a local variable used by
bbr_inflight_hi_from_lost_packet() is not be impacted by underflow issues
when subtracting too big numbers and make this function return a correct value.
Must be backported to 3.1.
BUG_ON(rs->lost < size);
/* What was lost before this packet? */
lost_prev = rs->lost - size;
+ if (BBR_LOSS_THRESH_MULT * inflight_prev < lost_prev * BBR_LOSS_THRESH_DIVI)
+ return inflight_prev;
+
lost_prefix =
(BBR_LOSS_THRESH_MULT * inflight_prev - lost_prev * BBR_LOSS_THRESH_DIVI) /
(BBR_LOSS_THRESH_DIVI - BBR_LOSS_THRESH_MULT);
+ /* At what inflight value did losses cross BBRLossThresh? */
return inflight_prev + lost_prefix;
}