file-cache.c revision 39d15a0395754eeed23b2ac83405c2f5f19d7981
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen/* Copyright (c) 2004 Timo Sirainen */
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen cache->page_bitmask = buffer_create_dynamic(default_pool, 128);
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainenvoid file_cache_free(struct file_cache **_cache)
c0435c854a0e7246373b9752d163095cc4fbe985Timo Sirainen if (munmap_anon(cache->mmap_base, cache->mmap_length) < 0)
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainenvoid file_cache_set_fd(struct file_cache *cache, int fd)
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen file_cache_invalidate(cache, 0, cache->mmap_length);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainenstatic int file_cache_set_size(struct file_cache *cache, uoff_t size)
89e195dfb5c4b0efd9b9f459771a4467674e5b1fTimo Sirainen i_error("file_cache_set_size(%"PRIuUOFF_T"): size too large",
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen /* grow mmaping */
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen i_error("mmap_anon(%"PRIuUOFF_T") failed: %m", size);
ecc81625167ed96c04c02aa190a1ea5baa65b474Timo Sirainen cache->mmap_base = mremap_anon(cache->mmap_base,
CHAR_BIT);
while (psize > 0) {
if (ret <= 0) {
if (ret < 0)
unsigned int high_poffset =
return size;
unsigned char *bits;
first_page++;
size--;
if (size > 0) {
mask = 0;