diff options
| author | Takashi Iwai <[email protected]> | 2024-05-13 11:39:49 +0200 | 
|---|---|---|
| committer | Takashi Iwai <[email protected]> | 2024-05-13 11:39:49 +0200 | 
| commit | 3a07362fab1653d3aca31a9155c8cc776138fd02 (patch) | |
| tree | 91ecdfabfce8f12bffa2fb64a595a821b67d3422 /net/unix/af_unix.c | |
| parent | 762e6af39883a816290286d5d46a20bbd0f3a135 (diff) | |
| parent | c3c5ac4bd7d7019f2e3ad1720572d53226fe656e (diff) | |
Merge tag 'asoc-v6.10' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Updates for v6.10
This is a very big update, in large part due to extensive work the Intel
people have been doing in their drivers though it's also been busy
elsewhere.  There's also a big overhaul of the DAPM documentation from
Luca Ceresoli arising from the work he did putting together his recent
ELC talk, and he also contributed a new tool for visualising the DAPM
state.
 - A new tool dapm-graph for visualising the DAPM state.
 - Substantial fixes and clarifications for the DAPM documentation.
 - Very large updates throughout the Intel audio drivers.
 - Cleanups of accessors for driver data, module labelling, and for
   constification.
 - Modernsation and cleanup work in the Mediatek drivers.
 - Several fixes and features for the DaVinci I2S driver.
 - New drivers for several AMD and Intel platforms, Nuvoton NAU8325,
   Rockchip RK3308 and Texas Instruments PCM6240.
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 5b41e2321209..9a6ad5974dff 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -2663,9 +2663,13 @@ static struct sk_buff *manage_oob(struct sk_buff *skb, struct sock *sk,  					WRITE_ONCE(u->oob_skb, NULL);  					consume_skb(skb);  				} -			} else if (!(flags & MSG_PEEK)) { +			} else if (flags & MSG_PEEK) { +				skb = NULL; +			} else {  				skb_unlink(skb, &sk->sk_receive_queue); -				consume_skb(skb); +				WRITE_ONCE(u->oob_skb, NULL); +				if (!WARN_ON_ONCE(skb_unref(skb))) +					kfree_skb(skb);  				skb = skb_peek(&sk->sk_receive_queue);  			}  		} @@ -2739,18 +2743,16 @@ redo:  		last = skb = skb_peek(&sk->sk_receive_queue);  		last_len = last ? last->len : 0; +again:  #if IS_ENABLED(CONFIG_AF_UNIX_OOB)  		if (skb) {  			skb = manage_oob(skb, sk, flags, copied); -			if (!skb) { +			if (!skb && copied) {  				unix_state_unlock(sk); -				if (copied) -					break; -				goto redo; +				break;  			}  		}  #endif -again:  		if (skb == NULL) {  			if (copied >= target)  				goto unlock;  |