changeset 6590:b9b201f5c581 HEAD

Don't check ctime changes, because we change it ourself all the time when flushing NFS attribute caches.
author Timo Sirainen <tss@iki.fi>
date Sun, 21 Oct 2007 16:25:59 +0300
parents 0e46072f797a
children f74e84fd11fc
files src/lib/file-dotlock.c
diffstat 1 files changed, 10 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/file-dotlock.c	Sun Oct 21 15:39:42 2007 +0300
+++ b/src/lib/file-dotlock.c	Sun Oct 21 16:25:59 2007 +0300
@@ -49,7 +49,7 @@
 	dev_t dev;
 	ino_t ino;
 	off_t size;
-	time_t ctime, mtime;
+	time_t mtime;
 };
 
 struct lock_info {
@@ -119,24 +119,22 @@
 update_change_info(const struct stat *st, struct file_change_info *change,
 		   time_t *last_change_r, time_t now)
 {
+	/* we don't check ctime because nfs_flush_attr_cache() changes it */
 	if (change->ino != st->st_ino || !CMP_DEV_T(change->dev, st->st_dev) ||
-	    change->ctime != st->st_ctime || change->mtime != st->st_mtime ||
-	    change->size != st->st_size) {
+	    change->mtime != st->st_mtime || change->size != st->st_size) {
 		time_t change_time = now;
 
-		if (change->ctime == 0) {
-			/* First check, set last_change to file's change time.
-			   Use mtime instead if it's higher, but only if it's
-			   not higher than current time, because the mtime
-			   can also be used for keeping metadata. */
-			change_time = st->st_mtime > now ? st->st_ctime :
-				I_MAX(st->st_ctime, st->st_mtime);
+		if (change->mtime == 0) {
+			/* First check, set last_change to file's mtime.
+			   If mtime is higher than current time it's probably
+			   used for metadata, so use ctime instead then. */
+			change_time = st->st_mtime <= now ?
+				st->st_mtime : st->st_ctime;
 		}
 		if (*last_change_r < change_time)
 			*last_change_r = change_time;
 		change->ino = st->st_ino;
 		change->dev = st->st_dev;
-		change->ctime = st->st_ctime;
 		change->mtime = st->st_mtime;
 		change->size = st->st_size;
 		return TRUE;
@@ -158,6 +156,7 @@
 		return 1;
 	}
 
+	/* don't check ctime changes. nfs_flush_attr_cache() changes it. */
 	*changed_r = update_change_info(&st, &lock_info->lock_info,
 					&lock_info->last_change, now);
 	return 0;