- if (preserve_times && !S_ISLNK(st->st_mode) &&
- cmp_modtime(st->st_mtime, file->modtime) != 0) {
- /* don't complain about not setting times on directories
- * because some filesystems can't do it */
- if (set_modtime(fname,file->modtime) != 0 &&
- !S_ISDIR(st->st_mode)) {
- rprintf(FERROR, "failed to set times on %s: %s\n",
- full_fname(fname), strerror(errno));
+ if (!preserve_times || S_ISLNK(st->st_mode)
+ || (S_ISDIR(st->st_mode)
+ && (omit_dir_times || (make_backups && !backup_dir))))
+ flags |= PERMS_SKIP_MTIME;
+ if (!(flags & PERMS_SKIP_MTIME)
+ && cmp_modtime(st->st_mtime, file->modtime) != 0) {
+ if (set_modtime(fname,file->modtime) != 0) {
+ rsyserr(FERROR, errno, "failed to set times on %s",
+ full_fname(fname));