Lines Matching full:bt

69 static void trace_note(struct blk_trace *bt, pid_t pid, int action,
92 if (!bt->rchan)
95 t = relay_reserve(bt->rchan, sizeof(*t) + len + cgid_len);
100 t->device = bt->dev;
121 struct blk_trace *bt;
125 list_for_each_entry(bt, &running_trace_list, running_list) {
126 trace_note(bt, tsk->pid, BLK_TN_PROCESS, tsk->comm,
132 static void trace_note_time(struct blk_trace *bt)
144 trace_note(bt, 0, BLK_TN_TIMESTAMP, words, sizeof(words), 0);
148 void __blk_trace_note_message(struct blk_trace *bt,
157 if (unlikely(bt->trace_state != Blktrace_running &&
165 if (!(bt->act_mask & BLK_TC_NOTIFY))
169 buf = this_cpu_ptr(bt->msg_data);
180 trace_note(bt, current->pid, BLK_TN_MESSAGE, buf, n, cgid);
185 static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector,
188 if (((bt->act_mask << BLK_TC_SHIFT) & what) == 0)
190 if (sector && (sector < bt->start_lba || sector > bt->end_lba))
192 if (bt->pid && pid != bt->pid)
215 static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
232 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
249 if (act_log_check(bt, what, sector, pid))
276 t = relay_reserve(bt->rchan, sizeof(*t) + pdu_len + cgid_len);
278 sequence = per_cpu_ptr(bt->sequence, cpu);
296 t->device = bt->dev;
314 static void blk_trace_free(struct request_queue *q, struct blk_trace *bt)
316 relay_close(bt->rchan);
319 * If 'bt->dir' is not set, then both 'dropped' and 'msg' are created
322 if (!bt->dir) {
326 debugfs_remove(bt->dir);
328 free_percpu(bt->sequence);
329 free_percpu(bt->msg_data);
330 kfree(bt);
349 static int blk_trace_start(struct blk_trace *bt)
351 if (bt->trace_state != Blktrace_setup &&
352 bt->trace_state != Blktrace_stopped)
357 bt->trace_state = Blktrace_running;
359 list_add(&bt->running_list, &running_trace_list);
361 trace_note_time(bt);
366 static int blk_trace_stop(struct blk_trace *bt)
368 if (bt->trace_state != Blktrace_running)
371 bt->trace_state = Blktrace_stopped;
373 list_del_init(&bt->running_list);
375 relay_flush(bt->rchan);
380 static void blk_trace_cleanup(struct request_queue *q, struct blk_trace *bt)
382 blk_trace_stop(bt);
384 blk_trace_free(q, bt);
390 struct blk_trace *bt;
392 bt = rcu_replace_pointer(q->blk_trace, NULL,
394 if (!bt)
397 blk_trace_cleanup(q, bt);
417 struct blk_trace *bt = filp->private_data;
420 snprintf(buf, sizeof(buf), "%u\n", atomic_read(&bt->dropped));
436 struct blk_trace *bt;
445 bt = filp->private_data;
446 __blk_trace_note_message(bt, NULL, "%s", msg);
466 struct blk_trace *bt;
471 bt = buf->chan->private_data;
472 atomic_inc(&bt->dropped);
499 static void blk_trace_setup_lba(struct blk_trace *bt,
503 bt->start_lba = bdev->bd_start_sect;
504 bt->end_lba = bdev->bd_start_sect + bdev_nr_sectors(bdev);
506 bt->start_lba = 0;
507 bt->end_lba = -1ULL;
518 struct blk_trace *bt = NULL;
546 bt = kzalloc(sizeof(*bt), GFP_KERNEL);
547 if (!bt)
551 bt->sequence = alloc_percpu(unsigned long);
552 if (!bt->sequence)
555 bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG, __alignof__(char));
556 if (!bt->msg_data)
568 bt->dir = dir = debugfs_create_dir(buts->name, blk_debugfs_root);
582 bt->dev = dev;
583 atomic_set(&bt->dropped, 0);
584 INIT_LIST_HEAD(&bt->running_list);
587 debugfs_create_file("dropped", 0444, dir, bt, &blk_dropped_fops);
588 debugfs_create_file("msg", 0222, dir, bt, &blk_msg_fops);
590 bt->rchan = relay_open("trace", dir, buts->buf_size,
591 buts->buf_nr, &blk_relay_callbacks, bt);
592 if (!bt->rchan)
595 bt->act_mask = buts->act_mask;
596 if (!bt->act_mask)
597 bt->act_mask = (u16) -1;
599 blk_trace_setup_lba(bt, bdev);
603 bt->start_lba = buts->start_lba;
605 bt->end_lba = buts->end_lba;
607 bt->pid = buts->pid;
608 bt->trace_state = Blktrace_setup;
610 rcu_assign_pointer(q->blk_trace, bt);
616 blk_trace_free(q, bt);
691 struct blk_trace *bt;
693 bt = rcu_dereference_protected(q->blk_trace,
695 if (bt == NULL)
699 return blk_trace_start(bt);
701 return blk_trace_stop(bt);
782 struct blk_trace *bt;
784 /* We don't use the 'bt' value here except as an optimization... */
785 bt = rcu_dereference_protected(q->blk_trace, 1);
786 if (!bt || !(blk_tracer_flags.val & TRACE_BLK_OPT_CGROUP))
829 struct blk_trace *bt;
832 bt = rcu_dereference(rq->q->blk_trace);
833 if (likely(!bt)) {
843 __blk_add_trace(bt, blk_rq_trace_sector(rq), nr_bytes, rq->cmd_flags,
893 struct blk_trace *bt;
896 bt = rcu_dereference(q->blk_trace);
897 if (likely(!bt)) {
902 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
944 struct blk_trace *bt;
947 bt = rcu_dereference(q->blk_trace);
948 if (bt)
949 __blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL, 0);
956 struct blk_trace *bt;
959 bt = rcu_dereference(q->blk_trace);
960 if (bt) {
969 __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu, 0);
977 struct blk_trace *bt;
980 bt = rcu_dereference(q->blk_trace);
981 if (bt) {
984 __blk_add_trace(bt, bio->bi_iter.bi_sector,
1006 struct blk_trace *bt;
1010 bt = rcu_dereference(q->blk_trace);
1011 if (likely(!bt)) {
1020 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
1042 struct blk_trace *bt;
1046 bt = rcu_dereference(rq->q->blk_trace);
1047 if (likely(!bt)) {
1056 __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq),
1074 struct blk_trace *bt;
1077 bt = rcu_dereference(rq->q->blk_trace);
1078 if (likely(!bt)) {
1083 __blk_add_trace(bt, blk_rq_trace_sector(rq), blk_rq_bytes(rq), 0,
1608 struct blk_trace *bt;
1610 bt = rcu_replace_pointer(q->blk_trace, NULL,
1612 if (bt == NULL)
1615 blk_trace_stop(bt);
1619 blk_trace_free(q, bt);
1629 struct blk_trace *bt = NULL;
1632 bt = kzalloc(sizeof(*bt), GFP_KERNEL);
1633 if (!bt)
1636 bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG, __alignof__(char));
1637 if (!bt->msg_data)
1640 bt->dev = bdev->bd_dev;
1641 bt->act_mask = (u16)-1;
1643 blk_trace_setup_lba(bt, bdev);
1645 rcu_assign_pointer(q->blk_trace, bt);
1650 blk_trace_free(q, bt);
1768 struct blk_trace *bt;
1773 bt = rcu_dereference_protected(q->blk_trace,
1776 ret = sprintf(buf, "%u\n", !!bt);
1780 if (bt == NULL)
1783 ret = blk_trace_mask2str(buf, bt->act_mask);
1785 ret = sprintf(buf, "%u\n", bt->pid);
1787 ret = sprintf(buf, "%llu\n", bt->start_lba);
1789 ret = sprintf(buf, "%llu\n", bt->end_lba);
1802 struct blk_trace *bt;
1824 bt = rcu_dereference_protected(q->blk_trace,
1827 if (!!value == !!bt) {
1839 if (bt == NULL) {
1841 bt = rcu_dereference_protected(q->blk_trace,
1847 bt->act_mask = value;
1849 bt->pid = value;
1851 bt->start_lba = value;
1853 bt->end_lba = value;