extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs);
 
+/**
+ * ktime_to_timespec_cond - convert a ktime_t variable to timespec
+ *                         format only if the variable contains data
+ * @kt:                the ktime_t variable to convert
+ * @ts:                the timespec variable to store the result in
+ *
+ * Returns true if there was a successful conversion, false if kt was 0.
+ */
+static inline bool ktime_to_timespec_cond(const ktime_t kt, struct timespec *ts)
+{
+       if (kt.tv64) {
+               *ts = ktime_to_timespec(kt);
+               return true;
+       } else {
+               return false;
+       }
+}
+
 /*
  * The resolution of the clocks. The resolution value is returned in
  * the clock_getres() system call to give application programmers an
 
 }
 EXPORT_SYMBOL(kernel_sendmsg);
 
-static int ktime2ts(ktime_t kt, struct timespec *ts)
-{
-       if (kt.tv64) {
-               *ts = ktime_to_timespec(kt);
-               return 1;
-       } else {
-               return 0;
-       }
-}
-
 /*
  * called from sock_recv_timestamp() if sock_flag(sk, SOCK_RCVTSTAMP)
  */
 
 
        memset(ts, 0, sizeof(ts));
-       if (skb->tstamp.tv64 &&
-           sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) {
-               skb_get_timestampns(skb, ts + 0);
+       if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE) &&
+           ktime_to_timespec_cond(skb->tstamp, ts + 0))
                empty = 0;
-       }
        if (shhwtstamps) {
                if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE) &&
-                   ktime2ts(shhwtstamps->syststamp, ts + 1))
+                   ktime_to_timespec_cond(shhwtstamps->syststamp, ts + 1))
                        empty = 0;
                if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE) &&
-                   ktime2ts(shhwtstamps->hwtstamp, ts + 2))
+                   ktime_to_timespec_cond(shhwtstamps->hwtstamp, ts + 2))
                        empty = 0;
        }
        if (!empty)