Lines Matching refs:offset
104 ssize_t file_cache_read(struct file_cache *cache, uoff_t offset, size_t size)
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) {
136 if (offset >= (uoff_t)st.st_size)
138 size = (uoff_t)st.st_size - offset;
142 if (file_cache_set_size(cache, offset + size) < 0)
145 poffset = offset / page_size;
146 psize = (offset + size + page_size-1) / page_size - poffset;
170 if (offset + size <= cache->read_highwater) {
196 return dest_offset <= offset ? 0 :
197 dest_offset - offset < size ?
198 dest_offset - offset : size;
237 uoff_t offset)
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;
266 first_page = offset / page_size;
267 last_page = (offset + size) / page_size;
268 if ((offset % page_size) != 0)
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;
298 cache->read_highwater = offset & ~(page_size-1);
301 size = (offset + size + page_size-1) / page_size;
302 offset /= page_size;
303 i_assert(size > offset);
304 size -= offset;
311 (void)madvise(PTR_OFFSET(cache->mmap_base, offset * page_size),
315 bits = buffer_get_space_unsafe(cache->page_bitmask, offset / CHAR_BIT,
319 for (i = offset % CHAR_BIT, mask = 0; i < CHAR_BIT && size > 0; i++) {