@@ -4502,8 +4502,15 @@ smb2_readv_callback(struct mid_q_entry *mid)
45024502 struct TCP_Server_Info * server = rdata -> server ;
45034503 struct smb2_hdr * shdr =
45044504 (struct smb2_hdr * )rdata -> iov [0 ].iov_base ;
4505- struct cifs_credits credits = { .value = 0 , .instance = 0 };
4505+ struct cifs_credits credits = {
4506+ .value = 0 ,
4507+ .instance = 0 ,
4508+ .rreq_debug_id = rdata -> rreq -> debug_id ,
4509+ .rreq_debug_index = rdata -> subreq .debug_index ,
4510+ };
45064511 struct smb_rqst rqst = { .rq_iov = & rdata -> iov [1 ], .rq_nvec = 1 };
4512+ unsigned int rreq_debug_id = rdata -> rreq -> debug_id ;
4513+ unsigned int subreq_debug_index = rdata -> subreq .debug_index ;
45074514
45084515 if (rdata -> got_bytes ) {
45094516 rqst .rq_iter = rdata -> subreq .io_iter ;
@@ -4587,10 +4594,16 @@ smb2_readv_callback(struct mid_q_entry *mid)
45874594 if (rdata -> subreq .start < rdata -> subreq .rreq -> i_size )
45884595 rdata -> result = 0 ;
45894596 }
4597+ trace_smb3_rw_credits (rreq_debug_id , subreq_debug_index , rdata -> credits .value ,
4598+ server -> credits , server -> in_flight ,
4599+ 0 , cifs_trace_rw_credits_read_response_clear );
45904600 rdata -> credits .value = 0 ;
45914601 INIT_WORK (& rdata -> subreq .work , smb2_readv_worker );
45924602 queue_work (cifsiod_wq , & rdata -> subreq .work );
45934603 release_mid (mid );
4604+ trace_smb3_rw_credits (rreq_debug_id , subreq_debug_index , 0 ,
4605+ server -> credits , server -> in_flight ,
4606+ credits .value , cifs_trace_rw_credits_read_response_add );
45944607 add_credits (server , & credits , 0 );
45954608}
45964609
@@ -4647,7 +4660,7 @@ smb2_async_readv(struct cifs_io_subrequest *rdata)
46474660 min_t (int , server -> max_credits -
46484661 server -> credits , credit_request ));
46494662
4650- rc = adjust_credits (server , & rdata -> credits , rdata -> subreq . len );
4663+ rc = adjust_credits (server , rdata , cifs_trace_rw_credits_call_readv_adjust );
46514664 if (rc )
46524665 goto async_readv_out ;
46534666
@@ -4766,7 +4779,14 @@ smb2_writev_callback(struct mid_q_entry *mid)
47664779 struct cifs_tcon * tcon = tlink_tcon (wdata -> req -> cfile -> tlink );
47674780 struct TCP_Server_Info * server = wdata -> server ;
47684781 struct smb2_write_rsp * rsp = (struct smb2_write_rsp * )mid -> resp_buf ;
4769- struct cifs_credits credits = { .value = 0 , .instance = 0 };
4782+ struct cifs_credits credits = {
4783+ .value = 0 ,
4784+ .instance = 0 ,
4785+ .rreq_debug_id = wdata -> rreq -> debug_id ,
4786+ .rreq_debug_index = wdata -> subreq .debug_index ,
4787+ };
4788+ unsigned int rreq_debug_id = wdata -> rreq -> debug_id ;
4789+ unsigned int subreq_debug_index = wdata -> subreq .debug_index ;
47704790 ssize_t result = 0 ;
47714791 size_t written ;
47724792
@@ -4837,9 +4857,15 @@ smb2_writev_callback(struct mid_q_entry *mid)
48374857 tcon -> tid , tcon -> ses -> Suid ,
48384858 wdata -> subreq .start , wdata -> subreq .len );
48394859
4860+ trace_smb3_rw_credits (rreq_debug_id , subreq_debug_index , wdata -> credits .value ,
4861+ server -> credits , server -> in_flight ,
4862+ 0 , cifs_trace_rw_credits_write_response_clear );
48404863 wdata -> credits .value = 0 ;
48414864 cifs_write_subrequest_terminated (wdata , result ?: written , true);
48424865 release_mid (mid );
4866+ trace_smb3_rw_credits (rreq_debug_id , subreq_debug_index , 0 ,
4867+ server -> credits , server -> in_flight ,
4868+ credits .value , cifs_trace_rw_credits_write_response_add );
48434869 add_credits (server , & credits , 0 );
48444870}
48454871
@@ -4859,9 +4885,6 @@ smb2_async_writev(struct cifs_io_subrequest *wdata)
48594885 struct cifs_io_parms * io_parms = NULL ;
48604886 int credit_request ;
48614887
4862- if (!wdata -> server || test_bit (NETFS_SREQ_RETRYING , & wdata -> subreq .flags ))
4863- server = wdata -> server = cifs_pick_channel (tcon -> ses );
4864-
48654888 /*
48664889 * in future we may get cifs_io_parms passed in from the caller,
48674890 * but for now we construct it here...
@@ -4972,7 +4995,7 @@ smb2_async_writev(struct cifs_io_subrequest *wdata)
49724995 min_t (int , server -> max_credits -
49734996 server -> credits , credit_request ));
49744997
4975- rc = adjust_credits (server , & wdata -> credits , io_parms -> length );
4998+ rc = adjust_credits (server , wdata , cifs_trace_rw_credits_call_writev_adjust );
49764999 if (rc )
49775000 goto async_writev_out ;
49785001
@@ -4997,6 +5020,12 @@ smb2_async_writev(struct cifs_io_subrequest *wdata)
49975020 cifs_small_buf_release (req );
49985021out :
49995022 if (rc ) {
5023+ trace_smb3_rw_credits (wdata -> rreq -> debug_id ,
5024+ wdata -> subreq .debug_index ,
5025+ wdata -> credits .value ,
5026+ server -> credits , server -> in_flight ,
5027+ - (int )wdata -> credits .value ,
5028+ cifs_trace_rw_credits_write_response_clear );
50005029 add_credits_and_wake_if (wdata -> server , & wdata -> credits , 0 );
50015030 cifs_write_subrequest_terminated (wdata , rc , true);
50025031 }
0 commit comments