SUNRPC: Don't auto-disconnect from the local rpcbind socket
[linux-3.10.git] / net / x25 / x25_route.c
index 2a3fe98..277c8d2 100644 (file)
@@ -3,7 +3,7 @@
  *
  *     This is ALPHA test software. This code may break your machine,
  *     randomly fail to work with new releases, misbehave and/or generally
- *     screw up. It might even work. 
+ *     screw up. It might even work.
  *
  *     This code REQUIRES 2.1.15 or higher
  *
 
 #include <linux/if_arp.h>
 #include <linux/init.h>
+#include <linux/slab.h>
 #include <net/x25.h>
 
-struct list_head x25_route_list = LIST_HEAD_INIT(x25_route_list);
+LIST_HEAD(x25_route_list);
 DEFINE_RWLOCK(x25_route_list_lock);
 
 /*
@@ -65,7 +66,7 @@ out:
 
 /**
  * __x25_remove_route - remove route from x25_route_list
- * @rt - route to remove
+ * @rt: route to remove
  *
  * Remove route from x25_route_list. If it was there.
  * Caller must hold x25_route_list_lock.
@@ -119,6 +120,9 @@ void x25_route_device_down(struct net_device *dev)
                        __x25_remove_route(rt);
        }
        write_unlock_bh(&x25_route_list_lock);
+
+       /* Remove any related forwarding */
+       x25_clear_forward_by_dev(dev);
 }
 
 /*
@@ -126,15 +130,17 @@ void x25_route_device_down(struct net_device *dev)
  */
 struct net_device *x25_dev_get(char *devname)
 {
-       struct net_device *dev = dev_get_by_name(devname);
+       struct net_device *dev = dev_get_by_name(&init_net, devname);
 
        if (dev &&
            (!(dev->flags & IFF_UP) || (dev->type != ARPHRD_X25
-#if defined(CONFIG_LLC) || defined(CONFIG_LLC_MODULE)
+#if IS_ENABLED(CONFIG_LLC)
                                        && dev->type != ARPHRD_ETHER
 #endif
-                                       )))
+                                       ))){
                dev_put(dev);
+               dev = NULL;
+       }
 
        return dev;
 }
@@ -187,7 +193,7 @@ int x25_route_ioctl(unsigned int cmd, void __user *arg)
                goto out;
 
        rc = -EINVAL;
-       if (rt.sigdigits < 0 || rt.sigdigits > 15)
+       if (rt.sigdigits > 15)
                goto out;
 
        dev = x25_dev_get(rt.device);