summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.davemloft.net>2004-04-16 08:50:51 -0700
committerDavid S. Miller <davem@nuts.davemloft.net>2004-04-16 08:50:51 -0700
commite9fae7f4e0d3e4eaedb8922ed48c93a08fd7ebae (patch)
tree9ce4ba14423d4572cff0a86c4a51c4c7747acb95 /net
parenteb30e17b76311e26b47bfd3a4ef70dd2cffbf295 (diff)
parent3b32207738936ea61c3d796ae4840e70b5fc21d5 (diff)
Merge nuts.davemloft.net:/disk1/BK/network-2.6
into nuts.davemloft.net:/disk1/BK/net-2.6
Diffstat (limited to 'net')
-rw-r--r--net/core/netpoll.c31
-rw-r--r--net/core/sock.c4
2 files changed, 11 insertions, 24 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index dc8e76808546..32f946ee687e 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -163,21 +163,15 @@ repeat:
spin_lock(&np->dev->xmit_lock);
np->dev->xmit_lock_owner = smp_processor_id();
- if (netif_queue_stopped(np->dev)) {
- np->dev->xmit_lock_owner = -1;
- spin_unlock(&np->dev->xmit_lock);
-
- netpoll_poll(np);
- goto repeat;
- }
-
status = np->dev->hard_start_xmit(skb, np->dev);
np->dev->xmit_lock_owner = -1;
spin_unlock(&np->dev->xmit_lock);
/* transmit busy */
- if(status)
+ if(status) {
+ netpoll_poll(np);
goto repeat;
+ }
}
void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
@@ -231,9 +225,8 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
static void arp_reply(struct sk_buff *skb)
{
- struct in_device *in_dev = (struct in_device *) skb->dev->ip_ptr;
struct arphdr *arp;
- unsigned char *arp_ptr, *sha, *tha;
+ unsigned char *arp_ptr;
int size, type = ARPOP_REPLY, ptype = ETH_P_ARP;
u32 sip, tip;
struct sk_buff *send_skb;
@@ -253,7 +246,7 @@ static void arp_reply(struct sk_buff *skb)
if (!np) return;
/* No arp on this interface */
- if (!in_dev || skb->dev->flags & IFF_NOARP)
+ if (skb->dev->flags & IFF_NOARP)
return;
if (!pskb_may_pull(skb, (sizeof(struct arphdr) +
@@ -270,21 +263,15 @@ static void arp_reply(struct sk_buff *skb)
arp->ar_op != htons(ARPOP_REQUEST))
return;
- arp_ptr= (unsigned char *)(arp+1);
- sha = arp_ptr;
- arp_ptr += skb->dev->addr_len;
+ arp_ptr = (unsigned char *)(arp+1) + skb->dev->addr_len;
memcpy(&sip, arp_ptr, 4);
- arp_ptr += 4;
- tha = arp_ptr;
- arp_ptr += skb->dev->addr_len;
+ arp_ptr += 4 + skb->dev->addr_len;
memcpy(&tip, arp_ptr, 4);
/* Should we ignore arp? */
- if (tip != in_dev->ifa_list->ifa_address ||
- LOOPBACK(tip) || MULTICAST(tip))
+ if (tip != htonl(np->local_ip) || LOOPBACK(tip) || MULTICAST(tip))
return;
-
size = sizeof(struct arphdr) + 2 * (skb->dev->addr_len + 4);
send_skb = find_skb(np, size + LL_RESERVED_SPACE(np->dev),
LL_RESERVED_SPACE(np->dev));
@@ -325,7 +312,7 @@ static void arp_reply(struct sk_buff *skb)
arp_ptr += np->dev->addr_len;
memcpy(arp_ptr, &tip, 4);
arp_ptr += 4;
- memcpy(arp_ptr, np->local_mac, np->dev->addr_len);
+ memcpy(arp_ptr, np->remote_mac, np->dev->addr_len);
arp_ptr += np->dev->addr_len;
memcpy(arp_ptr, &sip, 4);
diff --git a/net/core/sock.c b/net/core/sock.c
index 97e3ebea5222..92bc77ad6ce9 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -977,13 +977,13 @@ int sock_no_shutdown(struct socket *sock, int how)
}
int sock_no_setsockopt(struct socket *sock, int level, int optname,
- char *optval, int optlen)
+ char __user *optval, int optlen)
{
return -EOPNOTSUPP;
}
int sock_no_getsockopt(struct socket *sock, int level, int optname,
- char *optval, int *optlen)
+ char __user *optval, int __user *optlen)
{
return -EOPNOTSUPP;
}