@@ -1067,21 +1067,18 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
1067
1067
int flags , err , copied = 0 ;
1068
1068
int mss_now = 0 , size_goal , copied_syn = 0 ;
1069
1069
int process_backlog = 0 ;
1070
- bool sockc_valid = true ;
1070
+ int sockc_err = 0 ;
1071
1071
int zc = 0 ;
1072
1072
long timeo ;
1073
1073
1074
1074
flags = msg -> msg_flags ;
1075
1075
1076
1076
sockc = (struct sockcm_cookie ){ .tsflags = READ_ONCE (sk -> sk_tsflags ) };
1077
1077
if (msg -> msg_controllen ) {
1078
- err = sock_cmsg_send (sk , msg , & sockc );
1079
- if (unlikely (err ))
1080
- /* Don't return error until MSG_FASTOPEN has been
1081
- * processed; that may succeed even if the cmsg is
1082
- * invalid.
1083
- */
1084
- sockc_valid = false;
1078
+ sockc_err = sock_cmsg_send (sk , msg , & sockc );
1079
+ /* Don't return error until MSG_FASTOPEN has been processed;
1080
+ * that may succeed even if the cmsg is invalid.
1081
+ */
1085
1082
}
1086
1083
1087
1084
if ((flags & MSG_ZEROCOPY ) && size ) {
@@ -1092,7 +1089,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
1092
1089
} else if (sock_flag (sk , SOCK_ZEROCOPY )) {
1093
1090
skb = tcp_write_queue_tail (sk );
1094
1091
uarg = msg_zerocopy_realloc (sk , size , skb_zcopy (skb ),
1095
- sockc_valid && !! sockc .dmabuf_id );
1092
+ ! sockc_err && sockc .dmabuf_id );
1096
1093
if (!uarg ) {
1097
1094
err = - ENOBUFS ;
1098
1095
goto out_err ;
@@ -1102,7 +1099,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
1102
1099
else
1103
1100
uarg_to_msgzc (uarg )-> zerocopy = 0 ;
1104
1101
1105
- if (sockc_valid && sockc .dmabuf_id ) {
1102
+ if (! sockc_err && sockc .dmabuf_id ) {
1106
1103
binding = net_devmem_get_binding (sk , sockc .dmabuf_id );
1107
1104
if (IS_ERR (binding )) {
1108
1105
err = PTR_ERR (binding );
@@ -1116,7 +1113,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
1116
1113
zc = MSG_SPLICE_PAGES ;
1117
1114
}
1118
1115
1119
- if (sockc_valid && sockc .dmabuf_id &&
1116
+ if (! sockc_err && sockc .dmabuf_id &&
1120
1117
(!(flags & MSG_ZEROCOPY ) || !sock_flag (sk , SOCK_ZEROCOPY ))) {
1121
1118
err = - EINVAL ;
1122
1119
goto out_err ;
@@ -1160,9 +1157,8 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
1160
1157
/* 'common' sending to sendq */
1161
1158
}
1162
1159
1163
- if (!sockc_valid ) {
1164
- if (!err )
1165
- err = - EINVAL ;
1160
+ if (sockc_err ) {
1161
+ err = sockc_err ;
1166
1162
goto out_err ;
1167
1163
}
1168
1164
0 commit comments