Lines Matching refs:size
57 int file_cache_set_size(struct file_cache *cache, uoff_t size)
65 diff = size % page_size;
67 size += page_size - diff;
69 i_assert((size % page_size) == 0);
70 if (size <= cache->mmap_length)
73 if (size > (size_t)-1) {
74 i_error("file_cache_set_size(%s, %"PRIuUOFF_T"): size too large",
75 cache->path, size);
81 cache->mmap_base = mmap_anon(size);
84 cache->path, size);
91 size, MREMAP_MAYMOVE);
94 cache->path, size);
100 cache->mmap_length = size;
104 ssize_t file_cache_read(struct file_cache *cache, uoff_t offset, size_t size)
113 if (size > SSIZE_T_MAX) {
117 size = SSIZE_T_MAX;
119 if (offset >= (uoff_t)-1 - size)
120 size = (uoff_t)-1 - offset;
122 if (offset + size > cache->mmap_length &&
123 offset + size - cache->mmap_length > 1024*1024) {
135 if (offset + size > (uoff_t)st.st_size) {
138 size = (uoff_t)st.st_size - offset;
142 if (file_cache_set_size(cache, offset + size) < 0)
146 psize = (offset + size + page_size-1) / page_size - poffset;
170 if (offset + size <= cache->read_highwater) {
197 dest_offset - offset < size ?
198 dest_offset - offset : size;
227 return size;
236 void file_cache_write(struct file_cache *cache, const void *data, size_t size,
244 i_assert((uoff_t)-1 - offset > size);
246 if (file_cache_set_size(cache, offset + size) < 0) {
249 file_cache_invalidate(cache, offset, size);
253 memcpy(PTR_OFFSET(cache->mmap_base, offset), data, size);
255 if (cache->read_highwater < offset + size) {
261 cache->read_highwater = offset + size;
265 if (size >= page_size) {
267 last_page = (offset + size) / page_size;
280 void file_cache_invalidate(struct file_cache *cache, uoff_t offset, uoff_t size)
286 if (offset >= cache->read_highwater || size == 0)
291 if (size > cache->read_highwater - offset) {
293 size = cache->read_highwater - offset;
295 if (size >= cache->read_highwater) {
301 size = (offset + size + page_size-1) / page_size;
303 i_assert(size > offset);
304 size -= offset;
306 if (size != 1) {
312 size * page_size, MADV_DONTNEED);
316 1 + (size + CHAR_BIT - 1) / CHAR_BIT);
319 for (i = offset % CHAR_BIT, mask = 0; i < CHAR_BIT && size > 0; i++) {
321 size--;
326 memset(bits, 0, size / CHAR_BIT);
327 bits += size / CHAR_BIT;
328 size %= CHAR_BIT;
331 if (size > 0) {
332 for (i = 0, mask = 0; i < size; i++)