patch-2.1.90 linux/net/ipv4/udp.c
Next file: linux/net/ipv6/addrconf.c
Previous file: linux/net/ipv4/timer.c
Back to the patch index
Back to the overall index
- Lines: 52
- Date:
Thu Mar 12 10:32:04 1998
- Orig file:
v2.1.89/linux/net/ipv4/udp.c
- Orig date:
Tue Mar 10 10:03:37 1998
diff -u --recursive --new-file v2.1.89/linux/net/ipv4/udp.c linux/net/ipv4/udp.c
@@ -5,7 +5,7 @@
*
* The User Datagram Protocol (UDP).
*
- * Version: $Id: udp.c,v 1.47 1997/12/27 20:41:16 kuznet Exp $
+ * Version: $Id: udp.c,v 1.53 1998/03/12 03:20:00 davem Exp $
*
* Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
@@ -828,7 +828,7 @@
* of this packet since that is all
* that will be read.
*/
- amount = skb->tail - skb->h.raw;
+ amount = skb->len - sizeof(struct udphdr);
}
return put_user(amount, (int *)arg);
}
@@ -1033,17 +1033,18 @@
/*
* Multicasts and broadcasts go to each listener.
+ *
+ * Note: called only from the BH handler context,
+ * so we don't need to lock the hashes.
*/
static int udp_v4_mcast_deliver(struct sk_buff *skb, struct udphdr *uh,
u32 saddr, u32 daddr)
{
struct sock *sk;
- int given = 0;
- SOCKHASH_LOCK();
sk = udp_hash[ntohs(uh->dest) & (UDP_HTABLE_SIZE - 1)];
sk = udp_v4_mcast_next(sk, uh->dest, saddr, uh->source, daddr);
- if(sk) {
+ if (sk) {
struct sock *sknext = NULL;
do {
@@ -1058,10 +1059,7 @@
udp_deliver(sk, skb1);
sk = sknext;
} while(sknext);
- given = 1;
- }
- SOCKHASH_UNLOCK();
- if(!given)
+ } else
kfree_skb(skb);
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov