@@ -1067,21 +1067,18 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
10671067 int flags , err , copied = 0 ;
10681068 int mss_now = 0 , size_goal , copied_syn = 0 ;
10691069 int process_backlog = 0 ;
1070- bool sockc_valid = true ;
1070+ int sockc_err = 0 ;
10711071 int zc = 0 ;
10721072 long timeo ;
10731073
10741074 flags = msg -> msg_flags ;
10751075
10761076 sockc = (struct sockcm_cookie ){ .tsflags = READ_ONCE (sk -> sk_tsflags ) };
10771077 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+ */
10851082 }
10861083
10871084 if ((flags & MSG_ZEROCOPY ) && size ) {
@@ -1092,7 +1089,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
10921089 } else if (sock_flag (sk , SOCK_ZEROCOPY )) {
10931090 skb = tcp_write_queue_tail (sk );
10941091 uarg = msg_zerocopy_realloc (sk , size , skb_zcopy (skb ),
1095- sockc_valid && !! sockc .dmabuf_id );
1092+ ! sockc_err && sockc .dmabuf_id );
10961093 if (!uarg ) {
10971094 err = - ENOBUFS ;
10981095 goto out_err ;
@@ -1102,7 +1099,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
11021099 else
11031100 uarg_to_msgzc (uarg )-> zerocopy = 0 ;
11041101
1105- if (sockc_valid && sockc .dmabuf_id ) {
1102+ if (! sockc_err && sockc .dmabuf_id ) {
11061103 binding = net_devmem_get_binding (sk , sockc .dmabuf_id );
11071104 if (IS_ERR (binding )) {
11081105 err = PTR_ERR (binding );
@@ -1116,7 +1113,7 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
11161113 zc = MSG_SPLICE_PAGES ;
11171114 }
11181115
1119- if (sockc_valid && sockc .dmabuf_id &&
1116+ if (! sockc_err && sockc .dmabuf_id &&
11201117 (!(flags & MSG_ZEROCOPY ) || !sock_flag (sk , SOCK_ZEROCOPY ))) {
11211118 err = - EINVAL ;
11221119 goto out_err ;
@@ -1160,9 +1157,8 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
11601157 /* 'common' sending to sendq */
11611158 }
11621159
1163- if (!sockc_valid ) {
1164- if (!err )
1165- err = - EINVAL ;
1160+ if (sockc_err ) {
1161+ err = sockc_err ;
11661162 goto out_err ;
11671163 }
11681164
0 commit comments