[dovecot-cvs] dovecot/src/lib-index mail-cache-fields.c, 1.9, 1.10 mail-cache-transaction.c, 1.32, 1.33 mail-cache.c, 1.52, 1.53

cras at dovecot.org cras at dovecot.org
Mon Nov 8 02:55:04 EET 2004


Update of /var/lib/cvs/dovecot/src/lib-index
In directory talvi:/tmp/cvs-serv19036/lib-index

Modified Files:
	mail-cache-fields.c mail-cache-transaction.c mail-cache.c 
Log Message:
More correct file cache invalidating.



Index: mail-cache-fields.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache-fields.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- mail-cache-fields.c	8 Nov 2004 00:40:41 -0000	1.9
+++ mail-cache-fields.c	8 Nov 2004 00:55:02 -0000	1.10
@@ -108,6 +108,12 @@
 		}
 		offset = next_offset;
 
+		if (cache->file_cache != NULL) {
+			/* we can't trust that the cached data is valid */
+			file_cache_invalidate(cache->file_cache, offset,
+					      sizeof(*field_hdr) +
+					      CACHE_HDR_PREFETCH);
+		}
 		if (mail_cache_map(cache, offset,
 				   sizeof(*field_hdr) + CACHE_HDR_PREFETCH) < 0)
 			return -1;
@@ -155,6 +161,12 @@
 	}
 
 	if (field_hdr->size > sizeof(*field_hdr) + CACHE_HDR_PREFETCH) {
+		if (cache->file_cache != NULL) {
+			/* we can't trust that the cached data is valid */
+			file_cache_invalidate(cache->file_cache, offset,
+					      sizeof(*field_hdr) +
+					      CACHE_HDR_PREFETCH);
+		}
 		if (mail_cache_map(cache, offset, field_hdr->size) < 0)
 			return -1;
 	}
@@ -268,7 +280,6 @@
 	int locked = cache->locked;
 	buffer_t *buffer;
 	uint32_t i, offset;
-	size_t size;
 	int ret = 0;
 
 	if (!locked) {
@@ -288,8 +299,6 @@
 	copy_to_buf(cache, buffer,
 		    offsetof(struct mail_cache_field_private, last_used),
 		    sizeof(uint32_t));
-	size = buffer->used;
-
 	ret = pwrite_full(cache->fd, buffer->data,
 			  sizeof(uint32_t) * cache->file_fields_count,
 			  offset + MAIL_CACHE_FIELD_LAST_USED());
@@ -297,7 +306,6 @@
 		buffer_set_used_size(buffer, 0);
 		copy_to_buf_byte(cache, buffer,
 				 offsetof(struct mail_cache_field, decision));
-		size += buffer->used;
 
 		ret = pwrite_full(cache->fd, buffer->data,
 			sizeof(uint8_t) * cache->file_fields_count, offset +
@@ -310,11 +318,8 @@
 	}
 	t_pop();
 
-	if (ret == 0) {
+	if (ret == 0)
 		cache->field_header_write_pending = FALSE;
-		if (cache->file_cache != NULL)
-			file_cache_invalidate(cache->file_cache, offset, size);
-	}
 
 	if (!locked)
 		mail_cache_unlock(cache);

Index: mail-cache-transaction.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache-transaction.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- mail-cache-transaction.c	8 Nov 2004 00:40:41 -0000	1.32
+++ mail-cache-transaction.c	8 Nov 2004 00:55:02 -0000	1.33
@@ -171,10 +171,6 @@
 			mail_cache_set_syscall_error(cache, "pwrite_full()");
 			return FALSE;
 		}
-		if (cache->file_cache != NULL) {
-			file_cache_invalidate(cache->file_cache, prev_offset,
-					      sizeof(hole.next_offset));
-		}
 	}
 	hdr->deleted_space -= hole.size;
 	cache->hdr_modified = TRUE;
@@ -290,11 +286,6 @@
 			return;
 		}
 
-		if (cache->file_cache != NULL) {
-			file_cache_invalidate(cache->file_cache, offset,
-					      sizeof(hole));
-		}
-
 		cache->hdr_copy.deleted_space += size;
 		cache->hdr_copy.hole_offset = offset;
 		cache->hdr_modified = TRUE;
@@ -491,10 +482,6 @@
 			mail_cache_set_syscall_error(cache, "pwrite_full()");
 			return -1;
 		}
-		if (cache->file_cache != NULL) {
-			file_cache_invalidate(cache->file_cache,
-					      write_offset, max_size);
-		}
 
 		size = mail_cache_transaction_update_index(ctx, rec, seq,
 							   &seq_idx, seq_limit,
@@ -654,11 +641,6 @@
 		ret = -1;
 	else {
 		/* after it's guaranteed to be in disk, update header offset */
-		if (cache->file_cache != NULL) {
-			file_cache_invalidate(cache->file_cache, offset, size);
-			file_cache_invalidate(cache->file_cache, hdr_offset,
-					      sizeof(offset));
-		}
 		offset = mail_index_uint32_to_offset(offset);
 		if (pwrite_full(cache->fd, &offset, sizeof(offset),
 				hdr_offset) < 0) {
@@ -750,10 +732,6 @@
 		mail_cache_set_syscall_error(cache, "pwrite_full()");
 		return -1;
 	}
-	if (cache->file_cache != NULL) {
-		file_cache_invalidate(cache->file_cache,
-				      new_offset, sizeof(old_offset));
-	}
 	return 0;
 }
 

Index: mail-cache.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-index/mail-cache.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -d -r1.52 -r1.53
--- mail-cache.c	8 Nov 2004 00:40:41 -0000	1.52
+++ mail-cache.c	8 Nov 2004 00:55:02 -0000	1.53
@@ -345,6 +345,10 @@
 
 	if (ret > 0) {
 		/* make sure our header is up to date */
+		if (cache->file_cache != NULL) {
+			file_cache_invalidate(cache->file_cache, 0,
+					      sizeof(struct mail_cache_header));
+		}
 		if (mail_cache_map(cache, 0, 0) < 0)
 			ret = -1;
 		cache->hdr_copy = *cache->hdr;
@@ -390,10 +394,6 @@
 		if (pwrite_full(cache->fd, &cache->hdr_copy,
 				sizeof(cache->hdr_copy), 0) < 0)
 			mail_cache_set_syscall_error(cache, "pwrite_full()");
-		if (cache->file_cache != NULL) {
-			file_cache_invalidate(cache->file_cache, 0,
-					      sizeof(cache->hdr_copy));
-		}
 		mail_cache_update_need_compress(cache);
 	}
 



More information about the dovecot-cvs mailing list