diff options
author | delphij <delphij@FreeBSD.org> | 2010-01-25 07:52:54 +0000 |
---|---|---|
committer | delphij <delphij@FreeBSD.org> | 2010-01-25 07:52:54 +0000 |
commit | 6d12dc080fc2fd7c07dedbe0a06e05ccdb391630 (patch) | |
tree | b960e36c5853b0e56785cf16ad5c06397009dceb /sys/cddl/compat | |
parent | 048b796ee5ec4c61205ae039484da25230762f4f (diff) | |
download | FreeBSD-src-6d12dc080fc2fd7c07dedbe0a06e05ccdb391630.zip FreeBSD-src-6d12dc080fc2fd7c07dedbe0a06e05ccdb391630.tar.gz |
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
Diffstat (limited to 'sys/cddl/compat')
-rw-r--r-- | sys/cddl/compat/opensolaris/sys/time.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/cddl/compat/opensolaris/sys/time.h b/sys/cddl/compat/opensolaris/sys/time.h index 0bf1e9b..4275790 100644 --- a/sys/cddl/compat/opensolaris/sys/time.h +++ b/sys/cddl/compat/opensolaris/sys/time.h @@ -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) |