This seems to be causing build failures on EL7:
cc1: all warnings being treated as errors
In file included from libcfs/include/libcfs/linux/libcfs.h:51:0,
from libcfs/include/libcfs/libcfs.h:45,
from lnet/include/lnet/lib-lnet.h:48,
from lnet/lnet/api-ni.c:39:
libcfs/include/libcfs/linux/linux-time.h:111:0: error: "ktime_get_real_ts64" redefined [-Werror]
#define ktime_get_real_ts64 ktime_get_real_ts
^
In file included from include/linux/timer.h:5:0,
from include/linux/workqueue.h:8,
from include/linux/pm.h:25,
from include/linux/device.h:25,
from include/linux/node.h:17,
from include/linux/cpu.h:17,
from libcfs/include/libcfs/linux/linux-cpu.h:50,
from libcfs/include/libcfs/linux/libcfs.h:50,
from libcfs/include/libcfs/libcfs.h:45,
from lnet/include/lnet/lib-lnet.h:48,
from lnet/lnet/api-ni.c:39:
include/linux/ktime.h:455:0: note: this is the location of the previous definition
#define ktime_get_real_ts64(ts) getnstimeofday64(ts)
^
make[7]: *** [lnet/klnds/o2iblnd/o2iblnd.o] Error 1
make[6]: *** [lnet/klnds/o2iblnd] Error 2
make[5]: *** [lnet/klnds] Error 2
make[5]: *** Waiting for unfinished jobs....
cc1: all warnings being treated as errors
make[6]: *** [lnet/lnet/api-ni.o] Error 1
make[6]: *** Waiting for unfinished jobs....
This reverts commit
c3ddfae1b795385aa14db61df1a416ab57bfc066.
Change-Id: I629bd51d27206db7c6b6251ca7089707d33287b8
Reviewed-on: http://review.whamcloud.com/19094
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Jenkins
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
#ifndef __LIBCFS_TIME_H__
#define __LIBCFS_TIME_H__
-
/*
* generic time manipulation functions.
*/
})
/*
+ * helper function similar to do_gettimeofday() of Linux kernel
+ */
+static inline void cfs_fs_timeval(struct timeval *tv)
+{
+ cfs_fs_time_t time;
+
+ cfs_fs_time_current(&time);
+ cfs_fs_time_usec(&time, tv);
+}
+
+/*
* return valid time-out based on user supplied one. Currently we only check
* that time-out is not shorted than allowed.
*/
* cfs_duration_t represents time interval with resolution of internal
* platform clock
*
+ * cfs_fs_time_t represents instance in world-visible time. This is
+ * used in file-system time-stamps
+ *
* cfs_time_t cfs_time_current(void);
* cfs_time_t cfs_time_add (cfs_time_t, cfs_duration_t);
* cfs_duration_t cfs_time_sub (cfs_time_t, cfs_time_t);
* void cfs_duration_usec(cfs_duration_t, struct timeval *);
* void cfs_duration_nsec(cfs_duration_t, struct timespec *);
*
+ * void cfs_fs_time_current(cfs_fs_time_t *);
+ * time_t cfs_fs_time_sec (cfs_fs_time_t *);
+ * void cfs_fs_time_usec (cfs_fs_time_t *, struct timeval *);
+ * void cfs_fs_time_nsec (cfs_fs_time_t *, struct timespec *);
+ * int cfs_fs_time_before (cfs_fs_time_t *, cfs_fs_time_t *);
+ * int cfs_fs_time_beforeq(cfs_fs_time_t *, cfs_fs_time_t *);
+ *
* CFS_TIME_FORMAT
* CFS_DURATION_FORMAT
*
#include <linux/jiffies.h>
+typedef struct timespec cfs_fs_time_t;
+
+static inline void cfs_fs_time_usec(cfs_fs_time_t *t, struct timeval *v)
+{
+ v->tv_sec = t->tv_sec;
+ v->tv_usec = t->tv_nsec / 1000;
+}
+
+static inline void cfs_fs_time_nsec(cfs_fs_time_t *t, struct timespec *s)
+{
+ *s = *t;
+}
+
+/*
+ * internal helper function used by cfs_fs_time_before*()
+ */
+static inline unsigned long long __cfs_fs_time_flat(cfs_fs_time_t *t)
+{
+ return (unsigned long long)t->tv_sec * NSEC_PER_SEC + t->tv_nsec;
+}
+
+
/*
* Generic kernel stuff
*/
typedef long cfs_duration_t;
typedef cycles_t cfs_cycles_t;
-#define timespec64 timespec
-#define ktime_get_real_ts64 ktime_get_real_ts
-
static inline int cfs_time_before(cfs_time_t t1, cfs_time_t t2)
{
return time_before(t1, t2);
return get_seconds();
}
+static inline void cfs_fs_time_current(cfs_fs_time_t *t)
+{
+ *t = CURRENT_TIME;
+}
+
+static inline time_t cfs_fs_time_sec(cfs_fs_time_t *t)
+{
+ return t->tv_sec;
+}
+
+static inline int cfs_fs_time_before(cfs_fs_time_t *t1, cfs_fs_time_t *t2)
+{
+ return __cfs_fs_time_flat(t1) < __cfs_fs_time_flat(t2);
+}
+
+static inline int cfs_fs_time_beforeq(cfs_fs_time_t *t1, cfs_fs_time_t *t2)
+{
+ return __cfs_fs_time_flat(t1) <= __cfs_fs_time_flat(t2);
+}
+
static inline cfs_duration_t cfs_time_seconds(int seconds)
{
return (__s64)t2 - (__s64)t1 >= 0;
}
+
/*
* One jiffy
*/
* cfs_duration_t represents time interval with resolution of internal
* platform clock
*
+ * cfs_fs_time_t represents instance in world-visible time. This is
+ * used in file-system time-stamps
+ *
* cfs_time_t cfs_time_current(void);
* cfs_time_t cfs_time_add (cfs_time_t, cfs_duration_t);
* cfs_duration_t cfs_time_sub (cfs_time_t, cfs_time_t);
* void cfs_duration_usec(cfs_duration_t, struct timeval *);
* void cfs_duration_nsec(cfs_duration_t, struct timespec *);
*
+ * void cfs_fs_time_current(cfs_fs_time_t *);
+ * time_t cfs_fs_time_sec (cfs_fs_time_t *);
+ * void cfs_fs_time_usec (cfs_fs_time_t *, struct timeval *);
+ * void cfs_fs_time_nsec (cfs_fs_time_t *, struct timespec *);
+ * int cfs_fs_time_before (cfs_fs_time_t *, cfs_fs_time_t *);
+ * int cfs_fs_time_beforeq(cfs_fs_time_t *, cfs_fs_time_t *);
+ *
* CFS_TIME_FORMAT
* CFS_DURATION_FORMAT
*
* Liblustre. time(2) based implementation.
*/
+typedef time_t cfs_fs_time_t;
typedef time_t cfs_time_t;
typedef time_t cfs_duration_t;
s->tv_nsec = 0;
}
+static inline void cfs_fs_time_current(cfs_fs_time_t *t)
+{
+ time(t);
+}
+
+static inline time_t cfs_fs_time_sec(cfs_fs_time_t *t)
+{
+ return *t;
+}
+
+static inline void cfs_fs_time_usec(cfs_fs_time_t *t, struct timeval *v)
+{
+ v->tv_sec = *t;
+ v->tv_usec = 0;
+}
+
+static inline void cfs_fs_time_nsec(cfs_fs_time_t *t, struct timespec *s)
+{
+ s->tv_sec = *t;
+ s->tv_nsec = 0;
+}
+
+static inline int cfs_fs_time_before(cfs_fs_time_t *t1, cfs_fs_time_t *t2)
+{
+ return *t1 < *t2;
+}
+
+static inline int cfs_fs_time_beforeq(cfs_fs_time_t *t1, cfs_fs_time_t *t2)
+{
+ return *t1 <= *t2;
+}
+
#define CFS_TICK (1)
#define cfs_time_current_64 cfs_time_current
srpc_ping_reqst_t *req;
sfw_test_instance_t *tsi = tsu->tsu_instance;
sfw_session_t *sn = tsi->tsi_batch->bat_session;
- struct timespec64 ts;
+ struct timeval tv;
int rc;
LASSERT(sn != NULL);
req->pnr_seq = lst_ping_data.pnd_counter++;
spin_unlock(&lst_ping_data.pnd_lock);
- ktime_get_real_ts64(&ts);
- req->pnr_time_sec = ts.tv_sec;
- req->pnr_time_usec = ts.tv_nsec / NSEC_PER_USEC;
+ cfs_fs_timeval(&tv);
+ req->pnr_time_sec = tv.tv_sec;
+ req->pnr_time_usec = tv.tv_usec;
return rc;
}
ping_client_done_rpc (sfw_test_unit_t *tsu, srpc_client_rpc_t *rpc)
{
sfw_test_instance_t *tsi = tsu->tsu_instance;
- sfw_session_t *sn = tsi->tsi_batch->bat_session;
- srpc_ping_reqst_t *reqst = &rpc->crpc_reqstmsg.msg_body.ping_reqst;
- srpc_ping_reply_t *reply = &rpc->crpc_replymsg.msg_body.ping_reply;
- struct timespec64 ts;
+ sfw_session_t *sn = tsi->tsi_batch->bat_session;
+ srpc_ping_reqst_t *reqst = &rpc->crpc_reqstmsg.msg_body.ping_reqst;
+ srpc_ping_reply_t *reply = &rpc->crpc_replymsg.msg_body.ping_reply;
+ struct timeval tv;
- LASSERT(sn != NULL);
+ LASSERT (sn != NULL);
if (rpc->crpc_status != 0) {
if (!tsi->tsi_stopping) /* rpc could have been aborted */
return;
}
- ktime_get_real_ts64(&ts);
+ cfs_fs_timeval(&tv);
CDEBUG (D_NET, "%d reply in %u usec\n", reply->pnr_seq,
- (unsigned)((ts.tv_sec - reqst->pnr_time_sec) * 1000000 +
- (ts.tv_nsec / NSEC_PER_USEC - reqst->pnr_time_usec)));
+ (unsigned)((tv.tv_sec - (unsigned)reqst->pnr_time_sec) * 1000000
+ + (tv.tv_usec - reqst->pnr_time_usec)));
return;
}
#define LNET_ONLY
-#include <linux/ktime.h>
#include <libcfs/libcfs.h>
#include <lnet/api.h>
#include <lnet/lib-lnet.h>
int mc_lastuser;
};
-static inline __u64 cl_time(void)
-{
- struct timespec time = CURRENT_TIME;
+static inline __u64 cl_time(void) {
+ cfs_fs_time_t time;
+ cfs_fs_time_current(&time);
return (((__u64)time.tv_sec) << 30) + time.tv_nsec;
}