fix the treatment of jfs special inodes
[safe/jmp/linux-2.6] / net / ipv4 / datagram.c
index 0072d79..5e6c5a0 100644 (file)
@@ -29,18 +29,18 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
        int oif;
        int err;
 
-       
-       if (addr_len < sizeof(*usin)) 
-               return -EINVAL;
 
-       if (usin->sin_family != AF_INET) 
-               return -EAFNOSUPPORT;
+       if (addr_len < sizeof(*usin))
+               return -EINVAL;
+
+       if (usin->sin_family != AF_INET)
+               return -EAFNOSUPPORT;
 
        sk_dst_reset(sk);
 
        oif = sk->sk_bound_dev_if;
        saddr = inet->saddr;
-       if (MULTICAST(usin->sin_addr.s_addr)) {
+       if (ipv4_is_multicast(usin->sin_addr.s_addr)) {
                if (!oif)
                        oif = inet->mc_index;
                if (!saddr)
@@ -50,14 +50,18 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
                               RT_CONN_FLAGS(sk), oif,
                               sk->sk_protocol,
                               inet->sport, usin->sin_port, sk, 1);
-       if (err)
+       if (err) {
+               if (err == -ENETUNREACH)
+                       IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
                return err;
+       }
+
        if ((rt->rt_flags & RTCF_BROADCAST) && !sock_flag(sk, SOCK_BROADCAST)) {
                ip_rt_put(rt);
                return -EACCES;
        }
-       if (!inet->saddr)
-               inet->saddr = rt->rt_src;       /* Update source address */
+       if (!inet->saddr)
+               inet->saddr = rt->rt_src;       /* Update source address */
        if (!inet->rcv_saddr)
                inet->rcv_saddr = rt->rt_src;
        inet->daddr = rt->rt_dst;