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