aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp
diff options
context:
space:
mode:
Diffstat (limited to 'net/sctp')
-rw-r--r--net/sctp/outqueue.c3
-rw-r--r--net/sctp/proc.c20
-rw-r--r--net/sctp/sm_statefuns.c2
3 files changed, 19 insertions, 6 deletions
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
index 1bb3c5c35d2a..fd4deefab3cf 100644
--- a/net/sctp/outqueue.c
+++ b/net/sctp/outqueue.c
@@ -494,6 +494,8 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport,
494 */ 494 */
495 if (transport == transport->asoc->peer.retran_path) 495 if (transport == transport->asoc->peer.retran_path)
496 sctp_assoc_update_retran_path(transport->asoc); 496 sctp_assoc_update_retran_path(transport->asoc);
497 transport->asoc->rtx_data_chunks +=
498 transport->asoc->unack_data;
497 break; 499 break;
498 case SCTP_RTXR_FAST_RTX: 500 case SCTP_RTXR_FAST_RTX:
499 SCTP_INC_STATS(SCTP_MIB_FAST_RETRANSMITS); 501 SCTP_INC_STATS(SCTP_MIB_FAST_RETRANSMITS);
@@ -504,6 +506,7 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport,
504 break; 506 break;
505 case SCTP_RTXR_T1_RTX: 507 case SCTP_RTXR_T1_RTX:
506 SCTP_INC_STATS(SCTP_MIB_T1_RETRANSMITS); 508 SCTP_INC_STATS(SCTP_MIB_T1_RETRANSMITS);
509 transport->asoc->init_retries++;
507 break; 510 break;
508 default: 511 default:
509 BUG(); 512 BUG();
diff --git a/net/sctp/proc.c b/net/sctp/proc.c
index 9e214da82d9e..82bea300308d 100644
--- a/net/sctp/proc.c
+++ b/net/sctp/proc.c
@@ -281,8 +281,10 @@ static void * sctp_assocs_seq_start(struct seq_file *seq, loff_t *pos)
281 *pos = 0; 281 *pos = 0;
282 282
283 if (*pos == 0) 283 if (*pos == 0)
284 seq_printf(seq, " ASSOC SOCK STY SST ST HBKT ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT " 284 seq_printf(seq, " ASSOC SOCK STY SST ST HBKT "
285 "RPORT LADDRS <-> RADDRS\n"); 285 "ASSOC-ID TX_QUEUE RX_QUEUE UID INODE LPORT "
286 "RPORT LADDRS <-> RADDRS "
287 "HBINT INS OUTS MAXRT T1X T2X RTXC\n");
286 288
287 return (void *)pos; 289 return (void *)pos;
288} 290}
@@ -321,15 +323,21 @@ static int sctp_assocs_seq_show(struct seq_file *seq, void *v)
321 assoc = sctp_assoc(epb); 323 assoc = sctp_assoc(epb);
322 sk = epb->sk; 324 sk = epb->sk;
323 seq_printf(seq, 325 seq_printf(seq,
324 "%8p %8p %-3d %-3d %-2d %-4d %4d %8d %8d %7d %5lu %-5d %5d ", 326 "%8p %8p %-3d %-3d %-2d %-4d "
327 "%4d %8d %8d %7d %5lu %-5d %5d "
328 "%8d %5d %5d %4d %4d %4d %8d ",
325 assoc, sk, sctp_sk(sk)->type, sk->sk_state, 329 assoc, sk, sctp_sk(sk)->type, sk->sk_state,
326 assoc->state, hash, assoc->assoc_id, 330 assoc->state, hash,
331 assoc->assoc_id,
327 assoc->sndbuf_used, 332 assoc->sndbuf_used,
328 atomic_read(&assoc->rmem_alloc), 333 atomic_read(&assoc->rmem_alloc),
329 sock_i_uid(sk), sock_i_ino(sk), 334 sock_i_uid(sk), sock_i_ino(sk),
330 epb->bind_addr.port, 335 epb->bind_addr.port,
331 assoc->peer.port); 336 assoc->peer.port,
332 337 assoc->hbinterval, assoc->c.sinit_max_instreams,
338 assoc->c.sinit_num_ostreams, assoc->max_retrans,
339 assoc->init_retries, assoc->shutdown_retries,
340 assoc->rtx_data_chunks);
333 seq_printf(seq, " "); 341 seq_printf(seq, " ");
334 sctp_seq_dump_local_addrs(seq, epb); 342 sctp_seq_dump_local_addrs(seq, epb);
335 seq_printf(seq, "<-> "); 343 seq_printf(seq, "<-> ");
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
index f2ed6473feef..ade0cbd3a52b 100644
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -5312,6 +5312,8 @@ sctp_disposition_t sctp_sf_t2_timer_expire(const struct sctp_endpoint *ep,
5312 SCTP_DEBUG_PRINTK("Timer T2 expired.\n"); 5312 SCTP_DEBUG_PRINTK("Timer T2 expired.\n");
5313 SCTP_INC_STATS(SCTP_MIB_T2_SHUTDOWN_EXPIREDS); 5313 SCTP_INC_STATS(SCTP_MIB_T2_SHUTDOWN_EXPIREDS);
5314 5314
5315 ((struct sctp_association *)asoc)->shutdown_retries++;
5316
5315 if (asoc->overall_error_count >= asoc->max_retrans) { 5317 if (asoc->overall_error_count >= asoc->max_retrans) {
5316 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 5318 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5317 SCTP_ERROR(ETIMEDOUT)); 5319 SCTP_ERROR(ETIMEDOUT));