|
@@ -48,8 +48,21 @@ u64 cper_next_record_id(void)
|
|
|
{
|
|
|
static atomic64_t seq;
|
|
|
|
|
|
- if (!atomic64_read(&seq))
|
|
|
- atomic64_set(&seq, ((u64)get_seconds()) << 32);
|
|
|
+ if (!atomic64_read(&seq)) {
|
|
|
+ time64_t time = ktime_get_real_seconds();
|
|
|
+
|
|
|
+ /*
|
|
|
+ * This code is unlikely to still be needed in year 2106,
|
|
|
+ * but just in case, let's use a few more bits for timestamps
|
|
|
+ * after y2038 to be sure they keep increasing monotonically
|
|
|
+ * for the next few hundred years...
|
|
|
+ */
|
|
|
+ if (time < 0x80000000)
|
|
|
+ atomic64_set(&seq, (ktime_get_real_seconds()) << 32);
|
|
|
+ else
|
|
|
+ atomic64_set(&seq, 0x8000000000000000ull |
|
|
|
+ ktime_get_real_seconds() << 24);
|
|
|
+ }
|
|
|
|
|
|
return atomic64_inc_return(&seq);
|
|
|
}
|