Whamcloud - gitweb
LU-9019 libcfs: avoid using HZ and msecs_to_jiffies()
[fs/lustre-release.git] / lnet / lnet / lib-socket.c
index 85bb413..0c9a640 100644 (file)
 #include <libcfs/libcfs.h>
 #include <lnet/lib-lnet.h>
 
+/*
+ * kernel 5.1: commit 7f1bc6e95d7840d4305595b3e4025cddda88cee5
+ * Y2038 64-bit time.
+ *  SO_TIMESTAMP, SO_TIMESTAMPNS and SO_TIMESTAMPING options, the
+ *  way they are currently defined, are not y2038 safe.
+ *  Subsequent patches in the series add new y2038 safe versions
+ *  of these options which provide 64 bit timestamps on all
+ *  architectures uniformly.
+ *  Hence, rename existing options with OLD tag suffixes.
+ *
+ * NOTE: When updating to timespec64 change change these to '_NEW'.
+ *
+ */
+#ifndef SO_SNDTIMEO
+#define SO_SNDTIMEO SO_SNDTIMEO_OLD
+#endif
+
+#ifndef SO_RCVTIMEO
+#define SO_RCVTIMEO SO_RCVTIMEO_OLD
+#endif
+
 int
 lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout)
 {
        int             rc;
-       long            jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC);
+       long            jiffies_left = cfs_time_seconds(timeout);
        unsigned long   then;
        struct timeval  tv;
 
@@ -66,15 +87,7 @@ lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout)
 
                if (timeout != 0) {
                        /* Set send timeout to remaining time */
-                       tv = (struct timeval) {
-                               .tv_sec = jiffies_left /
-                                         msecs_to_jiffies(MSEC_PER_SEC),
-                               .tv_usec = ((jiffies_left %
-                                            msecs_to_jiffies(MSEC_PER_SEC)) *
-                                            USEC_PER_SEC) /
-                                            msecs_to_jiffies(MSEC_PER_SEC)
-                       };
-
+                       jiffies_to_timeval(jiffies_left, &tv);
                        rc = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO,
                                               (char *)&tv, sizeof(tv));
                        if (rc != 0) {
@@ -114,7 +127,7 @@ int
 lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
 {
        int             rc;
-       long            jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC);
+       long            jiffies_left = cfs_time_seconds(timeout);
        unsigned long   then;
        struct timeval  tv;
 
@@ -131,13 +144,7 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
                };
 
                /* Set receive timeout to remaining time */
-               tv = (struct timeval) {
-                       .tv_sec = jiffies_left / msecs_to_jiffies(MSEC_PER_SEC),
-                       .tv_usec = ((jiffies_left %
-                                       msecs_to_jiffies(MSEC_PER_SEC)) *
-                                       USEC_PER_SEC) /
-                                       msecs_to_jiffies(MSEC_PER_SEC)
-               };
+               jiffies_to_timeval(jiffies_left, &tv);
                rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
                                       (char *)&tv, sizeof(tv));
                if (rc != 0) {