diff options
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/read-cache.c b/read-cache.c index 2ee96bc92..f1abae144 100644 --- a/read-cache.c +++ b/read-cache.c @@ -250,11 +250,20 @@ int cache_match_stat(struct cache_entry *ce, struct stat *st) { unsigned int changed = 0; - if (ce->mtime.sec != (unsigned int)st->st_mtim.tv_sec || - ce->mtime.nsec != (unsigned int)st->st_mtim.tv_nsec) + /* nsec seems unreliable - not all filesystems support it, so + * as long as it is in the inode cache you get right nsec + * but after it gets flushed, you get zero nsec. */ + if (ce->mtime.sec != (unsigned int)st->st_mtim.tv_sec +#ifdef NSEC + || ce->mtime.nsec != (unsigned int)st->st_mtim.tv_nsec +#endif + ) changed |= MTIME_CHANGED; - if (ce->ctime.sec != (unsigned int)st->st_ctim.tv_sec || - ce->ctime.nsec != (unsigned int)st->st_ctim.tv_nsec) + if (ce->ctime.sec != (unsigned int)st->st_ctim.tv_sec +#ifdef NSEC + || ce->ctime.nsec != (unsigned int)st->st_ctim.tv_nsec +#endif + ) changed |= CTIME_CHANGED; if (ce->st_uid != (unsigned int)st->st_uid || ce->st_gid != (unsigned int)st->st_gid) |