-@@ -1846,7 +1855,7 @@ static void touch_up_dirs(struct file_li
- if (!(file->mode & S_IWUSR))
- do_chmod(fname, file->mode);
- if (need_retouch_dir_times)
-- set_modtime(fname, file->modtime, file->mode);
-+ set_times(fname, file->modtime, file->modtime, file->mode);
- if (allowed_lull && !(counter % lull_mod))
- maybe_send_keepalive();
- else if (!(counter & 0xFF))
---- old/log.c
-+++ new/log.c
-@@ -631,7 +631,8 @@ static void log_formatted(enum logcode c
+@@ -2057,7 +2066,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+ STRUCT_STAT st;
+ if (link_stat(fname, &st, 0) == 0
+ && cmp_time(st.st_mtime, file->modtime) != 0)
+- set_modtime(fname, file->modtime, file->mode);
++ set_times(fname, file->modtime, file->modtime, file->mode);
+ }
+ if (counter >= loopchk_limit) {
+ if (allowed_lull)
+diff --git a/ifuncs.h b/ifuncs.h
+--- a/ifuncs.h
++++ b/ifuncs.h
+@@ -67,6 +67,28 @@ d_name(struct dirent *di)
+ #endif
+ }
+
++static inline time_t
++f_atime(struct file_struct *fp)
++{
++#if SIZEOF_TIME_T > 4
++ time_t atime;
++ memcpy(&atime, &REQ_EXTRA(fp, atimes_ndx)->unum, SIZEOF_TIME_T);
++ return atime;
++#else
++ return REQ_EXTRA(fp, atimes_ndx)->unum;
++#endif
++}
++
++static inline void
++f_atime_set(struct file_struct *fp, time_t atime)
++{
++#if SIZEOF_TIME_T > 4
++ memcpy(&REQ_EXTRA(fp, atimes_ndx)->unum, &atime, SIZEOF_TIME_T);
++#else
++ REQ_EXTRA(fp, atimes_ndx)->unum = (uint32)atime;
++#endif
++}
++
+ static inline int
+ isDigit(const char *ptr)
+ {
+diff --git a/log.c b/log.c
+--- a/log.c
++++ b/log.c
+@@ -660,7 +660,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op,