sock.c (7768eed8bf1d2e5eefa38c573f15f737a9824052) | sock.c (33cf7c90fe2f97afb1cadaa0cfb782cb9d1b9ee2) |
---|---|
1/* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Generic socket support routines. Memory allocators, socket lock/release 7 * handler for protocols to use and generic option handler. 8 * --- 452 unchanged lines hidden (view full) --- 461 skb_set_owner_r(skb, sk); 462 463 /* we escape from rcu protected region, make sure we dont leak 464 * a norefcounted dst 465 */ 466 skb_dst_force(skb); 467 468 spin_lock_irqsave(&list->lock, flags); | 1/* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Generic socket support routines. Memory allocators, socket lock/release 7 * handler for protocols to use and generic option handler. 8 * --- 452 unchanged lines hidden (view full) --- 461 skb_set_owner_r(skb, sk); 462 463 /* we escape from rcu protected region, make sure we dont leak 464 * a norefcounted dst 465 */ 466 skb_dst_force(skb); 467 468 spin_lock_irqsave(&list->lock, flags); |
469 skb->dropcount = atomic_read(&sk->sk_drops); | 469 sock_skb_set_dropcount(sk, skb); |
470 __skb_queue_tail(list, skb); 471 spin_unlock_irqrestore(&list->lock, flags); 472 473 if (!sock_flag(sk, SOCK_DEAD)) 474 sk->sk_data_ready(sk); 475 return 0; 476} 477EXPORT_SYMBOL(sock_queue_rcv_skb); --- 1055 unchanged lines hidden (view full) --- 1533 sk_free(newsk); 1534 newsk = NULL; 1535 goto out; 1536 } 1537 1538 newsk->sk_err = 0; 1539 newsk->sk_priority = 0; 1540 newsk->sk_incoming_cpu = raw_smp_processor_id(); | 470 __skb_queue_tail(list, skb); 471 spin_unlock_irqrestore(&list->lock, flags); 472 473 if (!sock_flag(sk, SOCK_DEAD)) 474 sk->sk_data_ready(sk); 475 return 0; 476} 477EXPORT_SYMBOL(sock_queue_rcv_skb); --- 1055 unchanged lines hidden (view full) --- 1533 sk_free(newsk); 1534 newsk = NULL; 1535 goto out; 1536 } 1537 1538 newsk->sk_err = 0; 1539 newsk->sk_priority = 0; 1540 newsk->sk_incoming_cpu = raw_smp_processor_id(); |
1541 atomic64_set(&newsk->sk_cookie, 0); |
|
1541 /* 1542 * Before updating sk_refcnt, we must commit prior changes to memory 1543 * (Documentation/RCU/rculist_nulls.txt for details) 1544 */ 1545 smp_wmb(); 1546 atomic_set(&newsk->sk_refcnt, 2); 1547 1548 /* --- 101 unchanged lines hidden (view full) --- 1650 struct sock *sk = skb->sk; 1651 unsigned int len = skb->truesize; 1652 1653 atomic_sub(len, &sk->sk_rmem_alloc); 1654 sk_mem_uncharge(sk, len); 1655} 1656EXPORT_SYMBOL(sock_rfree); 1657 | 1542 /* 1543 * Before updating sk_refcnt, we must commit prior changes to memory 1544 * (Documentation/RCU/rculist_nulls.txt for details) 1545 */ 1546 smp_wmb(); 1547 atomic_set(&newsk->sk_refcnt, 2); 1548 1549 /* --- 101 unchanged lines hidden (view full) --- 1651 struct sock *sk = skb->sk; 1652 unsigned int len = skb->truesize; 1653 1654 atomic_sub(len, &sk->sk_rmem_alloc); 1655 sk_mem_uncharge(sk, len); 1656} 1657EXPORT_SYMBOL(sock_rfree); 1658 |
1658/* 1659 * Buffer destructor for skbs that are not used directly in read or write 1660 * path, e.g. for error handler skbs. Automatically called from kfree_skb. 1661 */ | |
1662void sock_efree(struct sk_buff *skb) 1663{ 1664 sock_put(skb->sk); 1665} 1666EXPORT_SYMBOL(sock_efree); 1667 1668#ifdef CONFIG_INET 1669void sock_edemux(struct sk_buff *skb) --- 492 unchanged lines hidden (view full) --- 2162 2163int sock_no_getsockopt(struct socket *sock, int level, int optname, 2164 char __user *optval, int __user *optlen) 2165{ 2166 return -EOPNOTSUPP; 2167} 2168EXPORT_SYMBOL(sock_no_getsockopt); 2169 | 1659void sock_efree(struct sk_buff *skb) 1660{ 1661 sock_put(skb->sk); 1662} 1663EXPORT_SYMBOL(sock_efree); 1664 1665#ifdef CONFIG_INET 1666void sock_edemux(struct sk_buff *skb) --- 492 unchanged lines hidden (view full) --- 2159 2160int sock_no_getsockopt(struct socket *sock, int level, int optname, 2161 char __user *optval, int __user *optlen) 2162{ 2163 return -EOPNOTSUPP; 2164} 2165EXPORT_SYMBOL(sock_no_getsockopt); 2166 |
2170int sock_no_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, 2171 size_t len) | 2167int sock_no_sendmsg(struct socket *sock, struct msghdr *m, size_t len) |
2172{ 2173 return -EOPNOTSUPP; 2174} 2175EXPORT_SYMBOL(sock_no_sendmsg); 2176 | 2168{ 2169 return -EOPNOTSUPP; 2170} 2171EXPORT_SYMBOL(sock_no_sendmsg); 2172 |
2177int sock_no_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, 2178 size_t len, int flags) | 2173int sock_no_recvmsg(struct socket *sock, struct msghdr *m, size_t len, 2174 int flags) |
2179{ 2180 return -EOPNOTSUPP; 2181} 2182EXPORT_SYMBOL(sock_no_recvmsg); 2183 2184int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma) 2185{ 2186 /* Mirror missing mmap method error code */ --- 355 unchanged lines hidden (view full) --- 2542 if (sk->sk_prot->compat_getsockopt != NULL) 2543 return sk->sk_prot->compat_getsockopt(sk, level, optname, 2544 optval, optlen); 2545 return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen); 2546} 2547EXPORT_SYMBOL(compat_sock_common_getsockopt); 2548#endif 2549 | 2175{ 2176 return -EOPNOTSUPP; 2177} 2178EXPORT_SYMBOL(sock_no_recvmsg); 2179 2180int sock_no_mmap(struct file *file, struct socket *sock, struct vm_area_struct *vma) 2181{ 2182 /* Mirror missing mmap method error code */ --- 355 unchanged lines hidden (view full) --- 2538 if (sk->sk_prot->compat_getsockopt != NULL) 2539 return sk->sk_prot->compat_getsockopt(sk, level, optname, 2540 optval, optlen); 2541 return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen); 2542} 2543EXPORT_SYMBOL(compat_sock_common_getsockopt); 2544#endif 2545 |
2550int sock_common_recvmsg(struct kiocb *iocb, struct socket *sock, 2551 struct msghdr *msg, size_t size, int flags) | 2546int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, 2547 int flags) |
2552{ 2553 struct sock *sk = sock->sk; 2554 int addr_len = 0; 2555 int err; 2556 | 2548{ 2549 struct sock *sk = sock->sk; 2550 int addr_len = 0; 2551 int err; 2552 |
2557 err = sk->sk_prot->recvmsg(iocb, sk, msg, size, flags & MSG_DONTWAIT, | 2553 err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT, |
2558 flags & ~MSG_DONTWAIT, &addr_len); 2559 if (err >= 0) 2560 msg->msg_namelen = addr_len; 2561 return err; 2562} 2563EXPORT_SYMBOL(sock_common_recvmsg); 2564 2565/* --- 399 unchanged lines hidden --- | 2554 flags & ~MSG_DONTWAIT, &addr_len); 2555 if (err >= 0) 2556 msg->msg_namelen = addr_len; 2557 return err; 2558} 2559EXPORT_SYMBOL(sock_common_recvmsg); 2560 2561/* --- 399 unchanged lines hidden --- |