Lines Matching refs:tracker
36 void ceph_subvolume_metrics_init(struct ceph_subvolume_metrics_tracker *tracker) in ceph_subvolume_metrics_init() argument
38 spin_lock_init(&tracker->lock); in ceph_subvolume_metrics_init()
39 tracker->tree = RB_ROOT_CACHED; in ceph_subvolume_metrics_init()
40 tracker->nr_entries = 0; in ceph_subvolume_metrics_init()
41 tracker->enabled = false; in ceph_subvolume_metrics_init()
42 atomic64_set(&tracker->snapshot_attempts, 0); in ceph_subvolume_metrics_init()
43 atomic64_set(&tracker->snapshot_empty, 0); in ceph_subvolume_metrics_init()
44 atomic64_set(&tracker->snapshot_failures, 0); in ceph_subvolume_metrics_init()
45 atomic64_set(&tracker->record_calls, 0); in ceph_subvolume_metrics_init()
46 atomic64_set(&tracker->record_disabled, 0); in ceph_subvolume_metrics_init()
47 atomic64_set(&tracker->record_no_subvol, 0); in ceph_subvolume_metrics_init()
48 atomic64_set(&tracker->total_read_ops, 0); in ceph_subvolume_metrics_init()
49 atomic64_set(&tracker->total_read_bytes, 0); in ceph_subvolume_metrics_init()
50 atomic64_set(&tracker->total_write_ops, 0); in ceph_subvolume_metrics_init()
51 atomic64_set(&tracker->total_write_bytes, 0); in ceph_subvolume_metrics_init()
55 __lookup_entry(struct ceph_subvolume_metrics_tracker *tracker, u64 subvol_id) in __lookup_entry() argument
59 node = tracker->tree.rb_root.rb_node; in __lookup_entry()
76 __insert_entry(struct ceph_subvolume_metrics_tracker *tracker, in __insert_entry() argument
79 struct rb_node **link = &tracker->tree.rb_root.rb_node; in __insert_entry()
98 rb_insert_color_cached(&entry->node, &tracker->tree, leftmost); in __insert_entry()
99 tracker->nr_entries++; in __insert_entry()
104 struct ceph_subvolume_metrics_tracker *tracker) in ceph_subvolume_metrics_clear_locked() argument
106 struct rb_node *node = rb_first_cached(&tracker->tree); in ceph_subvolume_metrics_clear_locked()
113 rb_erase_cached(&entry->node, &tracker->tree); in ceph_subvolume_metrics_clear_locked()
114 tracker->nr_entries--; in ceph_subvolume_metrics_clear_locked()
119 tracker->tree = RB_ROOT_CACHED; in ceph_subvolume_metrics_clear_locked()
122 void ceph_subvolume_metrics_destroy(struct ceph_subvolume_metrics_tracker *tracker) in ceph_subvolume_metrics_destroy() argument
124 spin_lock(&tracker->lock); in ceph_subvolume_metrics_destroy()
125 ceph_subvolume_metrics_clear_locked(tracker); in ceph_subvolume_metrics_destroy()
126 tracker->enabled = false; in ceph_subvolume_metrics_destroy()
127 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_destroy()
130 void ceph_subvolume_metrics_enable(struct ceph_subvolume_metrics_tracker *tracker, in ceph_subvolume_metrics_enable() argument
133 spin_lock(&tracker->lock); in ceph_subvolume_metrics_enable()
135 tracker->enabled = true; in ceph_subvolume_metrics_enable()
137 tracker->enabled = false; in ceph_subvolume_metrics_enable()
138 ceph_subvolume_metrics_clear_locked(tracker); in ceph_subvolume_metrics_enable()
140 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_enable()
143 void ceph_subvolume_metrics_record(struct ceph_subvolume_metrics_tracker *tracker, in ceph_subvolume_metrics_record() argument
151 if (!READ_ONCE(tracker->enabled) || in ceph_subvolume_metrics_record()
163 spin_lock(&tracker->lock); in ceph_subvolume_metrics_record()
164 if (!tracker->enabled) { in ceph_subvolume_metrics_record()
165 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_record()
171 entry = __lookup_entry(tracker, subvol_id); in ceph_subvolume_metrics_record()
174 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_record()
183 entry = __insert_entry(tracker, new_entry); in ceph_subvolume_metrics_record()
186 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_record()
199 atomic64_inc(&tracker->total_write_ops); in ceph_subvolume_metrics_record()
200 atomic64_add(size, &tracker->total_write_bytes); in ceph_subvolume_metrics_record()
205 atomic64_inc(&tracker->total_read_ops); in ceph_subvolume_metrics_record()
206 atomic64_add(size, &tracker->total_read_bytes); in ceph_subvolume_metrics_record()
208 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_record()
215 int ceph_subvolume_metrics_snapshot(struct ceph_subvolume_metrics_tracker *tracker, in ceph_subvolume_metrics_snapshot() argument
227 if (!READ_ONCE(tracker->enabled)) in ceph_subvolume_metrics_snapshot()
230 atomic64_inc(&tracker->snapshot_attempts); in ceph_subvolume_metrics_snapshot()
232 spin_lock(&tracker->lock); in ceph_subvolume_metrics_snapshot()
233 for (node = rb_first_cached(&tracker->tree); node; node = rb_next(node)) { in ceph_subvolume_metrics_snapshot()
241 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_snapshot()
244 atomic64_inc(&tracker->snapshot_empty); in ceph_subvolume_metrics_snapshot()
250 atomic64_inc(&tracker->snapshot_failures); in ceph_subvolume_metrics_snapshot()
254 spin_lock(&tracker->lock); in ceph_subvolume_metrics_snapshot()
255 node = rb_first_cached(&tracker->tree); in ceph_subvolume_metrics_snapshot()
263 rb_erase_cached(&entry->node, &tracker->tree); in ceph_subvolume_metrics_snapshot()
264 tracker->nr_entries--; in ceph_subvolume_metrics_snapshot()
292 rb_erase_cached(&entry->node, &tracker->tree); in ceph_subvolume_metrics_snapshot()
293 tracker->nr_entries--; in ceph_subvolume_metrics_snapshot()
298 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_snapshot()
323 void ceph_subvolume_metrics_dump(struct ceph_subvolume_metrics_tracker *tracker, in ceph_subvolume_metrics_dump() argument
329 spin_lock(&tracker->lock); in ceph_subvolume_metrics_dump()
330 if (!tracker->enabled) { in ceph_subvolume_metrics_dump()
331 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_dump()
336 for (node = rb_first_cached(&tracker->tree); node; node = rb_next(node)) { in ceph_subvolume_metrics_dump()
364 spin_unlock(&tracker->lock); in ceph_subvolume_metrics_dump()
375 struct ceph_subvolume_metrics_tracker *tracker; in ceph_subvolume_metrics_record_io() local
382 tracker = &mdsc->subvol_metrics; in ceph_subvolume_metrics_record_io()
383 atomic64_inc(&tracker->record_calls); in ceph_subvolume_metrics_record_io()
385 if (!ceph_subvolume_metrics_enabled(tracker)) { in ceph_subvolume_metrics_record_io()
386 atomic64_inc(&tracker->record_disabled); in ceph_subvolume_metrics_record_io()
392 atomic64_inc(&tracker->record_no_subvol); in ceph_subvolume_metrics_record_io()
400 ceph_subvolume_metrics_record(tracker, subvol_id, is_write, in ceph_subvolume_metrics_record_io()