@@ -2008,6 +2008,7 @@ static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page,
2008
2008
2009
2009
if (false) {
2010
2010
alloc_skb :
2011
+ spin_unlock (& other -> sk_receive_queue .lock );
2011
2012
unix_state_unlock (other );
2012
2013
mutex_unlock (& unix_sk (other )-> iolock );
2013
2014
newskb = sock_alloc_send_pskb (sk , 0 , 0 , flags & MSG_DONTWAIT ,
@@ -2047,6 +2048,7 @@ static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page,
2047
2048
init_scm = false;
2048
2049
}
2049
2050
2051
+ spin_lock (& other -> sk_receive_queue .lock );
2050
2052
skb = skb_peek_tail (& other -> sk_receive_queue );
2051
2053
if (tail && tail == skb ) {
2052
2054
skb = newskb ;
@@ -2077,14 +2079,11 @@ static ssize_t unix_stream_sendpage(struct socket *socket, struct page *page,
2077
2079
refcount_add (size , & sk -> sk_wmem_alloc );
2078
2080
2079
2081
if (newskb ) {
2080
- err = unix_scm_to_skb (& scm , skb , false);
2081
- if (err )
2082
- goto err_state_unlock ;
2083
- spin_lock (& other -> sk_receive_queue .lock );
2082
+ unix_scm_to_skb (& scm , skb , false);
2084
2083
__skb_queue_tail (& other -> sk_receive_queue , newskb );
2085
- spin_unlock (& other -> sk_receive_queue .lock );
2086
2084
}
2087
2085
2086
+ spin_unlock (& other -> sk_receive_queue .lock );
2088
2087
unix_state_unlock (other );
2089
2088
mutex_unlock (& unix_sk (other )-> iolock );
2090
2089
0 commit comments