1*74e237b6SSantosh Pradhan /* SPDX-License-Identifier: GPL-2.0+ */ 2*74e237b6SSantosh Pradhan /* 3*74e237b6SSantosh Pradhan * RDMA Network Block Driver 4*74e237b6SSantosh Pradhan * 5*74e237b6SSantosh Pradhan * Copyright (c) 2022 1&1 IONOS SE. All rights reserved. 6*74e237b6SSantosh Pradhan */ 7*74e237b6SSantosh Pradhan #undef TRACE_SYSTEM 8*74e237b6SSantosh Pradhan #define TRACE_SYSTEM rnbd_srv 9*74e237b6SSantosh Pradhan 10*74e237b6SSantosh Pradhan #if !defined(_TRACE_RNBD_SRV_H) || defined(TRACE_HEADER_MULTI_READ) 11*74e237b6SSantosh Pradhan #define _TRACE_RNBD_SRV_H 12*74e237b6SSantosh Pradhan 13*74e237b6SSantosh Pradhan #include <linux/tracepoint.h> 14*74e237b6SSantosh Pradhan 15*74e237b6SSantosh Pradhan struct rnbd_srv_session; 16*74e237b6SSantosh Pradhan struct rtrs_srv_op; 17*74e237b6SSantosh Pradhan 18*74e237b6SSantosh Pradhan DECLARE_EVENT_CLASS(rnbd_srv_link_class, 19*74e237b6SSantosh Pradhan TP_PROTO(struct rnbd_srv_session *srv), 20*74e237b6SSantosh Pradhan 21*74e237b6SSantosh Pradhan TP_ARGS(srv), 22*74e237b6SSantosh Pradhan 23*74e237b6SSantosh Pradhan TP_STRUCT__entry( 24*74e237b6SSantosh Pradhan __field(int, qdepth) 25*74e237b6SSantosh Pradhan __string(sessname, srv->sessname) 26*74e237b6SSantosh Pradhan ), 27*74e237b6SSantosh Pradhan 28*74e237b6SSantosh Pradhan TP_fast_assign( 29*74e237b6SSantosh Pradhan __entry->qdepth = srv->queue_depth; 30*74e237b6SSantosh Pradhan __assign_str(sessname, srv->sessname); 31*74e237b6SSantosh Pradhan ), 32*74e237b6SSantosh Pradhan 33*74e237b6SSantosh Pradhan TP_printk("sessname: %s qdepth: %d", 34*74e237b6SSantosh Pradhan __get_str(sessname), 35*74e237b6SSantosh Pradhan __entry->qdepth 36*74e237b6SSantosh Pradhan ) 37*74e237b6SSantosh Pradhan ); 38*74e237b6SSantosh Pradhan 39*74e237b6SSantosh Pradhan #define DEFINE_LINK_EVENT(name) \ 40*74e237b6SSantosh Pradhan DEFINE_EVENT(rnbd_srv_link_class, name, \ 41*74e237b6SSantosh Pradhan TP_PROTO(struct rnbd_srv_session *srv), \ 42*74e237b6SSantosh Pradhan TP_ARGS(srv)) 43*74e237b6SSantosh Pradhan 44*74e237b6SSantosh Pradhan DEFINE_LINK_EVENT(create_sess); 45*74e237b6SSantosh Pradhan DEFINE_LINK_EVENT(destroy_sess); 46*74e237b6SSantosh Pradhan 47*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_READ); 48*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_WRITE); 49*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_FLUSH); 50*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_DISCARD); 51*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_SECURE_ERASE); 52*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_F_SYNC); 53*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_F_FUA); 54*74e237b6SSantosh Pradhan 55*74e237b6SSantosh Pradhan #define show_rnbd_rw_flags(x) \ 56*74e237b6SSantosh Pradhan __print_flags(x, "|", \ 57*74e237b6SSantosh Pradhan { RNBD_OP_READ, "READ" }, \ 58*74e237b6SSantosh Pradhan { RNBD_OP_WRITE, "WRITE" }, \ 59*74e237b6SSantosh Pradhan { RNBD_OP_FLUSH, "FLUSH" }, \ 60*74e237b6SSantosh Pradhan { RNBD_OP_DISCARD, "DISCARD" }, \ 61*74e237b6SSantosh Pradhan { RNBD_OP_SECURE_ERASE, "SECURE_ERASE" }, \ 62*74e237b6SSantosh Pradhan { RNBD_F_SYNC, "SYNC" }, \ 63*74e237b6SSantosh Pradhan { RNBD_F_FUA, "FUA" }) 64*74e237b6SSantosh Pradhan 65*74e237b6SSantosh Pradhan TRACE_EVENT(process_rdma, 66*74e237b6SSantosh Pradhan TP_PROTO(struct rnbd_srv_session *srv, 67*74e237b6SSantosh Pradhan const struct rnbd_msg_io *msg, 68*74e237b6SSantosh Pradhan struct rtrs_srv_op *id, 69*74e237b6SSantosh Pradhan u32 datalen, 70*74e237b6SSantosh Pradhan size_t usrlen), 71*74e237b6SSantosh Pradhan 72*74e237b6SSantosh Pradhan TP_ARGS(srv, msg, id, datalen, usrlen), 73*74e237b6SSantosh Pradhan 74*74e237b6SSantosh Pradhan TP_STRUCT__entry( 75*74e237b6SSantosh Pradhan __string(sessname, srv->sessname) 76*74e237b6SSantosh Pradhan __field(u8, dir) 77*74e237b6SSantosh Pradhan __field(u8, ver) 78*74e237b6SSantosh Pradhan __field(u32, device_id) 79*74e237b6SSantosh Pradhan __field(u64, sector) 80*74e237b6SSantosh Pradhan __field(u32, flags) 81*74e237b6SSantosh Pradhan __field(u32, bi_size) 82*74e237b6SSantosh Pradhan __field(u16, ioprio) 83*74e237b6SSantosh Pradhan __field(u32, datalen) 84*74e237b6SSantosh Pradhan __field(size_t, usrlen) 85*74e237b6SSantosh Pradhan ), 86*74e237b6SSantosh Pradhan 87*74e237b6SSantosh Pradhan TP_fast_assign( 88*74e237b6SSantosh Pradhan __assign_str(sessname, srv->sessname); 89*74e237b6SSantosh Pradhan __entry->dir = id->dir; 90*74e237b6SSantosh Pradhan __entry->ver = srv->ver; 91*74e237b6SSantosh Pradhan __entry->device_id = le32_to_cpu(msg->device_id); 92*74e237b6SSantosh Pradhan __entry->sector = le64_to_cpu(msg->sector); 93*74e237b6SSantosh Pradhan __entry->bi_size = le32_to_cpu(msg->bi_size); 94*74e237b6SSantosh Pradhan __entry->flags = le32_to_cpu(msg->rw); 95*74e237b6SSantosh Pradhan __entry->ioprio = le16_to_cpu(msg->prio); 96*74e237b6SSantosh Pradhan __entry->datalen = datalen; 97*74e237b6SSantosh Pradhan __entry->usrlen = usrlen; 98*74e237b6SSantosh Pradhan ), 99*74e237b6SSantosh Pradhan 100*74e237b6SSantosh Pradhan TP_printk("I/O req: sess: %s, type: %s, ver: %d, devid: %u, sector: %llu, bsize: %u, flags: %s, ioprio: %d, datalen: %u, usrlen: %zu", 101*74e237b6SSantosh Pradhan __get_str(sessname), 102*74e237b6SSantosh Pradhan __print_symbolic(__entry->dir, 103*74e237b6SSantosh Pradhan { READ, "READ" }, 104*74e237b6SSantosh Pradhan { WRITE, "WRITE" }), 105*74e237b6SSantosh Pradhan __entry->ver, 106*74e237b6SSantosh Pradhan __entry->device_id, 107*74e237b6SSantosh Pradhan __entry->sector, 108*74e237b6SSantosh Pradhan __entry->bi_size, 109*74e237b6SSantosh Pradhan show_rnbd_rw_flags(__entry->flags), 110*74e237b6SSantosh Pradhan __entry->ioprio, 111*74e237b6SSantosh Pradhan __entry->datalen, 112*74e237b6SSantosh Pradhan __entry->usrlen 113*74e237b6SSantosh Pradhan ) 114*74e237b6SSantosh Pradhan ); 115*74e237b6SSantosh Pradhan 116*74e237b6SSantosh Pradhan TRACE_EVENT(process_msg_sess_info, 117*74e237b6SSantosh Pradhan TP_PROTO(struct rnbd_srv_session *srv, 118*74e237b6SSantosh Pradhan const struct rnbd_msg_sess_info *msg), 119*74e237b6SSantosh Pradhan 120*74e237b6SSantosh Pradhan TP_ARGS(srv, msg), 121*74e237b6SSantosh Pradhan 122*74e237b6SSantosh Pradhan TP_STRUCT__entry( 123*74e237b6SSantosh Pradhan __field(u8, proto_ver) 124*74e237b6SSantosh Pradhan __field(u8, clt_ver) 125*74e237b6SSantosh Pradhan __field(u8, srv_ver) 126*74e237b6SSantosh Pradhan __string(sessname, srv->sessname) 127*74e237b6SSantosh Pradhan ), 128*74e237b6SSantosh Pradhan 129*74e237b6SSantosh Pradhan TP_fast_assign( 130*74e237b6SSantosh Pradhan __entry->proto_ver = srv->ver; 131*74e237b6SSantosh Pradhan __entry->clt_ver = msg->ver; 132*74e237b6SSantosh Pradhan __entry->srv_ver = RNBD_PROTO_VER_MAJOR; 133*74e237b6SSantosh Pradhan __assign_str(sessname, srv->sessname); 134*74e237b6SSantosh Pradhan ), 135*74e237b6SSantosh Pradhan 136*74e237b6SSantosh Pradhan TP_printk("Session %s using proto-ver %d (clt-ver: %d, srv-ver: %d)", 137*74e237b6SSantosh Pradhan __get_str(sessname), 138*74e237b6SSantosh Pradhan __entry->proto_ver, 139*74e237b6SSantosh Pradhan __entry->clt_ver, 140*74e237b6SSantosh Pradhan __entry->srv_ver 141*74e237b6SSantosh Pradhan ) 142*74e237b6SSantosh Pradhan ); 143*74e237b6SSantosh Pradhan 144*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_ACCESS_RO); 145*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_ACCESS_RW); 146*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_ACCESS_MIGRATION); 147*74e237b6SSantosh Pradhan 148*74e237b6SSantosh Pradhan #define show_rnbd_access_mode(x) \ 149*74e237b6SSantosh Pradhan __print_symbolic(x, \ 150*74e237b6SSantosh Pradhan { RNBD_ACCESS_RO, "RO" }, \ 151*74e237b6SSantosh Pradhan { RNBD_ACCESS_RW, "RW" }, \ 152*74e237b6SSantosh Pradhan { RNBD_ACCESS_MIGRATION, "MIGRATION" }) 153*74e237b6SSantosh Pradhan 154*74e237b6SSantosh Pradhan TRACE_EVENT(process_msg_open, 155*74e237b6SSantosh Pradhan TP_PROTO(struct rnbd_srv_session *srv, 156*74e237b6SSantosh Pradhan const struct rnbd_msg_open *msg), 157*74e237b6SSantosh Pradhan 158*74e237b6SSantosh Pradhan TP_ARGS(srv, msg), 159*74e237b6SSantosh Pradhan 160*74e237b6SSantosh Pradhan TP_STRUCT__entry( 161*74e237b6SSantosh Pradhan __field(u8, access_mode) 162*74e237b6SSantosh Pradhan __string(sessname, srv->sessname) 163*74e237b6SSantosh Pradhan __string(dev_name, msg->dev_name) 164*74e237b6SSantosh Pradhan ), 165*74e237b6SSantosh Pradhan 166*74e237b6SSantosh Pradhan TP_fast_assign( 167*74e237b6SSantosh Pradhan __entry->access_mode = msg->access_mode; 168*74e237b6SSantosh Pradhan __assign_str(sessname, srv->sessname); 169*74e237b6SSantosh Pradhan __assign_str(dev_name, msg->dev_name); 170*74e237b6SSantosh Pradhan ), 171*74e237b6SSantosh Pradhan 172*74e237b6SSantosh Pradhan TP_printk("Open message received: session='%s' path='%s' access_mode=%s", 173*74e237b6SSantosh Pradhan __get_str(sessname), 174*74e237b6SSantosh Pradhan __get_str(dev_name), 175*74e237b6SSantosh Pradhan show_rnbd_access_mode(__entry->access_mode) 176*74e237b6SSantosh Pradhan ) 177*74e237b6SSantosh Pradhan ); 178*74e237b6SSantosh Pradhan 179*74e237b6SSantosh Pradhan TRACE_EVENT(process_msg_close, 180*74e237b6SSantosh Pradhan TP_PROTO(struct rnbd_srv_session *srv, 181*74e237b6SSantosh Pradhan const struct rnbd_msg_close *msg), 182*74e237b6SSantosh Pradhan 183*74e237b6SSantosh Pradhan TP_ARGS(srv, msg), 184*74e237b6SSantosh Pradhan 185*74e237b6SSantosh Pradhan TP_STRUCT__entry( 186*74e237b6SSantosh Pradhan __field(u32, device_id) 187*74e237b6SSantosh Pradhan __string(sessname, srv->sessname) 188*74e237b6SSantosh Pradhan ), 189*74e237b6SSantosh Pradhan 190*74e237b6SSantosh Pradhan TP_fast_assign( 191*74e237b6SSantosh Pradhan __entry->device_id = le32_to_cpu(msg->device_id); 192*74e237b6SSantosh Pradhan __assign_str(sessname, srv->sessname); 193*74e237b6SSantosh Pradhan ), 194*74e237b6SSantosh Pradhan 195*74e237b6SSantosh Pradhan TP_printk("Close message received: session='%s' device id='%d'", 196*74e237b6SSantosh Pradhan __get_str(sessname), 197*74e237b6SSantosh Pradhan __entry->device_id 198*74e237b6SSantosh Pradhan ) 199*74e237b6SSantosh Pradhan ); 200*74e237b6SSantosh Pradhan 201*74e237b6SSantosh Pradhan #endif /* _TRACE_RNBD_SRV_H */ 202*74e237b6SSantosh Pradhan 203*74e237b6SSantosh Pradhan #undef TRACE_INCLUDE_PATH 204*74e237b6SSantosh Pradhan #define TRACE_INCLUDE_PATH . 205*74e237b6SSantosh Pradhan #define TRACE_INCLUDE_FILE rnbd-srv-trace 206*74e237b6SSantosh Pradhan #include <trace/define_trace.h> 207*74e237b6SSantosh Pradhan 208