Lines Matching refs:bt

116 static void relay_blktrace_event1(struct blk_trace *bt, unsigned long sequence,  in relay_blktrace_event1()  argument
124 t = relay_reserve(bt->rchan, trace_len); in relay_blktrace_event1()
132 record_blktrace_event(t, pid, cpu, sector, bytes, what, bt->dev, error, in relay_blktrace_event1()
136 static void relay_blktrace_event2(struct blk_trace *bt, unsigned long sequence, in relay_blktrace_event2() argument
144 t = relay_reserve(bt->rchan, trace_len); in relay_blktrace_event2()
152 record_blktrace_event2(t, pid, cpu, sector, bytes, what, bt->dev, error, in relay_blktrace_event2()
156 static void relay_blktrace_event(struct blk_trace *bt, unsigned long sequence, in relay_blktrace_event() argument
161 if (bt->version == 2) in relay_blktrace_event()
162 return relay_blktrace_event2(bt, sequence, pid, cpu, sector, in relay_blktrace_event()
165 return relay_blktrace_event1(bt, sequence, pid, cpu, sector, bytes, in relay_blktrace_event()
173 static void trace_note(struct blk_trace *bt, pid_t pid, u64 action, in trace_note() argument
196 action, bt->dev, 0, cgid, cgid_len, in trace_note()
202 if (!bt->rchan) in trace_note()
205 relay_blktrace_event(bt, 0, pid, cpu, 0, 0, action, 0, cgid, in trace_note()
216 struct blk_trace *bt; in trace_note_tsk() local
220 list_for_each_entry(bt, &running_trace_list, running_list) { in trace_note_tsk()
221 trace_note(bt, tsk->pid, BLK_TN_PROCESS, tsk->comm, in trace_note_tsk()
227 static void trace_note_time(struct blk_trace *bt) in trace_note_time() argument
239 trace_note(bt, 0, BLK_TN_TIMESTAMP, words, sizeof(words), 0); in trace_note_time()
243 void __blk_trace_note_message(struct blk_trace *bt, in __blk_trace_note_message() argument
252 if (unlikely(bt->trace_state != Blktrace_running && in __blk_trace_note_message()
260 if (!(bt->act_mask & BLK_TC_NOTIFY)) in __blk_trace_note_message()
264 buf = this_cpu_ptr(bt->msg_data); in __blk_trace_note_message()
275 trace_note(bt, current->pid, BLK_TN_MESSAGE, buf, n, cgid); in __blk_trace_note_message()
280 static int act_log_check(struct blk_trace *bt, u64 what, sector_t sector, in act_log_check() argument
283 if (((bt->act_mask << BLK_TC_SHIFT) & what) == 0) in act_log_check()
285 if (sector && (sector < bt->start_lba || sector > bt->end_lba)) in act_log_check()
287 if (bt->pid && pid != bt->pid) in act_log_check()
310 static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, in __blk_add_trace() argument
327 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) in __blk_add_trace()
371 if (bt->version == 1 && (what >> BLK_TC_SHIFT) > BLK_TC_END_V1) { in __blk_add_trace()
381 if (act_log_check(bt, what, sector, pid)) in __blk_add_trace()
390 switch (bt->version) { in __blk_add_trace()
412 if (bt->version == 0) in __blk_add_trace()
413 bt->version = 2; in __blk_add_trace()
422 switch (bt->version) { in __blk_add_trace()
426 what, bt->dev, error, cgid, cgid_len, in __blk_add_trace()
445 what, bt->dev, error, cgid, cgid_len, in __blk_add_trace()
463 sequence = per_cpu_ptr(bt->sequence, cpu); in __blk_add_trace()
465 relay_blktrace_event(bt, *sequence, pid, cpu, sector, bytes, in __blk_add_trace()
470 static void blk_trace_free(struct request_queue *q, struct blk_trace *bt) in blk_trace_free() argument
472 relay_close(bt->rchan); in blk_trace_free()
478 if (!bt->dir) { in blk_trace_free()
482 debugfs_remove(bt->dir); in blk_trace_free()
484 free_percpu(bt->sequence); in blk_trace_free()
485 free_percpu(bt->msg_data); in blk_trace_free()
486 kfree(bt); in blk_trace_free()
505 static int blk_trace_start(struct blk_trace *bt) in blk_trace_start() argument
507 if (bt->trace_state != Blktrace_setup && in blk_trace_start()
508 bt->trace_state != Blktrace_stopped) in blk_trace_start()
513 bt->trace_state = Blktrace_running; in blk_trace_start()
515 list_add(&bt->running_list, &running_trace_list); in blk_trace_start()
517 trace_note_time(bt); in blk_trace_start()
522 static int blk_trace_stop(struct blk_trace *bt) in blk_trace_stop() argument
524 if (bt->trace_state != Blktrace_running) in blk_trace_stop()
527 bt->trace_state = Blktrace_stopped; in blk_trace_stop()
529 list_del_init(&bt->running_list); in blk_trace_stop()
531 relay_flush(bt->rchan); in blk_trace_stop()
536 static void blk_trace_cleanup(struct request_queue *q, struct blk_trace *bt) in blk_trace_cleanup() argument
538 blk_trace_stop(bt); in blk_trace_cleanup()
540 blk_trace_free(q, bt); in blk_trace_cleanup()
546 struct blk_trace *bt; in __blk_trace_remove() local
548 bt = rcu_replace_pointer(q->blk_trace, NULL, in __blk_trace_remove()
550 if (!bt) in __blk_trace_remove()
553 blk_trace_cleanup(q, bt); in __blk_trace_remove()
573 struct blk_trace *bt = filp->private_data; in blk_dropped_read() local
574 size_t dropped = relay_stats(bt->rchan, RELAY_STATS_BUF_FULL); in blk_dropped_read()
593 struct blk_trace *bt; in blk_msg_write() local
602 bt = filp->private_data; in blk_msg_write()
603 __blk_trace_note_message(bt, NULL, "%s", msg); in blk_msg_write()
638 static void blk_trace_setup_lba(struct blk_trace *bt, in blk_trace_setup_lba() argument
642 bt->start_lba = bdev->bd_start_sect; in blk_trace_setup_lba()
643 bt->end_lba = bdev->bd_start_sect + bdev_nr_sectors(bdev); in blk_trace_setup_lba()
645 bt->start_lba = 0; in blk_trace_setup_lba()
646 bt->end_lba = -1ULL; in blk_trace_setup_lba()
658 struct blk_trace *bt = NULL; in blk_trace_setup_prepare() local
674 bt = kzalloc(sizeof(*bt), GFP_KERNEL); in blk_trace_setup_prepare()
675 if (!bt) in blk_trace_setup_prepare()
679 bt->sequence = alloc_percpu(unsigned long); in blk_trace_setup_prepare()
680 if (!bt->sequence) in blk_trace_setup_prepare()
683 bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG, __alignof__(char)); in blk_trace_setup_prepare()
684 if (!bt->msg_data) in blk_trace_setup_prepare()
696 bt->dir = dir = debugfs_create_dir(name, blk_debugfs_root); in blk_trace_setup_prepare()
709 bt->dev = dev; in blk_trace_setup_prepare()
710 INIT_LIST_HEAD(&bt->running_list); in blk_trace_setup_prepare()
713 debugfs_create_file("dropped", 0444, dir, bt, &blk_dropped_fops); in blk_trace_setup_prepare()
714 debugfs_create_file("msg", 0222, dir, bt, &blk_msg_fops); in blk_trace_setup_prepare()
716 bt->rchan = relay_open("trace", dir, buf_size, buf_nr, in blk_trace_setup_prepare()
717 &blk_relay_callbacks, bt); in blk_trace_setup_prepare()
718 if (!bt->rchan) in blk_trace_setup_prepare()
721 blk_trace_setup_lba(bt, bdev); in blk_trace_setup_prepare()
723 return bt; in blk_trace_setup_prepare()
726 blk_trace_free(q, bt); in blk_trace_setup_prepare()
733 struct blk_trace *bt, in blk_trace_setup_finalize() argument
745 bt->version = version; in blk_trace_setup_finalize()
746 bt->act_mask = buts->act_mask; in blk_trace_setup_finalize()
747 if (!bt->act_mask) in blk_trace_setup_finalize()
748 bt->act_mask = (u16) -1; in blk_trace_setup_finalize()
752 bt->start_lba = buts->start_lba; in blk_trace_setup_finalize()
754 bt->end_lba = buts->end_lba; in blk_trace_setup_finalize()
756 bt->pid = buts->pid; in blk_trace_setup_finalize()
757 bt->trace_state = Blktrace_setup; in blk_trace_setup_finalize()
759 rcu_assign_pointer(q->blk_trace, bt); in blk_trace_setup_finalize()
769 struct blk_trace *bt; in blk_trace_setup() local
789 bt = blk_trace_setup_prepare(q, name, dev, buts.buf_size, buts.buf_nr, in blk_trace_setup()
791 if (IS_ERR(bt)) { in blk_trace_setup()
793 return PTR_ERR(bt); in blk_trace_setup()
795 blk_trace_setup_finalize(q, name, 1, bt, &buts2); in blk_trace_setup()
811 struct blk_trace *bt; in blk_trace_setup2() local
823 bt = blk_trace_setup_prepare(q, name, dev, buts2.buf_size, buts2.buf_nr, in blk_trace_setup2()
825 if (IS_ERR(bt)) { in blk_trace_setup2()
827 return PTR_ERR(bt); in blk_trace_setup2()
829 blk_trace_setup_finalize(q, name, 2, bt, &buts2); in blk_trace_setup2()
846 struct blk_trace *bt; in compat_blk_trace_setup() local
864 bt = blk_trace_setup_prepare(q, name, dev, buts2.buf_size, buts2.buf_nr, in compat_blk_trace_setup()
866 if (IS_ERR(bt)) { in compat_blk_trace_setup()
868 return PTR_ERR(bt); in compat_blk_trace_setup()
870 blk_trace_setup_finalize(q, name, 1, bt, &buts2); in compat_blk_trace_setup()
884 struct blk_trace *bt; in __blk_trace_startstop() local
886 bt = rcu_dereference_protected(q->blk_trace, in __blk_trace_startstop()
888 if (bt == NULL) in __blk_trace_startstop()
892 return blk_trace_start(bt); in __blk_trace_startstop()
894 return blk_trace_stop(bt); in __blk_trace_startstop()
975 struct blk_trace *bt; in blk_trace_bio_get_cgid() local
978 bt = rcu_dereference_protected(q->blk_trace, 1); in blk_trace_bio_get_cgid()
979 if (!bt || !(blk_tracer_flags.val & TRACE_BLK_OPT_CGROUP)) in blk_trace_bio_get_cgid()
1022 struct blk_trace *bt; in blk_add_trace_rq() local
1025 bt = rcu_dereference(rq->q->blk_trace); in blk_add_trace_rq()
1026 if (likely(!bt)) { in blk_add_trace_rq()
1036 __blk_add_trace(bt, blk_rq_trace_sector(rq), nr_bytes, rq->cmd_flags, in blk_add_trace_rq()
1074 struct blk_trace *bt; in blk_add_trace_zone_update_request() local
1077 bt = rcu_dereference(rq->q->blk_trace); in blk_add_trace_zone_update_request()
1078 if (likely(!bt) || bt->version < 2) { in blk_add_trace_zone_update_request()
1102 struct blk_trace *bt; in blk_add_trace_bio() local
1105 bt = rcu_dereference(q->blk_trace); in blk_add_trace_bio()
1106 if (likely(!bt)) { in blk_add_trace_bio()
1111 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, in blk_add_trace_bio()
1148 struct blk_trace *bt; in blk_add_trace_plug() local
1151 bt = rcu_dereference(q->blk_trace); in blk_add_trace_plug()
1152 if (bt) in blk_add_trace_plug()
1153 __blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL, 0); in blk_add_trace_plug()
1160 struct blk_trace *bt; in blk_add_trace_unplug() local
1163 bt = rcu_dereference(q->blk_trace); in blk_add_trace_unplug()
1164 if (bt) { in blk_add_trace_unplug()
1173 __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu, 0); in blk_add_trace_unplug()
1182 struct blk_trace *bt; in blk_add_trace_zone_plug() local
1185 bt = rcu_dereference(q->blk_trace); in blk_add_trace_zone_plug()
1186 if (bt && bt->version >= 2) in blk_add_trace_zone_plug()
1187 __blk_add_trace(bt, sector, sectors << SECTOR_SHIFT, 0, in blk_add_trace_zone_plug()
1198 struct blk_trace *bt; in blk_add_trace_zone_unplug() local
1201 bt = rcu_dereference(q->blk_trace); in blk_add_trace_zone_unplug()
1202 if (bt && bt->version >= 2) in blk_add_trace_zone_unplug()
1203 __blk_add_trace(bt, sector, sectors << SECTOR_SHIFT, 0, in blk_add_trace_zone_unplug()
1212 struct blk_trace *bt; in blk_add_trace_split() local
1215 bt = rcu_dereference(q->blk_trace); in blk_add_trace_split()
1216 if (bt) { in blk_add_trace_split()
1219 __blk_add_trace(bt, bio->bi_iter.bi_sector, in blk_add_trace_split()
1241 struct blk_trace *bt; in blk_add_trace_bio_remap() local
1245 bt = rcu_dereference(q->blk_trace); in blk_add_trace_bio_remap()
1246 if (likely(!bt)) { in blk_add_trace_bio_remap()
1255 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, in blk_add_trace_bio_remap()
1277 struct blk_trace *bt; in blk_add_trace_rq_remap() local
1281 bt = rcu_dereference(rq->q->blk_trace); in blk_add_trace_rq_remap()
1282 if (likely(!bt)) { in blk_add_trace_rq_remap()
1291 __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), in blk_add_trace_rq_remap()
1309 struct blk_trace *bt; in blk_add_driver_data() local
1312 bt = rcu_dereference(rq->q->blk_trace); in blk_add_driver_data()
1313 if (likely(!bt)) { in blk_add_driver_data()
1318 __blk_add_trace(bt, blk_rq_trace_sector(rq), blk_rq_bytes(rq), 0, in blk_add_driver_data()
1859 struct blk_trace *bt; in blk_trace_remove_queue() local
1861 bt = rcu_replace_pointer(q->blk_trace, NULL, in blk_trace_remove_queue()
1863 if (bt == NULL) in blk_trace_remove_queue()
1866 blk_trace_stop(bt); in blk_trace_remove_queue()
1870 blk_trace_free(q, bt); in blk_trace_remove_queue()
1880 struct blk_trace *bt = NULL; in blk_trace_setup_queue() local
1883 bt = kzalloc(sizeof(*bt), GFP_KERNEL); in blk_trace_setup_queue()
1884 if (!bt) in blk_trace_setup_queue()
1887 bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG, __alignof__(char)); in blk_trace_setup_queue()
1888 if (!bt->msg_data) in blk_trace_setup_queue()
1891 bt->dev = bdev->bd_dev; in blk_trace_setup_queue()
1892 bt->act_mask = (u16)-1; in blk_trace_setup_queue()
1894 blk_trace_setup_lba(bt, bdev); in blk_trace_setup_queue()
1896 rcu_assign_pointer(q->blk_trace, bt); in blk_trace_setup_queue()
1901 blk_trace_free(q, bt); in blk_trace_setup_queue()
2020 struct blk_trace *bt; in sysfs_blk_trace_attr_show() local
2025 bt = rcu_dereference_protected(q->blk_trace, in sysfs_blk_trace_attr_show()
2028 ret = sprintf(buf, "%u\n", !!bt); in sysfs_blk_trace_attr_show()
2032 if (bt == NULL) in sysfs_blk_trace_attr_show()
2035 ret = blk_trace_mask2str(buf, bt->act_mask); in sysfs_blk_trace_attr_show()
2037 ret = sprintf(buf, "%u\n", bt->pid); in sysfs_blk_trace_attr_show()
2039 ret = sprintf(buf, "%llu\n", bt->start_lba); in sysfs_blk_trace_attr_show()
2041 ret = sprintf(buf, "%llu\n", bt->end_lba); in sysfs_blk_trace_attr_show()
2054 struct blk_trace *bt; in sysfs_blk_trace_attr_store() local
2076 bt = rcu_dereference_protected(q->blk_trace, in sysfs_blk_trace_attr_store()
2079 if (!!value == !!bt) { in sysfs_blk_trace_attr_store()
2091 if (bt == NULL) { in sysfs_blk_trace_attr_store()
2093 bt = rcu_dereference_protected(q->blk_trace, in sysfs_blk_trace_attr_store()
2099 bt->act_mask = value; in sysfs_blk_trace_attr_store()
2101 bt->pid = value; in sysfs_blk_trace_attr_store()
2103 bt->start_lba = value; in sysfs_blk_trace_attr_store()
2105 bt->end_lba = value; in sysfs_blk_trace_attr_store()