AFS: Correctly use 64-bit time for UUID
PATCH 1/1 AFS: Correctly use 64-bit time for UUID
UUID calculation uses 'struct timespec' whose seconds will overflow in year 2038 and beyond for 32-bit systems. This patch removes the dependency on 'struct timespec' by using ktime_get_real_ns(). While the patch does not fix a 'bug' as such, it is part of a larger effort to remove instances of 'struct timespec' and other data-structures suffering from y2038 problem from the kernel.
Suggested-by Arnd Bergmann <[email protected]>
Signed-off-by Tina Ruchandani <[email protected]>
--- fs/afs/main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
fs/afs/main.c +2 -4
@@ -14,6 +14,7 @@#include <linux/init.h> #include <linux/completion.h> #include <linux/sched.h> +#include <linux/ktime.h> #include "internal.h" MODULE_DESCRIPTION ("AFS Client File System" );
@@ -37,7 +38,6 @@ struct workqueue_struct *afs_wq;*/ static int __init afs_get_client_UUID (void ) { -struct timespec ts;u64 uuidtime;u16 clockseq;int ret;
@@ -48,9 +48,7 @@ static int __init afs_get_client_UUID(void)if (ret <0 )return ret; -getnstimeofday (&ts); - uuidtime = (u64 ) ts.tv_sec *1000 *1000 *10 ; - uuidtime += ts.tv_nsec /100 ; + uuidtime =ktime_get_real_ns () /100 ; uuidtime +=AFS_UUID_TO_UNIX_TIME ; afs_uuid.time_low = uuidtime; afs_uuid.time_mid = uuidtime >>32 ;
Signature · 1 line
2.2.0.rc0.207.ga3a616c
David Howells
maintainerfs/afs/main.c static int __init afs_get_client_UUID(void) · line 51
Quoted 1 line · Tina Ruchandani
fs/afs/main.c +1
-0+ uuidtime =ktime_get_real_ns () /100 ;
64-bit division must be done using asm/div64.h
David