diff options
Diffstat (limited to 'net/rose/af_rose.c')
-rw-r--r-- | net/rose/af_rose.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index d0a67bb31363..08a542855654 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c | |||
@@ -67,6 +67,14 @@ static struct proto_ops rose_proto_ops; | |||
67 | ax25_address rose_callsign; | 67 | ax25_address rose_callsign; |
68 | 68 | ||
69 | /* | 69 | /* |
70 | * ROSE network devices are virtual network devices encapsulating ROSE | ||
71 | * frames into AX.25 which will be sent through an AX.25 device, so form a | ||
72 | * special "super class" of normal net devices; split their locks off into a | ||
73 | * separate class since they always nest. | ||
74 | */ | ||
75 | static struct lock_class_key rose_netdev_xmit_lock_key; | ||
76 | |||
77 | /* | ||
70 | * Convert a ROSE address into text. | 78 | * Convert a ROSE address into text. |
71 | */ | 79 | */ |
72 | const char *rose2asc(const rose_address *addr) | 80 | const char *rose2asc(const rose_address *addr) |
@@ -1490,14 +1498,13 @@ static int __init rose_proto_init(void) | |||
1490 | 1498 | ||
1491 | rose_callsign = null_ax25_address; | 1499 | rose_callsign = null_ax25_address; |
1492 | 1500 | ||
1493 | dev_rose = kmalloc(rose_ndevs * sizeof(struct net_device *), GFP_KERNEL); | 1501 | dev_rose = kzalloc(rose_ndevs * sizeof(struct net_device *), GFP_KERNEL); |
1494 | if (dev_rose == NULL) { | 1502 | if (dev_rose == NULL) { |
1495 | printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n"); | 1503 | printk(KERN_ERR "ROSE: rose_proto_init - unable to allocate device structure\n"); |
1496 | rc = -ENOMEM; | 1504 | rc = -ENOMEM; |
1497 | goto out_proto_unregister; | 1505 | goto out_proto_unregister; |
1498 | } | 1506 | } |
1499 | 1507 | ||
1500 | memset(dev_rose, 0x00, rose_ndevs * sizeof(struct net_device*)); | ||
1501 | for (i = 0; i < rose_ndevs; i++) { | 1508 | for (i = 0; i < rose_ndevs; i++) { |
1502 | struct net_device *dev; | 1509 | struct net_device *dev; |
1503 | char name[IFNAMSIZ]; | 1510 | char name[IFNAMSIZ]; |
@@ -1516,6 +1523,7 @@ static int __init rose_proto_init(void) | |||
1516 | free_netdev(dev); | 1523 | free_netdev(dev); |
1517 | goto fail; | 1524 | goto fail; |
1518 | } | 1525 | } |
1526 | lockdep_set_class(&dev->_xmit_lock, &rose_netdev_xmit_lock_key); | ||
1519 | dev_rose[i] = dev; | 1527 | dev_rose[i] = dev; |
1520 | } | 1528 | } |
1521 | 1529 | ||