firewire: net: fix card driver reloading

Fix some problems from "firewire: net: allow for unordered unit
discovery":
- fwnet_remove was missing a list_del, causing fwnet_probe to crash if
called after fwnet_remove, e.g. if firewire-ohci was unloaded and
reloaded.
- fwnet_probe should set its new_netdev flag only if it actually
allocated a net_device.
- Use dev_set_drvdata and dev_get_drvdata instead of deprecated direct
access to device.driver_data.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>

+10 -8
+10 -8
drivers/firewire/net.c
··· 1390 1390 if (!peer) 1391 1391 return -ENOMEM; 1392 1392 1393 - unit->device.driver_data = peer; 1393 + dev_set_drvdata(&unit->device, peer); 1394 + 1394 1395 peer->dev = dev; 1395 1396 peer->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4]; 1396 1397 peer->fifo = FWNET_NO_FIFO_ADDR; ··· 1418 1417 struct fw_device *device = fw_parent_device(unit); 1419 1418 struct fw_card *card = device->card; 1420 1419 struct net_device *net; 1420 + bool allocated_netdev = false; 1421 1421 struct fwnet_device *dev; 1422 1422 unsigned max_mtu; 1423 - bool new_netdev; 1424 1423 int ret; 1425 1424 1426 1425 mutex_lock(&fwnet_device_mutex); 1427 1426 1428 1427 dev = fwnet_dev_find(card); 1429 1428 if (dev) { 1430 - new_netdev = false; 1431 1429 net = dev->netdev; 1432 1430 goto have_dev; 1433 1431 } 1434 1432 1435 - new_netdev = true; 1436 1433 net = alloc_netdev(sizeof(*dev), "firewire%d", fwnet_init_dev); 1437 1434 if (net == NULL) { 1438 1435 ret = -ENOMEM; 1439 1436 goto out; 1440 1437 } 1441 1438 1439 + allocated_netdev = true; 1442 1440 SET_NETDEV_DEV(net, card->device); 1443 1441 dev = netdev_priv(net); 1444 1442 ··· 1479 1479 net->name, (unsigned long long)card->guid); 1480 1480 have_dev: 1481 1481 ret = fwnet_add_peer(dev, unit, device); 1482 - if (ret && new_netdev) { 1482 + if (ret && allocated_netdev) { 1483 1483 unregister_netdev(net); 1484 1484 list_del(&dev->dev_link); 1485 1485 } 1486 1486 out: 1487 - if (ret && new_netdev) 1487 + if (ret && allocated_netdev) 1488 1488 free_netdev(net); 1489 1489 1490 1490 mutex_unlock(&fwnet_device_mutex); ··· 1508 1508 1509 1509 static int fwnet_remove(struct device *_dev) 1510 1510 { 1511 - struct fwnet_peer *peer = _dev->driver_data; 1511 + struct fwnet_peer *peer = dev_get_drvdata(_dev); 1512 1512 struct fwnet_device *dev = peer->dev; 1513 1513 struct net_device *net; 1514 1514 struct fwnet_packet_task *ptask, *pt_next; ··· 1544 1544 dev_kfree_skb_any(ptask->skb); 1545 1545 kmem_cache_free(fwnet_packet_task_cache, ptask); 1546 1546 } 1547 + list_del(&dev->dev_link); 1548 + 1547 1549 free_netdev(net); 1548 1550 } 1549 1551 ··· 1561 1559 static void fwnet_update(struct fw_unit *unit) 1562 1560 { 1563 1561 struct fw_device *device = fw_parent_device(unit); 1564 - struct fwnet_peer *peer = unit->device.driver_data; 1562 + struct fwnet_peer *peer = dev_get_drvdata(&unit->device); 1565 1563 int generation; 1566 1564 1567 1565 generation = device->generation;