diff --git a/lnet/ChangeLog b/lnet/ChangeLog index 6ebdfea25d64394da4761121b9d664d31b7943a1..15e76fb505bca949c4883501446964ea2925a1c3 100644 --- a/lnet/ChangeLog +++ b/lnet/ChangeLog @@ -30,6 +30,12 @@ ptllnd - Portals 3.3 / UNICOS/lc 1.5.x, 2.0.x * bug fixes +Severity : minor +Frequency : rare +Description: Ptllnd didn't init kptllnd_data.kptl_idle_txs before it could be + possibly accessed in kptllnd_shutdown. Ptllnd should init + kptllnd_data.kptl_ptlid2str_lock before calling kptllnd_ptlid2str. + Severity : normal Frequency : rare Description: gmlnd ignored some transmit errors when finalizing lnet messages. diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c index fd707f38a6c3bad204ad81a839b0bfb5837dea8a..f020fac6936dea2802ae230537406d0d03f52e7c 100755 --- a/lnet/klnds/ptllnd/ptllnd.c +++ b/lnet/klnds/ptllnd/ptllnd.c @@ -471,7 +471,7 @@ kptllnd_startup (lnet_ni_t *ni) } if (*kptllnd_tunables.kptl_max_procs_per_node < 1) { - CERROR("max_procs_per_node must be > 1\n"); + CERROR("max_procs_per_node must be >= 1\n"); return -EINVAL; } @@ -490,6 +490,25 @@ kptllnd_startup (lnet_ni_t *ni) kptllnd_data.kptl_eqh = PTL_INVALID_HANDLE; kptllnd_data.kptl_nih = PTL_INVALID_HANDLE; + /* + * Setup the sched locks/lists/waitq + */ + spin_lock_init(&kptllnd_data.kptl_sched_lock); + init_waitqueue_head(&kptllnd_data.kptl_sched_waitq); + INIT_LIST_HEAD(&kptllnd_data.kptl_sched_txq); + INIT_LIST_HEAD(&kptllnd_data.kptl_sched_rxq); + INIT_LIST_HEAD(&kptllnd_data.kptl_sched_rxbq); + + /* init kptl_ptlid2str_lock before any call to kptllnd_ptlid2str */ + spin_lock_init(&kptllnd_data.kptl_ptlid2str_lock); + + /* + * Setup the tx locks/lists + */ + spin_lock_init(&kptllnd_data.kptl_tx_lock); + INIT_LIST_HEAD(&kptllnd_data.kptl_idle_txs); + atomic_set(&kptllnd_data.kptl_ntx, 0); + /* * Uptick the module reference count */ @@ -585,22 +604,6 @@ kptllnd_startup (lnet_ni_t *ni) tv.tv_usec; CDEBUG(D_NET, "Incarnation="LPX64"\n", kptllnd_data.kptl_incarnation); - /* - * Setup the sched locks/lists/waitq - */ - spin_lock_init(&kptllnd_data.kptl_sched_lock); - init_waitqueue_head(&kptllnd_data.kptl_sched_waitq); - INIT_LIST_HEAD(&kptllnd_data.kptl_sched_txq); - INIT_LIST_HEAD(&kptllnd_data.kptl_sched_rxq); - INIT_LIST_HEAD(&kptllnd_data.kptl_sched_rxbq); - - /* - * Setup the tx locks/lists - */ - spin_lock_init(&kptllnd_data.kptl_tx_lock); - INIT_LIST_HEAD(&kptllnd_data.kptl_idle_txs); - atomic_set(&kptllnd_data.kptl_ntx, 0); - /* * Allocate and setup the peer hash table */ @@ -609,8 +612,6 @@ kptllnd_startup (lnet_ni_t *ni) INIT_LIST_HEAD(&kptllnd_data.kptl_closing_peers); INIT_LIST_HEAD(&kptllnd_data.kptl_zombie_peers); - spin_lock_init(&kptllnd_data.kptl_ptlid2str_lock); - kptllnd_data.kptl_peer_hash_size = *kptllnd_tunables.kptl_peer_hash_table_size; LIBCFS_ALLOC(kptllnd_data.kptl_peers,