linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / net / netrom / af_netrom.c
index 1d50f80..d44981f 100644 (file)
@@ -8,6 +8,7 @@
  * Copyright Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
  * Copyright Darryl Miles G7LED (dlm@g7led.demon.co.uk)
  */
+#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/capability.h>
@@ -65,14 +66,6 @@ static DEFINE_SPINLOCK(nr_list_lock);
 
 static const struct proto_ops nr_proto_ops;
 
-/*
- * NETROM network devices are virtual network devices encapsulating NETROM
- * frames into AX.25 which will be sent through an AX.25 device, so form a
- * special "super class" of normal net devices; split their locks off into a
- * separate class since they always nest.
- */
-static struct lock_class_key nr_netdev_xmit_lock_key;
-
 /*
  *     Socket removal during an interrupt is now safe.
  */
@@ -432,16 +425,11 @@ static int nr_create(struct socket *sock, int protocol)
 
        nr_init_timers(sk);
 
-       nr->t1     =
-               msecs_to_jiffies(sysctl_netrom_transport_timeout);
-       nr->t2     =
-               msecs_to_jiffies(sysctl_netrom_transport_acknowledge_delay);
-       nr->n2     =
-               msecs_to_jiffies(sysctl_netrom_transport_maximum_tries);
-       nr->t4     =
-               msecs_to_jiffies(sysctl_netrom_transport_busy_delay);
-       nr->idle   =
-               msecs_to_jiffies(sysctl_netrom_transport_no_activity_timeout);
+       nr->t1     = sysctl_netrom_transport_timeout;
+       nr->t2     = sysctl_netrom_transport_acknowledge_delay;
+       nr->n2     = sysctl_netrom_transport_maximum_tries;
+       nr->t4     = sysctl_netrom_transport_busy_delay;
+       nr->idle   = sysctl_netrom_transport_no_activity_timeout;
        nr->window = sysctl_netrom_transport_requested_window_size;
 
        nr->bpqext = 1;
@@ -808,7 +796,7 @@ static int nr_accept(struct socket *sock, struct socket *newsock, int flags)
 
        /* Now attach up the new socket */
        kfree_skb(skb);
-       sk_acceptq_removed(sk);
+       sk->sk_ack_backlog--;
        newsock->sk = newsk;
 
 out:
@@ -993,19 +981,19 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
        nr_make->vr        = 0;
        nr_make->vl        = 0;
        nr_make->state     = NR_STATE_3;
-       sk_acceptq_added(sk);
-       skb_queue_head(&sk->sk_receive_queue, skb);
-
-       if (!sock_flag(sk, SOCK_DEAD))
-               sk->sk_data_ready(sk, skb->len);
-
-       bh_unlock_sock(sk);
+       sk->sk_ack_backlog++;
 
        nr_insert_socket(make);
 
+       skb_queue_head(&sk->sk_receive_queue, skb);
+
        nr_start_heartbeat(make);
        nr_start_idletimer(make);
 
+       if (!sock_flag(sk, SOCK_DEAD))
+               sk->sk_data_ready(sk, skb->len);
+
+       bh_unlock_sock(sk);
        return 1;
 }
 
@@ -1377,6 +1365,8 @@ static struct notifier_block nr_dev_notifier = {
 
 static struct net_device **dev_nr;
 
+static char banner[] __initdata = KERN_INFO "G4KLX NET/ROM for Linux. Version 0.7 for AX25.037 Linux 2.4\n";
+
 static int __init nr_proto_init(void)
 {
        int i;
@@ -1390,12 +1380,14 @@ static int __init nr_proto_init(void)
                return -1;
        }
 
-       dev_nr = kzalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
+       dev_nr = kmalloc(nr_ndevs * sizeof(struct net_device *), GFP_KERNEL);
        if (dev_nr == NULL) {
                printk(KERN_ERR "NET/ROM: nr_proto_init - unable to allocate device array\n");
                return -1;
        }
 
+       memset(dev_nr, 0x00, nr_ndevs * sizeof(struct net_device *));
+
        for (i = 0; i < nr_ndevs; i++) {
                char name[IFNAMSIZ];
                struct net_device *dev;
@@ -1413,7 +1405,6 @@ static int __init nr_proto_init(void)
                        free_netdev(dev);
                        goto fail;
                }
-               lockdep_set_class(&dev->_xmit_lock, &nr_netdev_xmit_lock_key);
                dev_nr[i] = dev;
        }
 
@@ -1423,6 +1414,7 @@ static int __init nr_proto_init(void)
        }
                
        register_netdevice_notifier(&nr_dev_notifier);
+       printk(banner);
 
        ax25_protocol_register(AX25_P_NETROM, nr_route_frame);
        ax25_linkfail_register(nr_link_failed);