aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUrsula Braun <braunu@de.ibm.com>2007-05-02 09:18:44 -0400
committerJeff Garzik <jeff@garzik.org>2007-05-08 01:16:24 -0400
commit0be4acec829ae37901aea7bd09aca1cea319833a (patch)
tree8a97dcf7c2ed9b720bbe1c3524bcd772d8d12860
parent1f8bdae9ef8e1ed2b208cdbaadb91061ede30212 (diff)
s390: fix Oops when unloading module netiucv
don't remove an entry from iucv_connection_list in netiucv_exit(). netiucv_free_netdevice is called anyway, which takes care of entry removal. Signed-off-by: Ursula Braun <braunu@de.ibm.com> Signed-off-by: Frank Pavlic <fpavlic@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/s390/net/netiucv.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index e10e85e85c84..c358764f3264 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -1862,12 +1862,14 @@ static void netiucv_remove_connection(struct iucv_connection *conn)
1862 write_lock_bh(&iucv_connection_rwlock); 1862 write_lock_bh(&iucv_connection_rwlock);
1863 list_del_init(&conn->list); 1863 list_del_init(&conn->list);
1864 write_unlock_bh(&iucv_connection_rwlock); 1864 write_unlock_bh(&iucv_connection_rwlock);
1865 fsm_deltimer(&conn->timer);
1866 netiucv_purge_skb_queue(&conn->collect_queue);
1865 if (conn->path) { 1867 if (conn->path) {
1866 iucv_path_sever(conn->path, iucvMagic); 1868 iucv_path_sever(conn->path, iucvMagic);
1867 kfree(conn->path); 1869 kfree(conn->path);
1868 conn->path = NULL; 1870 conn->path = NULL;
1869 } 1871 }
1870 fsm_deltimer(&conn->timer); 1872 netiucv_purge_skb_queue(&conn->commit_queue);
1871 kfree_fsm(conn->fsm); 1873 kfree_fsm(conn->fsm);
1872 kfree_skb(conn->rx_buff); 1874 kfree_skb(conn->rx_buff);
1873 kfree_skb(conn->tx_buff); 1875 kfree_skb(conn->tx_buff);
@@ -2115,7 +2117,6 @@ static void __exit netiucv_exit(void)
2115 while (!list_empty(&iucv_connection_list)) { 2117 while (!list_empty(&iucv_connection_list)) {
2116 cp = list_entry(iucv_connection_list.next, 2118 cp = list_entry(iucv_connection_list.next,
2117 struct iucv_connection, list); 2119 struct iucv_connection, list);
2118 list_del(&cp->list);
2119 ndev = cp->netdev; 2120 ndev = cp->netdev;
2120 priv = netdev_priv(ndev); 2121 priv = netdev_priv(ndev);
2121 dev = priv->dev; 2122 dev = priv->dev;