diff options
| -rw-r--r-- | drivers/block/nbd.c | 8 | ||||
| -rw-r--r-- | include/trace/events/nbd.h | 51 |
2 files changed, 59 insertions, 0 deletions
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 24cc10d1f0b4..3e6c3d5dadc8 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c | |||
| @@ -513,6 +513,10 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index) | |||
| 513 | if (sent) { | 513 | if (sent) { |
| 514 | if (sent >= sizeof(request)) { | 514 | if (sent >= sizeof(request)) { |
| 515 | skip = sent - sizeof(request); | 515 | skip = sent - sizeof(request); |
| 516 | |||
| 517 | /* initialize handle for tracing purposes */ | ||
| 518 | handle = nbd_cmd_handle(cmd); | ||
| 519 | |||
| 516 | goto send_pages; | 520 | goto send_pages; |
| 517 | } | 521 | } |
| 518 | iov_iter_advance(&from, sent); | 522 | iov_iter_advance(&from, sent); |
| @@ -536,6 +540,7 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index) | |||
| 536 | (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req)); | 540 | (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req)); |
| 537 | result = sock_xmit(nbd, index, 1, &from, | 541 | result = sock_xmit(nbd, index, 1, &from, |
| 538 | (type == NBD_CMD_WRITE) ? MSG_MORE : 0, &sent); | 542 | (type == NBD_CMD_WRITE) ? MSG_MORE : 0, &sent); |
| 543 | trace_nbd_header_sent(req, handle); | ||
| 539 | if (result <= 0) { | 544 | if (result <= 0) { |
| 540 | if (was_interrupted(result)) { | 545 | if (was_interrupted(result)) { |
| 541 | /* If we havne't sent anything we can just return BUSY, | 546 | /* If we havne't sent anything we can just return BUSY, |
| @@ -608,6 +613,7 @@ send_pages: | |||
| 608 | bio = next; | 613 | bio = next; |
| 609 | } | 614 | } |
| 610 | out: | 615 | out: |
| 616 | trace_nbd_payload_sent(req, handle); | ||
| 611 | nsock->pending = NULL; | 617 | nsock->pending = NULL; |
| 612 | nsock->sent = 0; | 618 | nsock->sent = 0; |
| 613 | return 0; | 619 | return 0; |
| @@ -655,6 +661,7 @@ static struct nbd_cmd *nbd_read_stat(struct nbd_device *nbd, int index) | |||
| 655 | tag, req); | 661 | tag, req); |
| 656 | return ERR_PTR(-ENOENT); | 662 | return ERR_PTR(-ENOENT); |
| 657 | } | 663 | } |
| 664 | trace_nbd_header_received(req, handle); | ||
| 658 | cmd = blk_mq_rq_to_pdu(req); | 665 | cmd = blk_mq_rq_to_pdu(req); |
| 659 | 666 | ||
| 660 | mutex_lock(&cmd->lock); | 667 | mutex_lock(&cmd->lock); |
| @@ -708,6 +715,7 @@ static struct nbd_cmd *nbd_read_stat(struct nbd_device *nbd, int index) | |||
| 708 | } | 715 | } |
| 709 | } | 716 | } |
| 710 | out: | 717 | out: |
| 718 | trace_nbd_payload_received(req, handle); | ||
| 711 | mutex_unlock(&cmd->lock); | 719 | mutex_unlock(&cmd->lock); |
| 712 | return ret ? ERR_PTR(ret) : cmd; | 720 | return ret ? ERR_PTR(ret) : cmd; |
| 713 | } | 721 | } |
diff --git a/include/trace/events/nbd.h b/include/trace/events/nbd.h index 5928255ed02e..9849956f34d8 100644 --- a/include/trace/events/nbd.h +++ b/include/trace/events/nbd.h | |||
| @@ -7,6 +7,57 @@ | |||
| 7 | 7 | ||
| 8 | #include <linux/tracepoint.h> | 8 | #include <linux/tracepoint.h> |
| 9 | 9 | ||
| 10 | DECLARE_EVENT_CLASS(nbd_transport_event, | ||
| 11 | |||
| 12 | TP_PROTO(struct request *req, u64 handle), | ||
| 13 | |||
| 14 | TP_ARGS(req, handle), | ||
| 15 | |||
| 16 | TP_STRUCT__entry( | ||
| 17 | __field(struct request *, req) | ||
| 18 | __field(u64, handle) | ||
| 19 | ), | ||
| 20 | |||
| 21 | TP_fast_assign( | ||
| 22 | __entry->req = req; | ||
| 23 | __entry->handle = handle; | ||
| 24 | ), | ||
| 25 | |||
| 26 | TP_printk( | ||
| 27 | "nbd transport event: request %p, handle 0x%016llx", | ||
| 28 | __entry->req, | ||
| 29 | __entry->handle | ||
| 30 | ) | ||
| 31 | ); | ||
| 32 | |||
| 33 | DEFINE_EVENT(nbd_transport_event, nbd_header_sent, | ||
| 34 | |||
| 35 | TP_PROTO(struct request *req, u64 handle), | ||
| 36 | |||
| 37 | TP_ARGS(req, handle) | ||
| 38 | ); | ||
| 39 | |||
| 40 | DEFINE_EVENT(nbd_transport_event, nbd_payload_sent, | ||
| 41 | |||
| 42 | TP_PROTO(struct request *req, u64 handle), | ||
| 43 | |||
| 44 | TP_ARGS(req, handle) | ||
| 45 | ); | ||
| 46 | |||
| 47 | DEFINE_EVENT(nbd_transport_event, nbd_header_received, | ||
| 48 | |||
| 49 | TP_PROTO(struct request *req, u64 handle), | ||
| 50 | |||
| 51 | TP_ARGS(req, handle) | ||
| 52 | ); | ||
| 53 | |||
| 54 | DEFINE_EVENT(nbd_transport_event, nbd_payload_received, | ||
| 55 | |||
| 56 | TP_PROTO(struct request *req, u64 handle), | ||
| 57 | |||
| 58 | TP_ARGS(req, handle) | ||
| 59 | ); | ||
| 60 | |||
| 10 | DECLARE_EVENT_CLASS(nbd_send_request, | 61 | DECLARE_EVENT_CLASS(nbd_send_request, |
| 11 | 62 | ||
| 12 | TP_PROTO(struct nbd_request *nbd_request, int index, | 63 | TP_PROTO(struct nbd_request *nbd_request, int index, |
