Lines Matching refs:ci
72 u64 ocfs2_metadata_cache_owner(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_owner() argument
74 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_owner()
76 return ci->ci_ops->co_owner(ci); in ocfs2_metadata_cache_owner()
79 struct super_block *ocfs2_metadata_cache_get_super(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_get_super() argument
81 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_get_super()
83 return ci->ci_ops->co_get_super(ci); in ocfs2_metadata_cache_get_super()
86 static void ocfs2_metadata_cache_lock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_lock() argument
88 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_lock()
90 ci->ci_ops->co_cache_lock(ci); in ocfs2_metadata_cache_lock()
93 static void ocfs2_metadata_cache_unlock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_unlock() argument
95 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_unlock()
97 ci->ci_ops->co_cache_unlock(ci); in ocfs2_metadata_cache_unlock()
100 void ocfs2_metadata_cache_io_lock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_io_lock() argument
102 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_io_lock()
104 ci->ci_ops->co_io_lock(ci); in ocfs2_metadata_cache_io_lock()
107 void ocfs2_metadata_cache_io_unlock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_io_unlock() argument
109 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_io_unlock()
111 ci->ci_ops->co_io_unlock(ci); in ocfs2_metadata_cache_io_unlock()
115 static void ocfs2_metadata_cache_reset(struct ocfs2_caching_info *ci, in ocfs2_metadata_cache_reset() argument
118 ci->ci_flags |= OCFS2_CACHE_FL_INLINE; in ocfs2_metadata_cache_reset()
119 ci->ci_num_cached = 0; in ocfs2_metadata_cache_reset()
122 ci->ci_created_trans = 0; in ocfs2_metadata_cache_reset()
123 ci->ci_last_trans = 0; in ocfs2_metadata_cache_reset()
127 void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci, in ocfs2_metadata_cache_init() argument
132 ci->ci_ops = ops; in ocfs2_metadata_cache_init()
133 ocfs2_metadata_cache_reset(ci, 1); in ocfs2_metadata_cache_init()
136 void ocfs2_metadata_cache_exit(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_exit() argument
138 ocfs2_metadata_cache_purge(ci); in ocfs2_metadata_cache_exit()
139 ocfs2_metadata_cache_reset(ci, 1); in ocfs2_metadata_cache_exit()
171 void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_purge() argument
176 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_purge()
178 ocfs2_metadata_cache_lock(ci); in ocfs2_metadata_cache_purge()
179 tree = !(ci->ci_flags & OCFS2_CACHE_FL_INLINE); in ocfs2_metadata_cache_purge()
180 to_purge = ci->ci_num_cached; in ocfs2_metadata_cache_purge()
183 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_metadata_cache_purge()
190 root = ci->ci_cache.ci_tree; in ocfs2_metadata_cache_purge()
192 ocfs2_metadata_cache_reset(ci, 0); in ocfs2_metadata_cache_purge()
193 ocfs2_metadata_cache_unlock(ci); in ocfs2_metadata_cache_purge()
201 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_metadata_cache_purge()
207 static int ocfs2_search_cache_array(struct ocfs2_caching_info *ci, in ocfs2_search_cache_array() argument
212 for (i = 0; i < ci->ci_num_cached; i++) { in ocfs2_search_cache_array()
213 if (item == ci->ci_cache.ci_array[i]) in ocfs2_search_cache_array()
223 ocfs2_search_cache_tree(struct ocfs2_caching_info *ci, in ocfs2_search_cache_tree() argument
226 struct rb_node * n = ci->ci_cache.ci_tree.rb_node; in ocfs2_search_cache_tree()
243 static int ocfs2_buffer_cached(struct ocfs2_caching_info *ci, in ocfs2_buffer_cached() argument
249 ocfs2_metadata_cache_lock(ci); in ocfs2_buffer_cached()
252 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_buffer_cached()
254 !!(ci->ci_flags & OCFS2_CACHE_FL_INLINE)); in ocfs2_buffer_cached()
256 if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) in ocfs2_buffer_cached()
257 index = ocfs2_search_cache_array(ci, bh->b_blocknr); in ocfs2_buffer_cached()
259 item = ocfs2_search_cache_tree(ci, bh->b_blocknr); in ocfs2_buffer_cached()
261 ocfs2_metadata_cache_unlock(ci); in ocfs2_buffer_cached()
273 int ocfs2_buffer_uptodate(struct ocfs2_caching_info *ci, in ocfs2_buffer_uptodate() argument
289 return ocfs2_buffer_cached(ci, bh); in ocfs2_buffer_uptodate()
296 int ocfs2_buffer_read_ahead(struct ocfs2_caching_info *ci, in ocfs2_buffer_read_ahead() argument
299 return buffer_locked(bh) && ocfs2_buffer_cached(ci, bh); in ocfs2_buffer_read_ahead()
303 static void ocfs2_append_cache_array(struct ocfs2_caching_info *ci, in ocfs2_append_cache_array() argument
306 BUG_ON(ci->ci_num_cached >= OCFS2_CACHE_INFO_MAX_ARRAY); in ocfs2_append_cache_array()
309 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_append_cache_array()
310 (unsigned long long)block, ci->ci_num_cached); in ocfs2_append_cache_array()
312 ci->ci_cache.ci_array[ci->ci_num_cached] = block; in ocfs2_append_cache_array()
313 ci->ci_num_cached++; in ocfs2_append_cache_array()
319 static void __ocfs2_insert_cache_tree(struct ocfs2_caching_info *ci, in __ocfs2_insert_cache_tree() argument
324 struct rb_node **p = &ci->ci_cache.ci_tree.rb_node; in __ocfs2_insert_cache_tree()
328 (unsigned long long)ocfs2_metadata_cache_owner(ci), in __ocfs2_insert_cache_tree()
329 (unsigned long long)block, ci->ci_num_cached); in __ocfs2_insert_cache_tree()
349 rb_insert_color(&new->c_node, &ci->ci_cache.ci_tree); in __ocfs2_insert_cache_tree()
350 ci->ci_num_cached++; in __ocfs2_insert_cache_tree()
354 static inline int ocfs2_insert_can_use_array(struct ocfs2_caching_info *ci) in ocfs2_insert_can_use_array() argument
356 return (ci->ci_flags & OCFS2_CACHE_FL_INLINE) && in ocfs2_insert_can_use_array()
357 (ci->ci_num_cached < OCFS2_CACHE_INFO_MAX_ARRAY); in ocfs2_insert_can_use_array()
365 static void ocfs2_expand_cache(struct ocfs2_caching_info *ci, in ocfs2_expand_cache() argument
370 mlog_bug_on_msg(ci->ci_num_cached != OCFS2_CACHE_INFO_MAX_ARRAY, in ocfs2_expand_cache()
372 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_expand_cache()
373 ci->ci_num_cached, OCFS2_CACHE_INFO_MAX_ARRAY); in ocfs2_expand_cache()
374 mlog_bug_on_msg(!(ci->ci_flags & OCFS2_CACHE_FL_INLINE), in ocfs2_expand_cache()
376 (unsigned long long)ocfs2_metadata_cache_owner(ci)); in ocfs2_expand_cache()
381 tree[i]->c_block = ci->ci_cache.ci_array[i]; in ocfs2_expand_cache()
383 ci->ci_flags &= ~OCFS2_CACHE_FL_INLINE; in ocfs2_expand_cache()
384 ci->ci_cache.ci_tree = RB_ROOT; in ocfs2_expand_cache()
386 ci->ci_num_cached = 0; in ocfs2_expand_cache()
389 __ocfs2_insert_cache_tree(ci, tree[i]); in ocfs2_expand_cache()
394 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_expand_cache()
395 ci->ci_flags, ci->ci_num_cached); in ocfs2_expand_cache()
400 static void __ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, in __ocfs2_set_buffer_uptodate() argument
410 (unsigned long long)ocfs2_metadata_cache_owner(ci), in __ocfs2_set_buffer_uptodate()
435 ocfs2_metadata_cache_lock(ci); in __ocfs2_set_buffer_uptodate()
436 if (ocfs2_insert_can_use_array(ci)) { in __ocfs2_set_buffer_uptodate()
439 ocfs2_append_cache_array(ci, block); in __ocfs2_set_buffer_uptodate()
440 ocfs2_metadata_cache_unlock(ci); in __ocfs2_set_buffer_uptodate()
445 ocfs2_expand_cache(ci, tree); in __ocfs2_set_buffer_uptodate()
447 __ocfs2_insert_cache_tree(ci, new); in __ocfs2_set_buffer_uptodate()
448 ocfs2_metadata_cache_unlock(ci); in __ocfs2_set_buffer_uptodate()
483 void ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, in ocfs2_set_buffer_uptodate() argument
490 if (ocfs2_buffer_cached(ci, bh)) in ocfs2_set_buffer_uptodate()
494 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_set_buffer_uptodate()
499 ocfs2_metadata_cache_lock(ci); in ocfs2_set_buffer_uptodate()
500 if (ocfs2_insert_can_use_array(ci)) { in ocfs2_set_buffer_uptodate()
503 ocfs2_append_cache_array(ci, bh->b_blocknr); in ocfs2_set_buffer_uptodate()
504 ocfs2_metadata_cache_unlock(ci); in ocfs2_set_buffer_uptodate()
509 if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) { in ocfs2_set_buffer_uptodate()
513 ocfs2_metadata_cache_unlock(ci); in ocfs2_set_buffer_uptodate()
515 __ocfs2_set_buffer_uptodate(ci, bh->b_blocknr, expand); in ocfs2_set_buffer_uptodate()
521 void ocfs2_set_new_buffer_uptodate(struct ocfs2_caching_info *ci, in ocfs2_set_new_buffer_uptodate() argument
525 BUG_ON(ocfs2_buffer_cached(ci, bh)); in ocfs2_set_new_buffer_uptodate()
529 ocfs2_metadata_cache_io_lock(ci); in ocfs2_set_new_buffer_uptodate()
530 ocfs2_set_buffer_uptodate(ci, bh); in ocfs2_set_new_buffer_uptodate()
531 ocfs2_metadata_cache_io_unlock(ci); in ocfs2_set_new_buffer_uptodate()
535 static void ocfs2_remove_metadata_array(struct ocfs2_caching_info *ci, in ocfs2_remove_metadata_array() argument
538 sector_t *array = ci->ci_cache.ci_array; in ocfs2_remove_metadata_array()
542 BUG_ON(index >= ci->ci_num_cached); in ocfs2_remove_metadata_array()
543 BUG_ON(!ci->ci_num_cached); in ocfs2_remove_metadata_array()
546 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_remove_metadata_array()
547 index, ci->ci_num_cached); in ocfs2_remove_metadata_array()
549 ci->ci_num_cached--; in ocfs2_remove_metadata_array()
553 if (ci->ci_num_cached && index < ci->ci_num_cached) { in ocfs2_remove_metadata_array()
554 bytes = sizeof(sector_t) * (ci->ci_num_cached - index); in ocfs2_remove_metadata_array()
560 static void ocfs2_remove_metadata_tree(struct ocfs2_caching_info *ci, in ocfs2_remove_metadata_tree() argument
564 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_remove_metadata_tree()
567 rb_erase(&item->c_node, &ci->ci_cache.ci_tree); in ocfs2_remove_metadata_tree()
568 ci->ci_num_cached--; in ocfs2_remove_metadata_tree()
571 static void ocfs2_remove_block_from_cache(struct ocfs2_caching_info *ci, in ocfs2_remove_block_from_cache() argument
577 ocfs2_metadata_cache_lock(ci); in ocfs2_remove_block_from_cache()
579 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_remove_block_from_cache()
580 (unsigned long long) block, ci->ci_num_cached, in ocfs2_remove_block_from_cache()
581 ci->ci_flags); in ocfs2_remove_block_from_cache()
583 if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) { in ocfs2_remove_block_from_cache()
584 index = ocfs2_search_cache_array(ci, block); in ocfs2_remove_block_from_cache()
586 ocfs2_remove_metadata_array(ci, index); in ocfs2_remove_block_from_cache()
588 item = ocfs2_search_cache_tree(ci, block); in ocfs2_remove_block_from_cache()
590 ocfs2_remove_metadata_tree(ci, item); in ocfs2_remove_block_from_cache()
592 ocfs2_metadata_cache_unlock(ci); in ocfs2_remove_block_from_cache()
603 void ocfs2_remove_from_cache(struct ocfs2_caching_info *ci, in ocfs2_remove_from_cache() argument
608 ocfs2_remove_block_from_cache(ci, block); in ocfs2_remove_from_cache()
612 void ocfs2_remove_xattr_clusters_from_cache(struct ocfs2_caching_info *ci, in ocfs2_remove_xattr_clusters_from_cache() argument
616 struct super_block *sb = ocfs2_metadata_cache_get_super(ci); in ocfs2_remove_xattr_clusters_from_cache()
620 ocfs2_remove_block_from_cache(ci, block); in ocfs2_remove_xattr_clusters_from_cache()