mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR (net-6.16-rc7). Conflicts: Documentation/netlink/specs/ovpn.yaml880d43ca9a("netlink: specs: clean up spaces in brackets")af52020fc5("ovpn: reject unexpected netlink attributes") drivers/net/phy/phy_device.ca44312d58e("net: phy: Don't register LEDs for genphy")f0f2b992d8("net: phy: Don't register LEDs for genphy") https://lore.kernel.org/20250710114926.7ec3a64f@kernel.org drivers/net/wireless/intel/iwlwifi/fw/regulatory.c drivers/net/wireless/intel/iwlwifi/mld/regulatory.c5fde0fcbd7("wifi: iwlwifi: mask reserved bits in chan_state_active_bitmap")ea045a0de3("wifi: iwlwifi: add support for accepting raw DSM tables by firmware") net/ipv6/mcast.cae3264a25a("ipv6: mcast: Delay put pmc->idev in mld_del_delrec()")a8594c956c("ipv6: mcast: Avoid a duplicate pointer check in mld_del_delrec()") https://lore.kernel.org/8cc52891-3653-4b03-a45e-05464fe495cf@kernel.org No adjacent changes. Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -2785,7 +2785,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
|
||||
int len_sum = 0;
|
||||
int status = TP_STATUS_AVAILABLE;
|
||||
int hlen, tlen, copylen = 0;
|
||||
long timeo = 0;
|
||||
long timeo;
|
||||
|
||||
mutex_lock(&po->pg_vec_lock);
|
||||
|
||||
@@ -2839,22 +2839,28 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
|
||||
if ((size_max > dev->mtu + reserve + VLAN_HLEN) && !vnet_hdr_sz)
|
||||
size_max = dev->mtu + reserve + VLAN_HLEN;
|
||||
|
||||
timeo = sock_sndtimeo(&po->sk, msg->msg_flags & MSG_DONTWAIT);
|
||||
reinit_completion(&po->skb_completion);
|
||||
|
||||
do {
|
||||
ph = packet_current_frame(po, &po->tx_ring,
|
||||
TP_STATUS_SEND_REQUEST);
|
||||
if (unlikely(ph == NULL)) {
|
||||
if (need_wait && skb) {
|
||||
timeo = sock_sndtimeo(&po->sk, msg->msg_flags & MSG_DONTWAIT);
|
||||
/* Note: packet_read_pending() might be slow if we
|
||||
* have to call it as it's per_cpu variable, but in
|
||||
* fast-path we don't have to call it, only when ph
|
||||
* is NULL, we need to check the pending_refcnt.
|
||||
*/
|
||||
if (need_wait && packet_read_pending(&po->tx_ring)) {
|
||||
timeo = wait_for_completion_interruptible_timeout(&po->skb_completion, timeo);
|
||||
if (timeo <= 0) {
|
||||
err = !timeo ? -ETIMEDOUT : -ERESTARTSYS;
|
||||
goto out_put;
|
||||
}
|
||||
}
|
||||
/* check for additional frames */
|
||||
continue;
|
||||
/* check for additional frames */
|
||||
continue;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
|
||||
skb = NULL;
|
||||
@@ -2943,14 +2949,7 @@ tpacket_error:
|
||||
}
|
||||
packet_increment_head(&po->tx_ring);
|
||||
len_sum += tp_len;
|
||||
} while (likely((ph != NULL) ||
|
||||
/* Note: packet_read_pending() might be slow if we have
|
||||
* to call it as it's per_cpu variable, but in fast-path
|
||||
* we already short-circuit the loop with the first
|
||||
* condition, and luckily don't have to go that path
|
||||
* anyway.
|
||||
*/
|
||||
(need_wait && packet_read_pending(&po->tx_ring))));
|
||||
} while (1);
|
||||
|
||||
err = len_sum;
|
||||
goto out_put;
|
||||
|
||||
Reference in New Issue
Block a user