aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/sm_sideeffect.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sctp/sm_sideeffect.c')
-rw-r--r--net/sctp/sm_sideeffect.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c
index 6db77d1329f..13556749311 100644
--- a/net/sctp/sm_sideeffect.c
+++ b/net/sctp/sm_sideeffect.c
@@ -61,7 +61,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
61 struct sctp_endpoint *ep, 61 struct sctp_endpoint *ep,
62 struct sctp_association *asoc, 62 struct sctp_association *asoc,
63 void *event_arg, 63 void *event_arg,
64 sctp_disposition_t status, 64 sctp_disposition_t status,
65 sctp_cmd_seq_t *commands, 65 sctp_cmd_seq_t *commands,
66 gfp_t gfp); 66 gfp_t gfp);
67static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, 67static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
@@ -78,7 +78,7 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
78 ********************************************************************/ 78 ********************************************************************/
79 79
80/* A helper function for delayed processing of INET ECN CE bit. */ 80/* A helper function for delayed processing of INET ECN CE bit. */
81static void sctp_do_ecn_ce_work(struct sctp_association *asoc, 81static void sctp_do_ecn_ce_work(struct sctp_association *asoc,
82 __u32 lowest_tsn) 82 __u32 lowest_tsn)
83{ 83{
84 /* Save the TSN away for comparison when we receive CWR */ 84 /* Save the TSN away for comparison when we receive CWR */
@@ -160,7 +160,7 @@ static int sctp_gen_sack(struct sctp_association *asoc, int force,
160 struct sctp_transport *trans = asoc->peer.last_data_from; 160 struct sctp_transport *trans = asoc->peer.last_data_from;
161 int error = 0; 161 int error = 0;
162 162
163 if (force || 163 if (force ||
164 (!trans && (asoc->param_flags & SPP_SACKDELAY_DISABLE)) || 164 (!trans && (asoc->param_flags & SPP_SACKDELAY_DISABLE)) ||
165 (trans && (trans->param_flags & SPP_SACKDELAY_DISABLE))) 165 (trans && (trans->param_flags & SPP_SACKDELAY_DISABLE)))
166 asoc->peer.sack_needed = 1; 166 asoc->peer.sack_needed = 1;
@@ -178,7 +178,7 @@ static int sctp_gen_sack(struct sctp_association *asoc, int force,
178 * [This is actually not mentioned in Section 6, but we 178 * [This is actually not mentioned in Section 6, but we
179 * implement it here anyway. --piggy] 179 * implement it here anyway. --piggy]
180 */ 180 */
181 if (max_tsn_seen != ctsn) 181 if (max_tsn_seen != ctsn)
182 asoc->peer.sack_needed = 1; 182 asoc->peer.sack_needed = 1;
183 183
184 /* From 6.2 Acknowledgement on Reception of DATA Chunks: 184 /* From 6.2 Acknowledgement on Reception of DATA Chunks:
@@ -199,10 +199,10 @@ static int sctp_gen_sack(struct sctp_association *asoc, int force,
199 * for the association. 199 * for the association.
200 */ 200 */
201 if (trans) 201 if (trans)
202 asoc->timeouts[SCTP_EVENT_TIMEOUT_SACK] = 202 asoc->timeouts[SCTP_EVENT_TIMEOUT_SACK] =
203 trans->sackdelay; 203 trans->sackdelay;
204 else 204 else
205 asoc->timeouts[SCTP_EVENT_TIMEOUT_SACK] = 205 asoc->timeouts[SCTP_EVENT_TIMEOUT_SACK] =
206 asoc->sackdelay; 206 asoc->sackdelay;
207 207
208 /* Restart the SACK timer. */ 208 /* Restart the SACK timer. */
@@ -338,8 +338,8 @@ static void sctp_generate_t4_rto_event(unsigned long data)
338 338
339static void sctp_generate_t5_shutdown_guard_event(unsigned long data) 339static void sctp_generate_t5_shutdown_guard_event(unsigned long data)
340{ 340{
341 struct sctp_association *asoc = (struct sctp_association *)data; 341 struct sctp_association *asoc = (struct sctp_association *)data;
342 sctp_generate_timeout_event(asoc, 342 sctp_generate_timeout_event(asoc,
343 SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD); 343 SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD);
344 344
345} /* sctp_generate_t5_shutdown_guard_event() */ 345} /* sctp_generate_t5_shutdown_guard_event() */
@@ -380,7 +380,7 @@ void sctp_generate_heartbeat_event(unsigned long data)
380 asoc->state, asoc->ep, asoc, 380 asoc->state, asoc->ep, asoc,
381 transport, GFP_ATOMIC); 381 transport, GFP_ATOMIC);
382 382
383 if (error) 383 if (error)
384 asoc->base.sk->sk_err = -error; 384 asoc->base.sk->sk_err = -error;
385 385
386out_unlock: 386out_unlock:
@@ -570,7 +570,7 @@ static void sctp_cmd_hb_timers_stop(sctp_cmd_seq_t *cmds,
570 570
571/* Helper function to stop any pending T3-RTX timers */ 571/* Helper function to stop any pending T3-RTX timers */
572static void sctp_cmd_t3_rtx_timers_stop(sctp_cmd_seq_t *cmds, 572static void sctp_cmd_t3_rtx_timers_stop(sctp_cmd_seq_t *cmds,
573 struct sctp_association *asoc) 573 struct sctp_association *asoc)
574{ 574{
575 struct sctp_transport *t; 575 struct sctp_transport *t;
576 struct list_head *pos; 576 struct list_head *pos;
@@ -675,7 +675,7 @@ static int sctp_cmd_process_sack(sctp_cmd_seq_t *cmds,
675/* Helper function to set the timeout value for T2-SHUTDOWN timer and to set 675/* Helper function to set the timeout value for T2-SHUTDOWN timer and to set
676 * the transport for a shutdown chunk. 676 * the transport for a shutdown chunk.
677 */ 677 */
678static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds, 678static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
679 struct sctp_association *asoc, 679 struct sctp_association *asoc,
680 struct sctp_chunk *chunk) 680 struct sctp_chunk *chunk)
681{ 681{
@@ -688,7 +688,7 @@ static void sctp_cmd_setup_t2(sctp_cmd_seq_t *cmds,
688} 688}
689 689
690/* Helper function to change the state of an association. */ 690/* Helper function to change the state of an association. */
691static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds, 691static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds,
692 struct sctp_association *asoc, 692 struct sctp_association *asoc,
693 sctp_state_t state) 693 sctp_state_t state)
694{ 694{
@@ -727,7 +727,7 @@ static void sctp_cmd_new_state(sctp_cmd_seq_t *cmds,
727 sctp_state(asoc, SHUTDOWN_RECEIVED)) { 727 sctp_state(asoc, SHUTDOWN_RECEIVED)) {
728 /* Wake up any processes waiting in the asoc's wait queue in 728 /* Wake up any processes waiting in the asoc's wait queue in
729 * sctp_wait_for_connect() or sctp_wait_for_sndbuf(). 729 * sctp_wait_for_connect() or sctp_wait_for_sndbuf().
730 */ 730 */
731 if (waitqueue_active(&asoc->wait)) 731 if (waitqueue_active(&asoc->wait))
732 wake_up_interruptible(&asoc->wait); 732 wake_up_interruptible(&asoc->wait);
733 733
@@ -749,9 +749,9 @@ static void sctp_cmd_delete_tcb(sctp_cmd_seq_t *cmds,
749 struct sock *sk = asoc->base.sk; 749 struct sock *sk = asoc->base.sk;
750 750
751 /* If it is a non-temporary association belonging to a TCP-style 751 /* If it is a non-temporary association belonging to a TCP-style
752 * listening socket that is not closed, do not free it so that accept() 752 * listening socket that is not closed, do not free it so that accept()
753 * can pick it up later. 753 * can pick it up later.
754 */ 754 */
755 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING) && 755 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING) &&
756 (!asoc->temp) && (sk->sk_shutdown != SHUTDOWN_MASK)) 756 (!asoc->temp) && (sk->sk_shutdown != SHUTDOWN_MASK))
757 return; 757 return;
@@ -764,7 +764,7 @@ static void sctp_cmd_delete_tcb(sctp_cmd_seq_t *cmds,
764 * ADDIP Section 4.1 ASCONF Chunk Procedures 764 * ADDIP Section 4.1 ASCONF Chunk Procedures
765 * A4) Start a T-4 RTO timer, using the RTO value of the selected 765 * A4) Start a T-4 RTO timer, using the RTO value of the selected
766 * destination address (we use active path instead of primary path just 766 * destination address (we use active path instead of primary path just
767 * because primary path may be inactive. 767 * because primary path may be inactive.
768 */ 768 */
769static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds, 769static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds,
770 struct sctp_association *asoc, 770 struct sctp_association *asoc,
@@ -777,7 +777,7 @@ static void sctp_cmd_setup_t4(sctp_cmd_seq_t *cmds,
777 chunk->transport = t; 777 chunk->transport = t;
778} 778}
779 779
780/* Process an incoming Operation Error Chunk. */ 780/* Process an incoming Operation Error Chunk. */
781static void sctp_cmd_process_operr(sctp_cmd_seq_t *cmds, 781static void sctp_cmd_process_operr(sctp_cmd_seq_t *cmds,
782 struct sctp_association *asoc, 782 struct sctp_association *asoc,
783 struct sctp_chunk *chunk) 783 struct sctp_chunk *chunk)
@@ -816,7 +816,7 @@ static void sctp_cmd_process_operr(sctp_cmd_seq_t *cmds,
816} 816}
817 817
818/* Process variable FWDTSN chunk information. */ 818/* Process variable FWDTSN chunk information. */
819static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq, 819static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq,
820 struct sctp_chunk *chunk) 820 struct sctp_chunk *chunk)
821{ 821{
822 struct sctp_fwdtsn_skip *skip; 822 struct sctp_fwdtsn_skip *skip;
@@ -828,9 +828,9 @@ static void sctp_cmd_process_fwdtsn(struct sctp_ulpq *ulpq,
828 return; 828 return;
829} 829}
830 830
831/* Helper function to remove the association non-primary peer 831/* Helper function to remove the association non-primary peer
832 * transports. 832 * transports.
833 */ 833 */
834static void sctp_cmd_del_non_primary(struct sctp_association *asoc) 834static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
835{ 835{
836 struct sctp_transport *t; 836 struct sctp_transport *t;
@@ -840,7 +840,7 @@ static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
840 list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { 840 list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
841 t = list_entry(pos, struct sctp_transport, transports); 841 t = list_entry(pos, struct sctp_transport, transports);
842 if (!sctp_cmp_addr_exact(&t->ipaddr, 842 if (!sctp_cmp_addr_exact(&t->ipaddr,
843 &asoc->peer.primary_addr)) { 843 &asoc->peer.primary_addr)) {
844 sctp_assoc_del_peer(asoc, &t->ipaddr); 844 sctp_assoc_del_peer(asoc, &t->ipaddr);
845 } 845 }
846 } 846 }
@@ -915,7 +915,7 @@ int sctp_do_sm(sctp_event_t event_type, sctp_subtype_t subtype,
915 DEBUG_POST; 915 DEBUG_POST;
916 916
917 error = sctp_side_effects(event_type, subtype, state, 917 error = sctp_side_effects(event_type, subtype, state,
918 ep, asoc, event_arg, status, 918 ep, asoc, event_arg, status,
919 &commands, gfp); 919 &commands, gfp);
920 DEBUG_POST_SFX; 920 DEBUG_POST_SFX;
921 921
@@ -968,7 +968,7 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
968 error = -ENOMEM; 968 error = -ENOMEM;
969 break; 969 break;
970 970
971 case SCTP_DISPOSITION_DELETE_TCB: 971 case SCTP_DISPOSITION_DELETE_TCB:
972 /* This should now be a command. */ 972 /* This should now be a command. */
973 break; 973 break;
974 974
@@ -1021,7 +1021,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
1021 struct sctp_endpoint *ep, 1021 struct sctp_endpoint *ep,
1022 struct sctp_association *asoc, 1022 struct sctp_association *asoc,
1023 void *event_arg, 1023 void *event_arg,
1024 sctp_disposition_t status, 1024 sctp_disposition_t status,
1025 sctp_cmd_seq_t *commands, 1025 sctp_cmd_seq_t *commands,
1026 gfp_t gfp) 1026 gfp_t gfp)
1027{ 1027{
@@ -1057,7 +1057,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
1057 case SCTP_CMD_NEW_ASOC: 1057 case SCTP_CMD_NEW_ASOC:
1058 /* Register a new association. */ 1058 /* Register a new association. */
1059 if (local_cork) { 1059 if (local_cork) {
1060 sctp_outq_uncork(&asoc->outqueue); 1060 sctp_outq_uncork(&asoc->outqueue);
1061 local_cork = 0; 1061 local_cork = 0;
1062 } 1062 }
1063 asoc = cmd->obj.ptr; 1063 asoc = cmd->obj.ptr;
@@ -1074,7 +1074,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
1074 sctp_outq_teardown(&asoc->outqueue); 1074 sctp_outq_teardown(&asoc->outqueue);
1075 break; 1075 break;
1076 1076
1077 case SCTP_CMD_DELETE_TCB: 1077 case SCTP_CMD_DELETE_TCB:
1078 if (local_cork) { 1078 if (local_cork) {
1079 sctp_outq_uncork(&asoc->outqueue); 1079 sctp_outq_uncork(&asoc->outqueue);
1080 local_cork = 0; 1080 local_cork = 0;
@@ -1104,7 +1104,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
1104 1104
1105 case SCTP_CMD_PROCESS_FWDTSN: 1105 case SCTP_CMD_PROCESS_FWDTSN:
1106 sctp_cmd_process_fwdtsn(&asoc->ulpq, cmd->obj.ptr); 1106 sctp_cmd_process_fwdtsn(&asoc->ulpq, cmd->obj.ptr);
1107 break; 1107 break;
1108 1108
1109 case SCTP_CMD_GEN_SACK: 1109 case SCTP_CMD_GEN_SACK:
1110 /* Generate a Selective ACK. 1110 /* Generate a Selective ACK.
@@ -1162,12 +1162,12 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
1162 SCTP_CHUNK(cmd->obj.ptr)); 1162 SCTP_CHUNK(cmd->obj.ptr));
1163 1163
1164 /* FIXME - Eventually come up with a cleaner way to 1164 /* FIXME - Eventually come up with a cleaner way to
1165 * enabling COOKIE-ECHO + DATA bundling during 1165 * enabling COOKIE-ECHO + DATA bundling during
1166 * multihoming stale cookie scenarios, the following 1166 * multihoming stale cookie scenarios, the following
1167 * command plays with asoc->peer.retran_path to 1167 * command plays with asoc->peer.retran_path to
1168 * avoid the problem of sending the COOKIE-ECHO and 1168 * avoid the problem of sending the COOKIE-ECHO and
1169 * DATA in different paths, which could result 1169 * DATA in different paths, which could result
1170 * in the association being ABORTed if the DATA chunk 1170 * in the association being ABORTed if the DATA chunk
1171 * is processed first by the server. Checking the 1171 * is processed first by the server. Checking the
1172 * init error counter simply causes this command 1172 * init error counter simply causes this command
1173 * to be executed only during failed attempts of 1173 * to be executed only during failed attempts of
@@ -1177,7 +1177,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
1177 asoc->peer.primary_path) && 1177 asoc->peer.primary_path) &&
1178 (asoc->init_err_counter > 0)) { 1178 (asoc->init_err_counter > 0)) {
1179 sctp_add_cmd_sf(commands, 1179 sctp_add_cmd_sf(commands,
1180 SCTP_CMD_FORCE_PRIM_RETRAN, 1180 SCTP_CMD_FORCE_PRIM_RETRAN,
1181 SCTP_NULL()); 1181 SCTP_NULL());
1182 } 1182 }
1183 1183