[dovecot-cvs] dovecot/src/lib file-cache.c, 1.6, 1.7 file-cache.h,
1.2, 1.3
cras at dovecot.org
cras at dovecot.org
Sat May 14 14:29:10 EEST 2005
- Previous message: [dovecot-cvs] dovecot/src/lib network.c,1.27,1.28
- Next message: [dovecot-cvs] dovecot/src/lib-index mail-cache-fields.c, 1.13,
1.14 mail-cache-private.h, 1.24, 1.25 mail-cache-transaction.c,
1.41, 1.42 mail-cache.c, 1.68, 1.69
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/lib
In directory talvi:/tmp/cvs-serv6674/lib
Modified Files:
file-cache.c file-cache.h
Log Message:
Added file_cache_write() to update cached memory area.
Index: file-cache.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/file-cache.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- file-cache.c 10 May 2005 21:36:05 -0000 1.6
+++ file-cache.c 14 May 2005 11:29:07 -0000 1.7
@@ -160,6 +160,37 @@
return cache->mmap_base;
}
+void file_cache_write(struct file_cache *cache, const void *data, size_t size,
+ uoff_t offset)
+{
+ size_t page_size = mmap_get_page_size();
+ size_t max_size;
+ unsigned char *bits;
+ unsigned int first_page, last_page;
+
+ if (offset >= cache->mmap_length)
+ return;
+
+ max_size = cache->mmap_length - offset;
+ memcpy(PTR_OFFSET(cache->mmap_base, offset),
+ data, I_MIN(size, max_size));
+
+ /* mark fully written pages cached */
+ if (size >= page_size) {
+ first_page = offset / page_size;
+ last_page = (offset + size) / page_size;
+ if ((offset % page_size) != 0)
+ first_page++;
+
+ bits = buffer_get_space_unsafe(cache->page_bitmask, 0,
+ last_page / CHAR_BIT + 1);
+ for (; first_page < last_page; first_page++) {
+ bits[first_page / CHAR_BIT] |=
+ 1 << (first_page % CHAR_BIT);
+ }
+ }
+}
+
void file_cache_invalidate(struct file_cache *cache, uoff_t offset, uoff_t size)
{
size_t page_size = mmap_get_page_size();
Index: file-cache.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib/file-cache.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- file-cache.h 5 Dec 2004 01:36:12 -0000 1.2
+++ file-cache.h 14 May 2005 11:29:07 -0000 1.3
@@ -18,6 +18,10 @@
Note that the pointer may become invalid after calling file_cache_read(). */
const void *file_cache_get_map(struct file_cache *cache, size_t *size_r);
+/* Update cached memory area. Mark fully written pages as cached. */
+void file_cache_write(struct file_cache *cache, const void *data, size_t size,
+ uoff_t offset);
+
/* Invalidate cached memory area. It will be read again next time it's tried
to be accessed. */
void file_cache_invalidate(struct file_cache *cache,
- Previous message: [dovecot-cvs] dovecot/src/lib network.c,1.27,1.28
- Next message: [dovecot-cvs] dovecot/src/lib-index mail-cache-fields.c, 1.13,
1.14 mail-cache-private.h, 1.24, 1.25 mail-cache-transaction.c,
1.41, 1.42 mail-cache.c, 1.68, 1.69
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list