git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge to kernel-2.6.20-1.2949.fc6.vs2.2.0.1
[linux-2.6.git]
/
net
/
core
/
datagram.c
diff --git
a/net/core/datagram.c
b/net/core/datagram.c
index
b8ce6bf
..
797fdd4
100644
(file)
--- a/
net/core/datagram.c
+++ b/
net/core/datagram.c
@@
-321,7
+321,7
@@
fault:
static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
u8 __user *to, int len,
static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
u8 __user *to, int len,
-
unsigned int
*csump)
+
__wsum
*csump)
{
int start = skb_headlen(skb);
int pos = 0;
{
int start = skb_headlen(skb);
int pos = 0;
@@
-350,7
+350,7
@@
static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
end = start + skb_shinfo(skb)->frags[i].size;
if ((copy = end - offset) > 0) {
end = start + skb_shinfo(skb)->frags[i].size;
if ((copy = end - offset) > 0) {
-
unsigned int
csum2;
+
__wsum
csum2;
int err = 0;
u8 *vaddr;
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
int err = 0;
u8 *vaddr;
skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
@@
-386,7
+386,7
@@
static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
end = start + list->len;
if ((copy = end - offset) > 0) {
end = start + list->len;
if ((copy = end - offset) > 0) {
-
unsigned int
csum2 = 0;
+
__wsum
csum2 = 0;
if (copy > len)
copy = len;
if (skb_copy_and_csum_datagram(list,
if (copy > len)
copy = len;
if (skb_copy_and_csum_datagram(list,
@@
-411,13
+411,13
@@
fault:
return -EFAULT;
}
return -EFAULT;
}
-
unsigned int
__skb_checksum_complete(struct sk_buff *skb)
+
__sum16
__skb_checksum_complete(struct sk_buff *skb)
{
{
-
unsigned int
sum;
+
__sum16
sum;
- sum =
(u16)
csum_fold(skb_checksum(skb, 0, skb->len, skb->csum));
+ sum = csum_fold(skb_checksum(skb, 0, skb->len, skb->csum));
if (likely(!sum)) {
if (likely(!sum)) {
- if (unlikely(skb->ip_summed == CHECKSUM_
HW
))
+ if (unlikely(skb->ip_summed == CHECKSUM_
COMPLETE
))
netdev_rx_csum_fault(skb->dev);
skb->ip_summed = CHECKSUM_UNNECESSARY;
}
netdev_rx_csum_fault(skb->dev);
skb->ip_summed = CHECKSUM_UNNECESSARY;
}
@@
-441,7
+441,7
@@
EXPORT_SYMBOL(__skb_checksum_complete);
int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
int hlen, struct iovec *iov)
{
int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
int hlen, struct iovec *iov)
{
-
unsigned int
csum;
+
__wsum
csum;
int chunk = skb->len - hlen;
/* Skip filled elements.
int chunk = skb->len - hlen;
/* Skip filled elements.
@@
-460,9
+460,9
@@
int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
if (skb_copy_and_csum_datagram(skb, hlen, iov->iov_base,
chunk, &csum))
goto fault;
if (skb_copy_and_csum_datagram(skb, hlen, iov->iov_base,
chunk, &csum))
goto fault;
- if (
(unsigned short)
csum_fold(csum))
+ if (csum_fold(csum))
goto csum_error;
goto csum_error;
- if (unlikely(skb->ip_summed == CHECKSUM_
HW
))
+ if (unlikely(skb->ip_summed == CHECKSUM_
COMPLETE
))
netdev_rx_csum_fault(skb->dev);
iov->iov_len -= chunk;
iov->iov_base += chunk;
netdev_rx_csum_fault(skb->dev);
iov->iov_len -= chunk;
iov->iov_base += chunk;
@@
-500,6
+500,8
@@
unsigned int datagram_poll(struct file *file, struct socket *sock,
/* exceptional events? */
if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
mask |= POLLERR;
/* exceptional events? */
if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
mask |= POLLERR;
+ if (sk->sk_shutdown & RCV_SHUTDOWN)
+ mask |= POLLRDHUP;
if (sk->sk_shutdown == SHUTDOWN_MASK)
mask |= POLLHUP;
if (sk->sk_shutdown == SHUTDOWN_MASK)
mask |= POLLHUP;