diff options
Diffstat (limited to 'net/tipc/socket.c')
| -rw-r--r-- | net/tipc/socket.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index e14b2aedb212..611a04fb0ddc 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
| @@ -69,8 +69,6 @@ | |||
| 69 | * @pub_count: total # of publications port has made during its lifetime | 69 | * @pub_count: total # of publications port has made during its lifetime |
| 70 | * @probing_state: | 70 | * @probing_state: |
| 71 | * @probing_intv: | 71 | * @probing_intv: |
| 72 | * @port: port - interacts with 'sk' and with the rest of the TIPC stack | ||
| 73 | * @peer_name: the peer of the connection, if any | ||
| 74 | * @conn_timeout: the time we can wait for an unresponded setup request | 72 | * @conn_timeout: the time we can wait for an unresponded setup request |
| 75 | * @dupl_rcvcnt: number of bytes counted twice, in both backlog and rcv queue | 73 | * @dupl_rcvcnt: number of bytes counted twice, in both backlog and rcv queue |
| 76 | * @link_cong: non-zero if owner must sleep because of link congestion | 74 | * @link_cong: non-zero if owner must sleep because of link congestion |
| @@ -737,7 +735,7 @@ static int tipc_sendmcast(struct socket *sock, struct tipc_name_seq *seq, | |||
| 737 | struct tipc_sock *tsk = tipc_sk(sk); | 735 | struct tipc_sock *tsk = tipc_sk(sk); |
| 738 | struct net *net = sock_net(sk); | 736 | struct net *net = sock_net(sk); |
| 739 | struct tipc_msg *mhdr = &tsk->phdr; | 737 | struct tipc_msg *mhdr = &tsk->phdr; |
| 740 | struct sk_buff_head head; | 738 | struct sk_buff_head *pktchain = &sk->sk_write_queue; |
| 741 | struct iov_iter save = msg->msg_iter; | 739 | struct iov_iter save = msg->msg_iter; |
| 742 | uint mtu; | 740 | uint mtu; |
| 743 | int rc; | 741 | int rc; |
| @@ -753,13 +751,12 @@ static int tipc_sendmcast(struct socket *sock, struct tipc_name_seq *seq, | |||
| 753 | 751 | ||
| 754 | new_mtu: | 752 | new_mtu: |
| 755 | mtu = tipc_bclink_get_mtu(); | 753 | mtu = tipc_bclink_get_mtu(); |
| 756 | __skb_queue_head_init(&head); | 754 | rc = tipc_msg_build(mhdr, msg, 0, dsz, mtu, pktchain); |
| 757 | rc = tipc_msg_build(mhdr, msg, 0, dsz, mtu, &head); | ||
| 758 | if (unlikely(rc < 0)) | 755 | if (unlikely(rc < 0)) |
| 759 | return rc; | 756 | return rc; |
| 760 | 757 | ||
| 761 | do { | 758 | do { |
| 762 | rc = tipc_bclink_xmit(net, &head); | 759 | rc = tipc_bclink_xmit(net, pktchain); |
| 763 | if (likely(rc >= 0)) { | 760 | if (likely(rc >= 0)) { |
| 764 | rc = dsz; | 761 | rc = dsz; |
| 765 | break; | 762 | break; |
| @@ -773,7 +770,7 @@ new_mtu: | |||
| 773 | tipc_sk(sk)->link_cong = 1; | 770 | tipc_sk(sk)->link_cong = 1; |
| 774 | rc = tipc_wait_for_sndmsg(sock, &timeo); | 771 | rc = tipc_wait_for_sndmsg(sock, &timeo); |
| 775 | if (rc) | 772 | if (rc) |
| 776 | __skb_queue_purge(&head); | 773 | __skb_queue_purge(pktchain); |
| 777 | } while (!rc); | 774 | } while (!rc); |
| 778 | return rc; | 775 | return rc; |
| 779 | } | 776 | } |
| @@ -897,7 +894,7 @@ static int tipc_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
| 897 | struct net *net = sock_net(sk); | 894 | struct net *net = sock_net(sk); |
| 898 | struct tipc_msg *mhdr = &tsk->phdr; | 895 | struct tipc_msg *mhdr = &tsk->phdr; |
| 899 | u32 dnode, dport; | 896 | u32 dnode, dport; |
| 900 | struct sk_buff_head head; | 897 | struct sk_buff_head *pktchain = &sk->sk_write_queue; |
| 901 | struct sk_buff *skb; | 898 | struct sk_buff *skb; |
| 902 | struct tipc_name_seq *seq = &dest->addr.nameseq; | 899 | struct tipc_name_seq *seq = &dest->addr.nameseq; |
| 903 | struct iov_iter save; | 900 | struct iov_iter save; |
| @@ -972,15 +969,14 @@ static int tipc_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
| 972 | save = m->msg_iter; | 969 | save = m->msg_iter; |
| 973 | new_mtu: | 970 | new_mtu: |
| 974 | mtu = tipc_node_get_mtu(net, dnode, tsk->portid); | 971 | mtu = tipc_node_get_mtu(net, dnode, tsk->portid); |
| 975 | __skb_queue_head_init(&head); | 972 | rc = tipc_msg_build(mhdr, m, 0, dsz, mtu, pktchain); |
| 976 | rc = tipc_msg_build(mhdr, m, 0, dsz, mtu, &head); | ||
| 977 | if (rc < 0) | 973 | if (rc < 0) |
| 978 | goto exit; | 974 | goto exit; |
| 979 | 975 | ||
| 980 | do { | 976 | do { |
| 981 | skb = skb_peek(&head); | 977 | skb = skb_peek(pktchain); |
| 982 | TIPC_SKB_CB(skb)->wakeup_pending = tsk->link_cong; | 978 | TIPC_SKB_CB(skb)->wakeup_pending = tsk->link_cong; |
| 983 | rc = tipc_link_xmit(net, &head, dnode, tsk->portid); | 979 | rc = tipc_link_xmit(net, pktchain, dnode, tsk->portid); |
| 984 | if (likely(rc >= 0)) { | 980 | if (likely(rc >= 0)) { |
| 985 | if (sock->state != SS_READY) | 981 | if (sock->state != SS_READY) |
| 986 | sock->state = SS_CONNECTING; | 982 | sock->state = SS_CONNECTING; |
| @@ -996,7 +992,7 @@ new_mtu: | |||
| 996 | tsk->link_cong = 1; | 992 | tsk->link_cong = 1; |
| 997 | rc = tipc_wait_for_sndmsg(sock, &timeo); | 993 | rc = tipc_wait_for_sndmsg(sock, &timeo); |
| 998 | if (rc) | 994 | if (rc) |
| 999 | __skb_queue_purge(&head); | 995 | __skb_queue_purge(pktchain); |
| 1000 | } while (!rc); | 996 | } while (!rc); |
| 1001 | exit: | 997 | exit: |
| 1002 | if (iocb) | 998 | if (iocb) |
| @@ -1054,7 +1050,7 @@ static int tipc_send_stream(struct kiocb *iocb, struct socket *sock, | |||
| 1054 | struct net *net = sock_net(sk); | 1050 | struct net *net = sock_net(sk); |
| 1055 | struct tipc_sock *tsk = tipc_sk(sk); | 1051 | struct tipc_sock *tsk = tipc_sk(sk); |
| 1056 | struct tipc_msg *mhdr = &tsk->phdr; | 1052 | struct tipc_msg *mhdr = &tsk->phdr; |
| 1057 | struct sk_buff_head head; | 1053 | struct sk_buff_head *pktchain = &sk->sk_write_queue; |
| 1058 | DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name); | 1054 | DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name); |
| 1059 | u32 portid = tsk->portid; | 1055 | u32 portid = tsk->portid; |
| 1060 | int rc = -EINVAL; | 1056 | int rc = -EINVAL; |
| @@ -1091,13 +1087,12 @@ next: | |||
| 1091 | save = m->msg_iter; | 1087 | save = m->msg_iter; |
| 1092 | mtu = tsk->max_pkt; | 1088 | mtu = tsk->max_pkt; |
| 1093 | send = min_t(uint, dsz - sent, TIPC_MAX_USER_MSG_SIZE); | 1089 | send = min_t(uint, dsz - sent, TIPC_MAX_USER_MSG_SIZE); |
| 1094 | __skb_queue_head_init(&head); | 1090 | rc = tipc_msg_build(mhdr, m, sent, send, mtu, pktchain); |
| 1095 | rc = tipc_msg_build(mhdr, m, sent, send, mtu, &head); | ||
| 1096 | if (unlikely(rc < 0)) | 1091 | if (unlikely(rc < 0)) |
| 1097 | goto exit; | 1092 | goto exit; |
| 1098 | do { | 1093 | do { |
| 1099 | if (likely(!tsk_conn_cong(tsk))) { | 1094 | if (likely(!tsk_conn_cong(tsk))) { |
| 1100 | rc = tipc_link_xmit(net, &head, dnode, portid); | 1095 | rc = tipc_link_xmit(net, pktchain, dnode, portid); |
| 1101 | if (likely(!rc)) { | 1096 | if (likely(!rc)) { |
| 1102 | tsk->sent_unacked++; | 1097 | tsk->sent_unacked++; |
| 1103 | sent += send; | 1098 | sent += send; |
| @@ -1117,7 +1112,7 @@ next: | |||
| 1117 | } | 1112 | } |
| 1118 | rc = tipc_wait_for_sndpkt(sock, &timeo); | 1113 | rc = tipc_wait_for_sndpkt(sock, &timeo); |
| 1119 | if (rc) | 1114 | if (rc) |
| 1120 | __skb_queue_purge(&head); | 1115 | __skb_queue_purge(pktchain); |
| 1121 | } while (!rc); | 1116 | } while (!rc); |
| 1122 | exit: | 1117 | exit: |
| 1123 | if (iocb) | 1118 | if (iocb) |
