Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc7 /net/ipv4/af_inet.c

Filename:/net/ipv4/af_inet.c
Lines Added:24
Lines Deleted:24
Also changed in: (Previous) 2.6.25-rc6-git8  2.6.25-rc6-git7  2.6.25-rc6-git6  2.6.25-rc6  2.6.25-rc5  2.6.25-rc4 
(Following) 2.6.25-rc8  2.6.25-rc9  2.6.25  2.6.25-git2  2.6.25-git3  2.6.25-git4 

Location
[  2.6.25-rc7
  [  net
    [  ipv4
       o  af_inet.c

Patch

diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index d2f22e7..0d10950 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -126,6 +126,10 @@ extern void ip_mc_drop_socket(struct sock *sk);
 static struct list_head inetsw[SOCK_MAX];
 static DEFINE_SPINLOCK(inetsw_lock);
 
+struct ipv4_config ipv4_config;
+
+EXPORT_SYMBOL(ipv4_config);
+
 /* New destruction routine */
 
 void inet_sock_destruct(struct sock *sk)
@@ -135,6 +139,8 @@ void inet_sock_destruct(struct sock *sk)
    __skb_queue_purge(&sk->sk_receive_queue);
    __skb_queue_purge(&sk->sk_error_queue);
 
+   sk_mem_reclaim(sk);
+
    if (sk->sk_type == SOCK_STREAM && sk->sk_state != TCP_CLOSE) {
       printk("Attempt to release TCP socket in state %d %p\n",
              sk->sk_state, sk);
@@ -440,7 +446,7 @@ int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
    if (addr_len < sizeof(struct sockaddr_in))
       goto out;
 
-   chk_addr_ret = inet_addr_type(addr->sin_addr.s_addr);
+   chk_addr_ret = inet_addr_type(&init_net, addr->sin_addr.s_addr);
 
    /* Not specified by any standard per-se, however it breaks too
     * many applications when removed.  It is unfortunate since
@@ -452,7 +458,7 @@ int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
    err = -EADDRNOTAVAIL;
    if (!sysctl_ip_nonlocal_bind &&
        !inet->freebind &&
-       addr->sin_addr.s_addr != INADDR_ANY &&
+       addr->sin_addr.s_addr != htonl(INADDR_ANY) &&
        chk_addr_ret != RTN_LOCAL &&
        chk_addr_ret != RTN_MULTICAST &&
        chk_addr_ret != RTN_BROADCAST)
@@ -789,12 +795,12 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
       case SIOCADDRT:
       case SIOCDELRT:
       case SIOCRTMSG:
-         err = ip_rt_ioctl(cmd, (void __user *)arg);
+         err = ip_rt_ioctl(sk->sk_net, cmd, (void __user *)arg);
          break;
       case SIOCDARP:
       case SIOCGARP:
       case SIOCSARP:
-         err = arp_ioctl(cmd, (void __user *)arg);
+         err = arp_ioctl(sk->sk_net, cmd, (void __user *)arg);
          break;
       case SIOCGIFADDR:
       case SIOCSIFADDR:
@@ -838,6 +844,7 @@ const struct proto_ops inet_stream_ops = {
    .recvmsg      = sock_common_recvmsg,
    .mmap         = sock_no_mmap,
    .sendpage      = tcp_sendpage,
+   .splice_read      = tcp_splice_read,
 #ifdef CONFIG_COMPAT
    .compat_setsockopt = compat_sock_common_setsockopt,
    .compat_getsockopt = compat_sock_common_getsockopt,
@@ -1106,7 +1113,7 @@ int inet_sk_rebuild_header(struct sock *sk)
    };
 
    security_sk_classify_flow(sk, &fl);
-   err = ip_route_output_flow(&rt, &fl, sk, 0);
+   err = ip_route_output_flow(&init_net, &rt, &fl, sk, 0);
 }
    if (!err)
       sk_setup_caps(sk, &rt->u.dst);
@@ -1237,7 +1244,7 @@ unsigned long snmp_fold_field(void *mib[], int offt)
 }
 EXPORT_SYMBOL_GPL(snmp_fold_field);
 
-int snmp_mib_init(void *ptr[2], size_t mibsize, size_t mibalign)
+int snmp_mib_init(void *ptr[2], size_t mibsize)
 {
    BUG_ON(ptr == NULL);
    ptr[0] = __alloc_percpu(mibsize);
@@ -1286,37 +1293,31 @@ static struct net_protocol udp_protocol = {
 
 static struct net_protocol icmp_protocol = {
    .handler =   icmp_rcv,
+   .no_policy =   1,
 };
 
 static int __init init_ipv4_mibs(void)
 {
    if (snmp_mib_init((void **)net_statistics,
-           sizeof(struct linux_mib),
-           __alignof__(struct linux_mib)) < 0)
+           sizeof(struct linux_mib)) < 0)
       goto err_net_mib;
    if (snmp_mib_init((void **)ip_statistics,
-           sizeof(struct ipstats_mib),
-           __alignof__(struct ipstats_mib)) < 0)
+           sizeof(struct ipstats_mib)) < 0)
       goto err_ip_mib;
    if (snmp_mib_init((void **)icmp_statistics,
-           sizeof(struct icmp_mib),
-           __alignof__(struct icmp_mib)) < 0)
+           sizeof(struct icmp_mib)) < 0)
       goto err_icmp_mib;
    if (snmp_mib_init((void **)icmpmsg_statistics,
-           sizeof(struct icmpmsg_mib),
-           __alignof__(struct icmpmsg_mib)) < 0)
+           sizeof(struct icmpmsg_mib)) < 0)
       goto err_icmpmsg_mib;
    if (snmp_mib_init((void **)tcp_statistics,
-           sizeof(struct tcp_mib),
-           __alignof__(struct tcp_mib)) < 0)
+           sizeof(struct tcp_mib)) < 0)
       goto err_tcp_mib;
    if (snmp_mib_init((void **)udp_statistics,
-           sizeof(struct udp_mib),
-           __alignof__(struct udp_mib)) < 0)
+           sizeof(struct udp_mib)) < 0)
       goto err_udp_mib;
    if (snmp_mib_init((void **)udplite_statistics,
-           sizeof(struct udp_mib),
-           __alignof__(struct udp_mib)) < 0)
+           sizeof(struct udp_mib)) < 0)
       goto err_udplite_mib;
 
    tcp_mib_init();
@@ -1418,6 +1419,9 @@ static int __init inet_init(void)
    /* Setup TCP slab cache for open requests. */
    tcp_init();
 
+   /* Setup UDP memory threshold */
+   udp_init();
+
    /* Add UDP-Lite (RFC 3828) */
    udplite4_register();
 
@@ -1471,15 +1475,11 @@ static int __init ipv4_proc_init(void)
       goto out_tcp;
    if (udp4_proc_init())
       goto out_udp;
-   if (fib_proc_init())
-      goto out_fib;
    if (ip_misc_proc_init())
       goto out_misc;
 out:
    return rc;
 out_misc:
-   fib_proc_exit();
-out_fib:
    udp4_proc_exit();
 out_udp:
    tcp4_proc_exit();


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.