Lines Matching refs:ci
58 u64 ocfs2_metadata_cache_owner(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_owner() argument
60 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_owner()
62 return ci->ci_ops->co_owner(ci); in ocfs2_metadata_cache_owner()
65 struct super_block *ocfs2_metadata_cache_get_super(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_get_super() argument
67 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_get_super()
69 return ci->ci_ops->co_get_super(ci); in ocfs2_metadata_cache_get_super()
72 static void ocfs2_metadata_cache_lock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_lock() argument
74 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_lock()
76 ci->ci_ops->co_cache_lock(ci); in ocfs2_metadata_cache_lock()
79 static void ocfs2_metadata_cache_unlock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_unlock() argument
81 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_unlock()
83 ci->ci_ops->co_cache_unlock(ci); in ocfs2_metadata_cache_unlock()
86 void ocfs2_metadata_cache_io_lock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_io_lock() argument
88 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_io_lock()
90 ci->ci_ops->co_io_lock(ci); in ocfs2_metadata_cache_io_lock()
93 void ocfs2_metadata_cache_io_unlock(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_io_unlock() argument
95 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_io_unlock()
97 ci->ci_ops->co_io_unlock(ci); in ocfs2_metadata_cache_io_unlock()
101 static void ocfs2_metadata_cache_reset(struct ocfs2_caching_info *ci, in ocfs2_metadata_cache_reset() argument
104 ci->ci_flags |= OCFS2_CACHE_FL_INLINE; in ocfs2_metadata_cache_reset()
105 ci->ci_num_cached = 0; in ocfs2_metadata_cache_reset()
108 ci->ci_created_trans = 0; in ocfs2_metadata_cache_reset()
109 ci->ci_last_trans = 0; in ocfs2_metadata_cache_reset()
113 void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci, in ocfs2_metadata_cache_init() argument
118 ci->ci_ops = ops; in ocfs2_metadata_cache_init()
119 ocfs2_metadata_cache_reset(ci, 1); in ocfs2_metadata_cache_init()
122 void ocfs2_metadata_cache_exit(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_exit() argument
124 ocfs2_metadata_cache_purge(ci); in ocfs2_metadata_cache_exit()
125 ocfs2_metadata_cache_reset(ci, 1); in ocfs2_metadata_cache_exit()
157 void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci) in ocfs2_metadata_cache_purge() argument
162 BUG_ON(!ci || !ci->ci_ops); in ocfs2_metadata_cache_purge()
164 ocfs2_metadata_cache_lock(ci); in ocfs2_metadata_cache_purge()
165 tree = !(ci->ci_flags & OCFS2_CACHE_FL_INLINE); in ocfs2_metadata_cache_purge()
166 to_purge = ci->ci_num_cached; in ocfs2_metadata_cache_purge()
169 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_metadata_cache_purge()
176 root = ci->ci_cache.ci_tree; in ocfs2_metadata_cache_purge()
178 ocfs2_metadata_cache_reset(ci, 0); in ocfs2_metadata_cache_purge()
179 ocfs2_metadata_cache_unlock(ci); in ocfs2_metadata_cache_purge()
187 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_metadata_cache_purge()
193 static int ocfs2_search_cache_array(struct ocfs2_caching_info *ci, in ocfs2_search_cache_array() argument
198 for (i = 0; i < ci->ci_num_cached; i++) { in ocfs2_search_cache_array()
199 if (item == ci->ci_cache.ci_array[i]) in ocfs2_search_cache_array()
209 ocfs2_search_cache_tree(struct ocfs2_caching_info *ci, in ocfs2_search_cache_tree() argument
212 struct rb_node * n = ci->ci_cache.ci_tree.rb_node; in ocfs2_search_cache_tree()
229 static int ocfs2_buffer_cached(struct ocfs2_caching_info *ci, in ocfs2_buffer_cached() argument
235 ocfs2_metadata_cache_lock(ci); in ocfs2_buffer_cached()
238 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_buffer_cached()
240 !!(ci->ci_flags & OCFS2_CACHE_FL_INLINE)); in ocfs2_buffer_cached()
242 if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) in ocfs2_buffer_cached()
243 index = ocfs2_search_cache_array(ci, bh->b_blocknr); in ocfs2_buffer_cached()
245 item = ocfs2_search_cache_tree(ci, bh->b_blocknr); in ocfs2_buffer_cached()
247 ocfs2_metadata_cache_unlock(ci); in ocfs2_buffer_cached()
259 int ocfs2_buffer_uptodate(struct ocfs2_caching_info *ci, in ocfs2_buffer_uptodate() argument
275 return ocfs2_buffer_cached(ci, bh); in ocfs2_buffer_uptodate()
282 int ocfs2_buffer_read_ahead(struct ocfs2_caching_info *ci, in ocfs2_buffer_read_ahead() argument
285 return buffer_locked(bh) && ocfs2_buffer_cached(ci, bh); in ocfs2_buffer_read_ahead()
289 static void ocfs2_append_cache_array(struct ocfs2_caching_info *ci, in ocfs2_append_cache_array() argument
292 BUG_ON(ci->ci_num_cached >= OCFS2_CACHE_INFO_MAX_ARRAY); in ocfs2_append_cache_array()
295 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_append_cache_array()
296 (unsigned long long)block, ci->ci_num_cached); in ocfs2_append_cache_array()
298 ci->ci_cache.ci_array[ci->ci_num_cached] = block; in ocfs2_append_cache_array()
299 ci->ci_num_cached++; in ocfs2_append_cache_array()
305 static void __ocfs2_insert_cache_tree(struct ocfs2_caching_info *ci, in __ocfs2_insert_cache_tree() argument
310 struct rb_node **p = &ci->ci_cache.ci_tree.rb_node; in __ocfs2_insert_cache_tree()
314 (unsigned long long)ocfs2_metadata_cache_owner(ci), in __ocfs2_insert_cache_tree()
315 (unsigned long long)block, ci->ci_num_cached); in __ocfs2_insert_cache_tree()
335 rb_insert_color(&new->c_node, &ci->ci_cache.ci_tree); in __ocfs2_insert_cache_tree()
336 ci->ci_num_cached++; in __ocfs2_insert_cache_tree()
340 static inline int ocfs2_insert_can_use_array(struct ocfs2_caching_info *ci) in ocfs2_insert_can_use_array() argument
342 return (ci->ci_flags & OCFS2_CACHE_FL_INLINE) && in ocfs2_insert_can_use_array()
343 (ci->ci_num_cached < OCFS2_CACHE_INFO_MAX_ARRAY); in ocfs2_insert_can_use_array()
351 static void ocfs2_expand_cache(struct ocfs2_caching_info *ci, in ocfs2_expand_cache() argument
356 mlog_bug_on_msg(ci->ci_num_cached != OCFS2_CACHE_INFO_MAX_ARRAY, in ocfs2_expand_cache()
358 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_expand_cache()
359 ci->ci_num_cached, OCFS2_CACHE_INFO_MAX_ARRAY); in ocfs2_expand_cache()
360 mlog_bug_on_msg(!(ci->ci_flags & OCFS2_CACHE_FL_INLINE), in ocfs2_expand_cache()
362 (unsigned long long)ocfs2_metadata_cache_owner(ci)); in ocfs2_expand_cache()
367 tree[i]->c_block = ci->ci_cache.ci_array[i]; in ocfs2_expand_cache()
369 ci->ci_flags &= ~OCFS2_CACHE_FL_INLINE; in ocfs2_expand_cache()
370 ci->ci_cache.ci_tree = RB_ROOT; in ocfs2_expand_cache()
372 ci->ci_num_cached = 0; in ocfs2_expand_cache()
375 __ocfs2_insert_cache_tree(ci, tree[i]); in ocfs2_expand_cache()
380 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_expand_cache()
381 ci->ci_flags, ci->ci_num_cached); in ocfs2_expand_cache()
386 static void __ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, in __ocfs2_set_buffer_uptodate() argument
396 (unsigned long long)ocfs2_metadata_cache_owner(ci), in __ocfs2_set_buffer_uptodate()
421 ocfs2_metadata_cache_lock(ci); in __ocfs2_set_buffer_uptodate()
422 if (ocfs2_insert_can_use_array(ci)) { in __ocfs2_set_buffer_uptodate()
425 ocfs2_append_cache_array(ci, block); in __ocfs2_set_buffer_uptodate()
426 ocfs2_metadata_cache_unlock(ci); in __ocfs2_set_buffer_uptodate()
431 ocfs2_expand_cache(ci, tree); in __ocfs2_set_buffer_uptodate()
433 __ocfs2_insert_cache_tree(ci, new); in __ocfs2_set_buffer_uptodate()
434 ocfs2_metadata_cache_unlock(ci); in __ocfs2_set_buffer_uptodate()
469 void ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci, in ocfs2_set_buffer_uptodate() argument
476 if (ocfs2_buffer_cached(ci, bh)) in ocfs2_set_buffer_uptodate()
480 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_set_buffer_uptodate()
485 ocfs2_metadata_cache_lock(ci); in ocfs2_set_buffer_uptodate()
486 if (ocfs2_insert_can_use_array(ci)) { in ocfs2_set_buffer_uptodate()
489 ocfs2_append_cache_array(ci, bh->b_blocknr); in ocfs2_set_buffer_uptodate()
490 ocfs2_metadata_cache_unlock(ci); in ocfs2_set_buffer_uptodate()
495 if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) { in ocfs2_set_buffer_uptodate()
499 ocfs2_metadata_cache_unlock(ci); in ocfs2_set_buffer_uptodate()
501 __ocfs2_set_buffer_uptodate(ci, bh->b_blocknr, expand); in ocfs2_set_buffer_uptodate()
507 void ocfs2_set_new_buffer_uptodate(struct ocfs2_caching_info *ci, in ocfs2_set_new_buffer_uptodate() argument
511 BUG_ON(ocfs2_buffer_cached(ci, bh)); in ocfs2_set_new_buffer_uptodate()
515 ocfs2_metadata_cache_io_lock(ci); in ocfs2_set_new_buffer_uptodate()
516 ocfs2_set_buffer_uptodate(ci, bh); in ocfs2_set_new_buffer_uptodate()
517 ocfs2_metadata_cache_io_unlock(ci); in ocfs2_set_new_buffer_uptodate()
521 static void ocfs2_remove_metadata_array(struct ocfs2_caching_info *ci, in ocfs2_remove_metadata_array() argument
524 sector_t *array = ci->ci_cache.ci_array; in ocfs2_remove_metadata_array()
528 BUG_ON(index >= ci->ci_num_cached); in ocfs2_remove_metadata_array()
529 BUG_ON(!ci->ci_num_cached); in ocfs2_remove_metadata_array()
532 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_remove_metadata_array()
533 index, ci->ci_num_cached); in ocfs2_remove_metadata_array()
535 ci->ci_num_cached--; in ocfs2_remove_metadata_array()
539 if (ci->ci_num_cached && index < ci->ci_num_cached) { in ocfs2_remove_metadata_array()
540 bytes = sizeof(sector_t) * (ci->ci_num_cached - index); in ocfs2_remove_metadata_array()
546 static void ocfs2_remove_metadata_tree(struct ocfs2_caching_info *ci, in ocfs2_remove_metadata_tree() argument
550 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_remove_metadata_tree()
553 rb_erase(&item->c_node, &ci->ci_cache.ci_tree); in ocfs2_remove_metadata_tree()
554 ci->ci_num_cached--; in ocfs2_remove_metadata_tree()
557 static void ocfs2_remove_block_from_cache(struct ocfs2_caching_info *ci, in ocfs2_remove_block_from_cache() argument
563 ocfs2_metadata_cache_lock(ci); in ocfs2_remove_block_from_cache()
565 (unsigned long long)ocfs2_metadata_cache_owner(ci), in ocfs2_remove_block_from_cache()
566 (unsigned long long) block, ci->ci_num_cached, in ocfs2_remove_block_from_cache()
567 ci->ci_flags); in ocfs2_remove_block_from_cache()
569 if (ci->ci_flags & OCFS2_CACHE_FL_INLINE) { in ocfs2_remove_block_from_cache()
570 index = ocfs2_search_cache_array(ci, block); in ocfs2_remove_block_from_cache()
572 ocfs2_remove_metadata_array(ci, index); in ocfs2_remove_block_from_cache()
574 item = ocfs2_search_cache_tree(ci, block); in ocfs2_remove_block_from_cache()
576 ocfs2_remove_metadata_tree(ci, item); in ocfs2_remove_block_from_cache()
578 ocfs2_metadata_cache_unlock(ci); in ocfs2_remove_block_from_cache()
589 void ocfs2_remove_from_cache(struct ocfs2_caching_info *ci, in ocfs2_remove_from_cache() argument
594 ocfs2_remove_block_from_cache(ci, block); in ocfs2_remove_from_cache()
598 void ocfs2_remove_xattr_clusters_from_cache(struct ocfs2_caching_info *ci, in ocfs2_remove_xattr_clusters_from_cache() argument
602 struct super_block *sb = ocfs2_metadata_cache_get_super(ci); in ocfs2_remove_xattr_clusters_from_cache()
606 ocfs2_remove_block_from_cache(ci, block); in ocfs2_remove_xattr_clusters_from_cache()