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 ---