# HG changeset patch # User Timo Sirainen # Date 1481736905 -7200 # Node ID f7a5eb710cad604cdb94a4d0b8818e0c6baa92de # Parent 398d70068a08af62b539a1b98a1ae8054cb5dd06 lib: Add file_cache_new_path() to include path in error messages. diff -r 398d70068a08 -r f7a5eb710cad src/lib/file-cache.c --- a/src/lib/file-cache.c Wed Dec 14 23:20:12 2016 +0200 +++ b/src/lib/file-cache.c Wed Dec 14 19:35:05 2016 +0200 @@ -9,6 +9,7 @@ struct file_cache { int fd; + char *path; buffer_t *page_bitmask; void *mmap_base; @@ -18,10 +19,16 @@ struct file_cache *file_cache_new(int fd) { + return file_cache_new_path(fd, ""); +} + +struct file_cache *file_cache_new_path(int fd, const char *path) +{ struct file_cache *cache; cache = i_new(struct file_cache, 1); cache->fd = fd; + cache->path = i_strdup(path); cache->page_bitmask = buffer_create_dynamic(default_pool, 128); return cache; } @@ -34,9 +41,10 @@ if (cache->mmap_base != NULL) { if (munmap_anon(cache->mmap_base, cache->mmap_length) < 0) - i_error("munmap_anon() failed: %m"); + i_error("munmap_anon(%s) failed: %m", cache->path); } buffer_free(&cache->page_bitmask); + i_free(cache->path); i_free(cache); } @@ -63,8 +71,8 @@ return 0; if (size > (size_t)-1) { - i_error("file_cache_set_size(%"PRIuUOFF_T"): size too large", - size); + i_error("file_cache_set_size(%s, %"PRIuUOFF_T"): size too large", + cache->path, size); return -1; } @@ -72,7 +80,8 @@ if (cache->mmap_base == NULL) { cache->mmap_base = mmap_anon(size); if (cache->mmap_base == MAP_FAILED) { - i_error("mmap_anon(%"PRIuUOFF_T") failed: %m", size); + i_error("mmap_anon(%s, %"PRIuUOFF_T") failed: %m", + cache->path, size); cache->mmap_base = NULL; cache->mmap_length = 0; return -1; @@ -81,7 +90,8 @@ new_base = mremap_anon(cache->mmap_base, cache->mmap_length, size, MREMAP_MAYMOVE); if (new_base == MAP_FAILED) { - i_error("mremap_anon(%"PRIuUOFF_T") failed: %m", size); + i_error("mremap_anon(%s, %"PRIuUOFF_T") failed: %m", + cache->path, size); return -1; } @@ -118,7 +128,7 @@ if (fstat(cache->fd, &st) < 0) { if (errno != ESTALE) - i_error("fstat(file_cache) failed: %m"); + i_error("fstat(%s) failed: %m", cache->path); return -1; } diff -r 398d70068a08 -r f7a5eb710cad src/lib/file-cache.h --- a/src/lib/file-cache.h Wed Dec 14 23:20:12 2016 +0200 +++ b/src/lib/file-cache.h Wed Dec 14 19:35:05 2016 +0200 @@ -4,6 +4,7 @@ /* Create a new file cache. It works very much like file-backed mmap()ed memory, but it works more nicely with remote filesystems (no SIGBUS). */ struct file_cache *file_cache_new(int fd); +struct file_cache *file_cache_new_path(int fd, const char *path); /* Destroy the cache and set cache pointer to NULL. */ void file_cache_free(struct file_cache **cache);