@@ -2861,10 +2861,16 @@ nvmf_tcp_check_fused_ordering(struct spdk_nvmf_tcp_transport *ttransport,
2861
2861
}
2862
2862
}
2863
2863
2864
- static void check_time (struct spdk_nvmf_tcp_req * tcp_req ) {
2865
- if (!tcp_req -> loged && tcp_req -> time ) {
2866
- if (spdk_get_ticks () - tcp_req -> time > spdk_get_ticks_hz () * 2 ){
2867
- SPDK_NOTICELOG ("tcp_req ttag %d, tcp_req \n" , tcp_req -> ttag );
2864
+ static void
2865
+ check_time (struct spdk_nvmf_tcp_req * tcp_req , struct spdk_nvmf_tcp_qpair * tqpair ) {
2866
+ if (!tcp_req -> loged && tcp_req -> time && (tqpair -> target_port <= 9099 && tqpair -> target_port >= 9090 )) {
2867
+ // if (spdk_get_ticks() - tcp_req->time > spdk_get_ticks_hz() && tqpair->qpair.qid) {
2868
+ if (spdk_get_ticks () - tcp_req -> time > spdk_get_ticks_hz ()) {
2869
+ SPDK_NOTICELOG ("tcp_req ttag %d (QID %d) cport %d sport %d\n" , tcp_req -> ttag , tqpair -> qpair .qid , tqpair -> initiator_port , tqpair -> target_port );
2870
+ spdk_nvme_print_command_s (tqpair -> qpair .qid , & tcp_req -> cmd );
2871
+ if (tqpair -> qpair .qid ) {
2872
+ nvmf_tcp_dump_qpair_req_contents (tqpair );
2873
+ }
2868
2874
tcp_req -> loged = false;
2869
2875
}
2870
2876
}
@@ -2960,7 +2966,7 @@ nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport,
2960
2966
case TCP_REQUEST_STATE_NEED_BUFFER :
2961
2967
spdk_trace_record (TRACE_TCP_REQUEST_STATE_NEED_BUFFER , tqpair -> qpair .trace_id , 0 ,
2962
2968
(uintptr_t )tcp_req );
2963
- check_time (tcp_req );
2969
+ check_time (tcp_req , tqpair );
2964
2970
2965
2971
assert (tcp_req -> req .xfer != SPDK_NVME_DATA_NONE );
2966
2972
@@ -3027,12 +3033,12 @@ nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport,
3027
3033
(uintptr_t )tcp_req );
3028
3034
/* Some external code must kick a request into TCP_REQUEST_STATE_ZCOPY_START_COMPLETED
3029
3035
* to escape this state. */
3030
- check_time (tcp_req );
3036
+ check_time (tcp_req , tqpair );
3031
3037
break ;
3032
3038
case TCP_REQUEST_STATE_ZCOPY_START_COMPLETED :
3033
3039
spdk_trace_record (TRACE_TCP_REQUEST_STATE_ZCOPY_START_COMPLETED , tqpair -> qpair .trace_id , 0 ,
3034
3040
(uintptr_t )tcp_req );
3035
- check_time (tcp_req );
3041
+ check_time (tcp_req , tqpair );
3036
3042
if (spdk_unlikely (spdk_nvme_cpl_is_error (& tcp_req -> req .rsp -> nvme_cpl ))) {
3037
3043
SPDK_DEBUGLOG (nvmf_tcp , "Zero-copy start failed for tcp_req(%p) on tqpair=%p\n" ,
3038
3044
tcp_req , tqpair );
@@ -3049,7 +3055,7 @@ nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport,
3049
3055
case TCP_REQUEST_STATE_AWAITING_R2T_ACK :
3050
3056
spdk_trace_record (TRACE_TCP_REQUEST_STATE_AWAIT_R2T_ACK , tqpair -> qpair .trace_id , 0 ,
3051
3057
(uintptr_t )tcp_req );
3052
- check_time (tcp_req );
3058
+ check_time (tcp_req , tqpair );
3053
3059
/* The R2T completion or the h2c data incoming will kick it out of this state. */
3054
3060
break ;
3055
3061
case TCP_REQUEST_STATE_TRANSFERRING_HOST_TO_CONTROLLER :
@@ -3058,12 +3064,12 @@ nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport,
3058
3064
0 , (uintptr_t )tcp_req );
3059
3065
/* Some external code must kick a request into TCP_REQUEST_STATE_READY_TO_EXECUTE
3060
3066
* to escape this state. */
3061
- check_time (tcp_req );
3067
+ check_time (tcp_req , tqpair );
3062
3068
break ;
3063
3069
case TCP_REQUEST_STATE_READY_TO_EXECUTE :
3064
3070
spdk_trace_record (TRACE_TCP_REQUEST_STATE_READY_TO_EXECUTE , tqpair -> qpair .trace_id , 0 ,
3065
3071
(uintptr_t )tcp_req );
3066
- check_time (tcp_req );
3072
+ check_time (tcp_req , tqpair );
3067
3073
3068
3074
if (spdk_unlikely (tcp_req -> req .dif_enabled )) {
3069
3075
assert (tcp_req -> req .dif .elba_length >= tcp_req -> req .length );
@@ -3131,28 +3137,28 @@ nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport,
3131
3137
spdk_trace_record (TRACE_TCP_REQUEST_STATE_EXECUTING , tqpair -> qpair .trace_id , 0 , (uintptr_t )tcp_req );
3132
3138
/* Some external code must kick a request into TCP_REQUEST_STATE_EXECUTED
3133
3139
* to escape this state. */
3134
- check_time (tcp_req );
3140
+ check_time (tcp_req , tqpair );
3135
3141
break ;
3136
3142
case TCP_REQUEST_STATE_AWAITING_ZCOPY_COMMIT :
3137
3143
spdk_trace_record (TRACE_TCP_REQUEST_STATE_AWAIT_ZCOPY_COMMIT , tqpair -> qpair .trace_id , 0 ,
3138
3144
(uintptr_t )tcp_req );
3139
3145
/* Some external code must kick a request into TCP_REQUEST_STATE_EXECUTED
3140
3146
* to escape this state. */
3141
- check_time (tcp_req );
3147
+ check_time (tcp_req , tqpair );
3142
3148
break ;
3143
3149
case TCP_REQUEST_STATE_EXECUTED :
3144
3150
spdk_trace_record (TRACE_TCP_REQUEST_STATE_EXECUTED , tqpair -> qpair .trace_id , 0 , (uintptr_t )tcp_req );
3145
3151
3146
3152
if (spdk_unlikely (tcp_req -> req .dif_enabled )) {
3147
3153
tcp_req -> req .length = tcp_req -> req .dif .orig_length ;
3148
3154
}
3149
- check_time (tcp_req );
3155
+ check_time (tcp_req , tqpair );
3150
3156
nvmf_tcp_req_set_state (tcp_req , TCP_REQUEST_STATE_READY_TO_COMPLETE );
3151
3157
break ;
3152
3158
case TCP_REQUEST_STATE_READY_TO_COMPLETE :
3153
3159
spdk_trace_record (TRACE_TCP_REQUEST_STATE_READY_TO_COMPLETE , tqpair -> qpair .trace_id , 0 ,
3154
3160
(uintptr_t )tcp_req );
3155
- check_time (tcp_req );
3161
+ check_time (tcp_req , tqpair );
3156
3162
tcp_req -> time = 0 ;
3157
3163
if (request_transfer_out (& tcp_req -> req ) != 0 ) {
3158
3164
assert (0 ); /* No good way to handle this currently */
@@ -3163,22 +3169,22 @@ nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport,
3163
3169
0 , (uintptr_t )tcp_req );
3164
3170
/* Some external code must kick a request into TCP_REQUEST_STATE_COMPLETED
3165
3171
* to escape this state. */
3166
- check_time (tcp_req );
3172
+ check_time (tcp_req , tqpair );
3167
3173
break ;
3168
3174
case TCP_REQUEST_STATE_AWAITING_ZCOPY_RELEASE :
3169
3175
spdk_trace_record (TRACE_TCP_REQUEST_STATE_AWAIT_ZCOPY_RELEASE , tqpair -> qpair .trace_id , 0 ,
3170
3176
(uintptr_t )tcp_req );
3171
3177
/* Some external code must kick a request into TCP_REQUEST_STATE_COMPLETED
3172
3178
* to escape this state. */
3173
- check_time (tcp_req );
3179
+ check_time (tcp_req , tqpair );
3174
3180
break ;
3175
3181
case TCP_REQUEST_STATE_COMPLETED :
3176
3182
spdk_trace_record (TRACE_TCP_REQUEST_STATE_COMPLETED , tqpair -> qpair .trace_id , 0 , (uintptr_t )tcp_req ,
3177
3183
tqpair -> qpair .queue_depth );
3178
3184
/* If there's an outstanding PDU sent to the host, the request is completed
3179
3185
* due to the qpair being disconnected. We must delay the completion until
3180
3186
* that write is done to avoid freeing the request twice. */
3181
- check_time (tcp_req );
3187
+ check_time (tcp_req , tqpair );
3182
3188
if (spdk_unlikely (tcp_req -> pdu_in_use )) {
3183
3189
SPDK_DEBUGLOG (nvmf_tcp , "Delaying completion due to outstanding "
3184
3190
"write on req=%p\n" , tcp_req );
0 commit comments