dovecot: Don't check ctime changes, because we change it ourself...

dovecot at dovecot.org dovecot at dovecot.org
Sun Oct 21 16:26:03 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/b9b201f5c581
changeset: 6590:b9b201f5c581
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Oct 21 16:25:59 2007 +0300
description:
Don't check ctime changes, because we change it ourself all the time when
flushing NFS attribute caches.

diffstat:

1 file changed, 10 insertions(+), 11 deletions(-)
src/lib/file-dotlock.c |   21 ++++++++++-----------

diffs (53 lines):

diff -r 0e46072f797a -r b9b201f5c581 src/lib/file-dotlock.c
--- 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 @@ struct file_change_info {
 	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
 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 @@ static int update_lock_info(time_t now, 
 		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;


More information about the dovecot-cvs mailing list