From 955bab670d0aed714fc940b5be7e2b75896a63d0 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Wed, 28 Sep 2011 10:23:19 -0400 Subject: [PATCH] ukernel: output dataversion in stat struct if possible we already have this data; if we can output it, do so. Change-Id: Ibc445a152e4e1e61be50003dd8683d2a4b32d190 Reviewed-on: http://gerrit.openafs.org/5510 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- acinclude.m4 | 3 +++ src/afs/UKERNEL/afs_usrops.c | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/acinclude.m4 b/acinclude.m4 index 99e0edf..f9de460 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1350,6 +1350,9 @@ AC_CHECK_TYPES([fsblkcnt_t],,,[ #endif ]) +dnl see what struct stat has for timestamps +AC_CHECK_MEMBERS([struct stat.st_ctimespec, struct stat.st_ctimensec]) + dnl check for curses-lib save_LIBS=$LIBS AC_CHECK_LIB( [ncurses], [setupterm], diff --git a/src/afs/UKERNEL/afs_usrops.c b/src/afs/UKERNEL/afs_usrops.c index 1db43c5..b5d5a2b 100644 --- a/src/afs/UKERNEL/afs_usrops.c +++ b/src/afs/UKERNEL/afs_usrops.c @@ -2458,6 +2458,16 @@ uafs_GetAttr(struct usr_vnode *vp, struct stat *stats) stats->st_atime = attrs.va_atime.tv_sec; stats->st_mtime = attrs.va_mtime.tv_sec; stats->st_ctime = attrs.va_ctime.tv_sec; + /* preserve dv if possible */ +#if defined(HAVE_STRUCT_STAT_ST_CTIMESPEC) + stats->st_atimespec.tv_nsec = attrs.va_atime.tv_usec * 1000; + stats->st_mtimespec.tv_nsec = attrs.va_mtime.tv_usec * 1000; + stats->st_ctimespec.tv_nsec = attrs.va_ctime.tv_usec * 1000; +#elif defined(HAVE_STRUCT_STAT_ST_CTIMENSEC) + stats->st_atimensec = attrs.va_atime.tv_usec * 1000; + stats->st_mtimensec = attrs.va_mtime.tv_usec * 1000; + stats->st_ctimensec = attrs.va_ctime.tv_usec * 1000; +#endif stats->st_blksize = attrs.va_blocksize; stats->st_blocks = attrs.va_blocks; -- 1.9.4