extern int        dccp_send_reset(struct sock *sk, enum dccp_reset_codes code);
 extern void       dccp_send_close(struct sock *sk, const int active);
 extern int        dccp_invalid_packet(struct sk_buff *skb);
-extern u32        dccp_sample_rtt(struct sock *sk, long delta);
+
+static inline u32  dccp_sane_rtt(long usec_sample)
+{
+       if (unlikely(usec_sample <= 0 || usec_sample > DCCP_SANE_RTT_MAX))
+               DCCP_WARN("RTT sample %ld out of bounds!\n", usec_sample);
+       return clamp_val(usec_sample, DCCP_SANE_RTT_MIN, DCCP_SANE_RTT_MAX);
+}
+extern u32 dccp_sample_rtt(struct sock *sk, long delta);
 
 static inline int dccp_bad_service_code(const struct sock *sk,
                                        const __be32 service)
 
        /* dccpor_elapsed_time is either zeroed out or set and > 0 */
        delta -= dccp_sk(sk)->dccps_options_received.dccpor_elapsed_time * 10;
 
-       if (unlikely(delta <= 0)) {
-               DCCP_WARN("unusable RTT sample %ld, using min\n", delta);
-               return DCCP_SANE_RTT_MIN;
-       }
-       if (unlikely(delta > DCCP_SANE_RTT_MAX)) {
-               DCCP_WARN("RTT sample %ld too large, using max\n", delta);
-               return DCCP_SANE_RTT_MAX;
-       }
-
-       return delta;
+       return dccp_sane_rtt(delta);
 }
 
 EXPORT_SYMBOL_GPL(dccp_sample_rtt);