This did not address yet the previous comments on consistency and unnecessary code churn.
The existing logic to differentiate SO_TIMESTAMP from SO_TIMESTAMPNS in both tcp_recv_timestamp and __sock_recv_timestamp is
if (sock_flag(sk, SOCK_RCVTSTAMP)) { if (sock_flag(sk, SOCK_RCVTSTAMPNS)) /* timespec case */ else /* timeval case */ }
A new level of nesting needs to be added to differentiate .._OLD from .._NEW.
Even if massively changing the original functions, please do so consistently, either
if (sock_flag(sk, SOCK_RCVTSTAMP)) { if (sock_flag(sk, SOCK_TSTAMP_NEW) { /* new code */ } else { if (sock_flag(sk, SOCK_RCVTSTAMPNS)) /* timespec case */ else /* timeval case */ } }
This first example is wrong. I meant
if (sock_flag(sk, SOCK_RCVTSTAMP)) { if (sock_flag(sk, SOCK_RCVTSTAMPNS)) { if (sock_flag(sk, SOCK_TSTAMP_NEW) /* new code */ else /* timespec case */ } else { if (sock_flag(sk, SOCK_TSTAMP_NEW) /* new code */ else /* timeval case */ } }