Lines Matching refs:cache

76 			      struct fiemap_cache *cache)  in flush_fiemap_cache()  argument
78 for (int i = 0; i < cache->entries_pos; i++) { in flush_fiemap_cache()
79 struct btrfs_fiemap_entry *entry = &cache->entries[i]; in flush_fiemap_cache()
92 cache->entries_pos = 0; in flush_fiemap_cache()
108 struct fiemap_cache *cache, in emit_fiemap_extent() argument
117 if (!cache->cached) in emit_fiemap_extent()
152 cache_end = cache->offset + cache->len; in emit_fiemap_extent()
154 if (offset == cache->offset) { in emit_fiemap_extent()
163 } else if (offset > cache->offset) { in emit_fiemap_extent()
176 cache->len = offset - cache->offset; in emit_fiemap_extent()
231 if (cache->offset + cache->len == offset && in emit_fiemap_extent()
232 cache->phys + cache->len == phys && in emit_fiemap_extent()
233 cache->flags == flags) { in emit_fiemap_extent()
234 cache->len += len; in emit_fiemap_extent()
241 if (cache->entries_pos == cache->entries_size) { in emit_fiemap_extent()
250 entry = &cache->entries[cache->entries_size - 1]; in emit_fiemap_extent()
251 cache->next_search_offset = entry->offset + entry->len; in emit_fiemap_extent()
252 cache->cached = false; in emit_fiemap_extent()
257 entry = &cache->entries[cache->entries_pos]; in emit_fiemap_extent()
258 entry->offset = cache->offset; in emit_fiemap_extent()
259 entry->phys = cache->phys; in emit_fiemap_extent()
260 entry->len = cache->len; in emit_fiemap_extent()
261 entry->flags = cache->flags; in emit_fiemap_extent()
262 cache->entries_pos++; in emit_fiemap_extent()
263 cache->extents_mapped++; in emit_fiemap_extent()
265 if (cache->extents_mapped == fieinfo->fi_extents_max) { in emit_fiemap_extent()
266 cache->cached = false; in emit_fiemap_extent()
270 cache->cached = true; in emit_fiemap_extent()
271 cache->offset = offset; in emit_fiemap_extent()
272 cache->phys = phys; in emit_fiemap_extent()
273 cache->len = len; in emit_fiemap_extent()
274 cache->flags = flags; in emit_fiemap_extent()
291 struct fiemap_cache *cache) in emit_last_fiemap_cache() argument
295 if (!cache->cached) in emit_last_fiemap_cache()
298 ret = fiemap_fill_next_extent(fieinfo, cache->offset, cache->phys, in emit_last_fiemap_cache()
299 cache->len, cache->flags); in emit_last_fiemap_cache()
300 cache->cached = false; in emit_last_fiemap_cache()
438 struct fiemap_cache *cache, in fiemap_process_hole() argument
497 ret = emit_fiemap_extent(fieinfo, cache, prealloc_start, in fiemap_process_hole()
505 ret = emit_fiemap_extent(fieinfo, cache, delalloc_start, 0, in fiemap_process_hole()
544 ret = emit_fiemap_extent(fieinfo, cache, prealloc_start, in fiemap_process_hole()
638 struct fiemap_cache cache = { 0 }; in extent_fiemap() local
648 cache.entries_size = PAGE_SIZE / sizeof(struct btrfs_fiemap_entry); in extent_fiemap()
649 cache.entries = kmalloc_objs(struct btrfs_fiemap_entry, in extent_fiemap()
650 cache.entries_size); in extent_fiemap()
653 if (!cache.entries || !backref_ctx || !path) { in extent_fiemap()
715 ret = fiemap_process_hole(inode, fieinfo, &cache, in extent_fiemap()
753 ret = emit_fiemap_extent(fieinfo, &cache, key.offset, 0, in extent_fiemap()
756 ret = fiemap_process_hole(inode, fieinfo, &cache, in extent_fiemap()
764 ret = fiemap_process_hole(inode, fieinfo, &cache, in extent_fiemap()
781 ret = emit_fiemap_extent(fieinfo, &cache, key.offset, in extent_fiemap()
813 ret = fiemap_process_hole(inode, fieinfo, &cache, in extent_fiemap()
821 if (cache.cached && cache.offset + cache.len >= last_extent_end) { in extent_fiemap()
836 cache.flags |= FIEMAP_EXTENT_LAST; in extent_fiemap()
838 cache.flags |= FIEMAP_EXTENT_LAST; in extent_fiemap()
847 ret = flush_fiemap_cache(fieinfo, &cache); in extent_fiemap()
850 len -= cache.next_search_offset - start; in extent_fiemap()
851 start = cache.next_search_offset; in extent_fiemap()
867 ret = flush_fiemap_cache(fieinfo, &cache); in extent_fiemap()
871 ret = emit_last_fiemap_cache(fieinfo, &cache); in extent_fiemap()
874 kfree(cache.entries); in extent_fiemap()