diff options
Diffstat (limited to 'drivers/firewire/net.c')
| -rw-r--r-- | drivers/firewire/net.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c index c2e194c5866..7ed08fd1214 100644 --- a/drivers/firewire/net.c +++ b/drivers/firewire/net.c @@ -191,6 +191,7 @@ struct fwnet_peer {  	struct fwnet_device *dev;  	u64 guid;  	u64 fifo; +	__be32 ip;  	/* guarded by dev->lock */  	struct list_head pd_list; /* received partial datagrams */ @@ -570,6 +571,8 @@ static int fwnet_finish_incoming_packet(struct net_device *net,  				peer->speed = sspd;  			if (peer->max_payload > max_payload)  				peer->max_payload = max_payload; + +			peer->ip = arp1394->sip;  		}  		spin_unlock_irqrestore(&dev->lock, flags); @@ -1470,6 +1473,7 @@ static int fwnet_add_peer(struct fwnet_device *dev,  	peer->dev = dev;  	peer->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4];  	peer->fifo = FWNET_NO_FIFO_ADDR; +	peer->ip = 0;  	INIT_LIST_HEAD(&peer->pd_list);  	peer->pdg_size = 0;  	peer->datagram_label = 0; @@ -1589,10 +1593,13 @@ static int fwnet_remove(struct device *_dev)  	mutex_lock(&fwnet_device_mutex); +	net = dev->netdev; +	if (net && peer->ip) +		arp_invalidate(net, peer->ip); +  	fwnet_remove_peer(peer, dev);  	if (list_empty(&dev->peer_list)) { -		net = dev->netdev;  		unregister_netdev(net);  		if (dev->local_fifo != FWNET_NO_FIFO_ADDR)  |