On FreeBSD, time_t is 64-bit for all platforms except i386 and powerpc,

where the type is 32-bit.  ZFS can handle 64-bit timestamp internally
but zfs_setattr() would check if the time value can fit, we change the
checking macros to match 64-bit timestamp if the platform supports it.

This change has some downsides like, while you can import zfs on 32-bit
platforms, the timestamp would overflow if they are out of the range.

This fixes the Y2.038K issue on platforms using 64-bit timestamps.

Reviewed by:	pjd
MFC after:	1 month
This commit is contained in:
Xin LI 2010-01-25 07:52:54 +00:00
parent 6941401c87
commit 63243c5c71

View File

@ -40,8 +40,13 @@ typedef longlong_t hrtime_t;
#define LBOLT ((gethrtime() * hz) / NANOSEC)
#if defined(__i386__) || defined(__powerpc__)
#define TIMESPEC_OVERFLOW(ts) \
((ts)->tv_sec < INT32_MIN || (ts)->tv_sec > INT32_MAX)
#else
#define TIMESPEC_OVERFLOW(ts) \
((ts)->tv_sec < INT64_MIN || (ts)->tv_sec > INT64_MAX)
#endif
#ifdef _KERNEL
#define lbolt64 (int64_t)(LBOLT)