diff options
Diffstat (limited to 'net/sctp/sm_sideeffect.c')
| -rw-r--r-- | net/sctp/sm_sideeffect.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index 8d1dc24bab4c..c5beb2ad7ef7 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c | |||
| @@ -498,10 +498,6 @@ static void sctp_cmd_assoc_failed(sctp_cmd_seq_t *commands, | |||
| 498 | sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, | 498 | sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, |
| 499 | SCTP_STATE(SCTP_STATE_CLOSED)); | 499 | SCTP_STATE(SCTP_STATE_CLOSED)); |
| 500 | 500 | ||
| 501 | /* Set sk_err to ECONNRESET on a 1-1 style socket. */ | ||
| 502 | if (!sctp_style(asoc->base.sk, UDP)) | ||
| 503 | asoc->base.sk->sk_err = ECONNRESET; | ||
| 504 | |||
| 505 | /* SEND_FAILED sent later when cleaning up the association. */ | 501 | /* SEND_FAILED sent later when cleaning up the association. */ |
| 506 | asoc->outqueue.error = error; | 502 | asoc->outqueue.error = error; |
| 507 | sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); | 503 | sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); |
| @@ -838,6 +834,15 @@ static void sctp_cmd_del_non_primary(struct sctp_association *asoc) | |||
| 838 | return; | 834 | return; |
| 839 | } | 835 | } |
| 840 | 836 | ||
| 837 | /* Helper function to set sk_err on a 1-1 style socket. */ | ||
| 838 | static void sctp_cmd_set_sk_err(struct sctp_association *asoc, int error) | ||
| 839 | { | ||
| 840 | struct sock *sk = asoc->base.sk; | ||
| 841 | |||
| 842 | if (!sctp_style(sk, UDP)) | ||
| 843 | sk->sk_err = error; | ||
| 844 | } | ||
| 845 | |||
| 841 | /* These three macros allow us to pull the debugging code out of the | 846 | /* These three macros allow us to pull the debugging code out of the |
| 842 | * main flow of sctp_do_sm() to keep attention focused on the real | 847 | * main flow of sctp_do_sm() to keep attention focused on the real |
| 843 | * functionality there. | 848 | * functionality there. |
| @@ -1458,6 +1463,9 @@ static int sctp_cmd_interpreter(sctp_event_t event_type, | |||
| 1458 | local_cork = 0; | 1463 | local_cork = 0; |
| 1459 | asoc->peer.retran_path = t; | 1464 | asoc->peer.retran_path = t; |
| 1460 | break; | 1465 | break; |
| 1466 | case SCTP_CMD_SET_SK_ERR: | ||
| 1467 | sctp_cmd_set_sk_err(asoc, cmd->obj.error); | ||
| 1468 | break; | ||
| 1461 | default: | 1469 | default: |
| 1462 | printk(KERN_WARNING "Impossible command: %u, %p\n", | 1470 | printk(KERN_WARNING "Impossible command: %u, %p\n", |
| 1463 | cmd->verb, cmd->obj.ptr); | 1471 | cmd->verb, cmd->obj.ptr); |
