X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Fklnds%2Fgnilnd%2Fgnilnd.c;h=1a2867e81458c908f4b52d9a1732f471fc21c571;hp=8b5bc2e77c73b6bad14b303ca5d4a51803e89e9d;hb=8f4d61088cbd0e5b7cfbaac3d6291902fa0ce8a8;hpb=4c4c327b25f3414f20a9ae600e7311f1aa3a866d diff --git a/lnet/klnds/gnilnd/gnilnd.c b/lnet/klnds/gnilnd/gnilnd.c index 8b5bc2e..1a2867e 100644 --- a/lnet/klnds/gnilnd/gnilnd.c +++ b/lnet/klnds/gnilnd/gnilnd.c @@ -576,7 +576,7 @@ kgnilnd_peer_notify(kgn_peer_t *peer, int error, int alive) return; } - LIBCFS_ALLOC(nets, nnets * sizeof(*nets)); + CFS_ALLOC_PTR_ARRAY(nets, nnets); if (nets == NULL) { up_read(&kgnilnd_data.kgn_net_rw_sem); @@ -613,7 +613,7 @@ kgnilnd_peer_notify(kgn_peer_t *peer, int error, int alive) kgnilnd_net_decref(net); } - LIBCFS_FREE(nets, nnets * sizeof(*nets)); + CFS_FREE_PTR_ARRAY(nets, nnets); } } @@ -1593,20 +1593,14 @@ kgnilnd_del_conn_or_peer(kgn_net_t *net, lnet_nid_t nid, int command, return rc; } - i = 4; - while (atomic_read(&kgnilnd_data.kgn_npending_conns) || - atomic_read(&kgnilnd_data.kgn_npending_detach) || - atomic_read(&kgnilnd_data.kgn_npending_unlink)) { - - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); - i++; - - CDEBUG(((i & (-i)) == i) ? D_WARNING : D_NET, "Waiting on %d peers %d closes %d detaches\n", + wait_var_event_warning(&kgnilnd_data, + !atomic_read(&kgnilnd_data.kgn_npending_conns) && + !atomic_read(&kgnilnd_data.kgn_npending_detach) && + !atomic_read(&kgnilnd_data.kgn_npending_unlink), + "Waiting on %d peers %d closes %d detaches\n", atomic_read(&kgnilnd_data.kgn_npending_unlink), atomic_read(&kgnilnd_data.kgn_npending_conns), atomic_read(&kgnilnd_data.kgn_npending_detach)); - } return rc; } @@ -2193,8 +2187,8 @@ int kgnilnd_base_startup(void) init_rwsem(&dev->gnd_conn_sem); /* alloc & setup nid based dgram table */ - LIBCFS_ALLOC(dev->gnd_dgrams, - sizeof(struct list_head) * *kgnilnd_tunables.kgn_peer_hash_size); + CFS_ALLOC_PTR_ARRAY(dev->gnd_dgrams, + *kgnilnd_tunables.kgn_peer_hash_size); if (dev->gnd_dgrams == NULL) GOTO(failed, rc = -ENOMEM); @@ -2237,8 +2231,8 @@ int kgnilnd_base_startup(void) rwlock_init(&kgnilnd_data.kgn_peer_conn_lock); - LIBCFS_ALLOC(kgnilnd_data.kgn_peers, - sizeof(struct list_head) * *kgnilnd_tunables.kgn_peer_hash_size); + CFS_ALLOC_PTR_ARRAY(kgnilnd_data.kgn_peers, + *kgnilnd_tunables.kgn_peer_hash_size); if (kgnilnd_data.kgn_peers == NULL) GOTO(failed, rc = -ENOMEM); @@ -2247,8 +2241,8 @@ int kgnilnd_base_startup(void) INIT_LIST_HEAD(&kgnilnd_data.kgn_peers[i]); } - LIBCFS_ALLOC(kgnilnd_data.kgn_conns, - sizeof(struct list_head) * *kgnilnd_tunables.kgn_peer_hash_size); + CFS_ALLOC_PTR_ARRAY(kgnilnd_data.kgn_conns, + *kgnilnd_tunables.kgn_peer_hash_size); if (kgnilnd_data.kgn_conns == NULL) GOTO(failed, rc = -ENOMEM); @@ -2257,8 +2251,8 @@ int kgnilnd_base_startup(void) INIT_LIST_HEAD(&kgnilnd_data.kgn_conns[i]); } - LIBCFS_ALLOC(kgnilnd_data.kgn_nets, - sizeof(struct list_head) * *kgnilnd_tunables.kgn_net_hash_size); + CFS_ALLOC_PTR_ARRAY(kgnilnd_data.kgn_nets, + *kgnilnd_tunables.kgn_net_hash_size); if (kgnilnd_data.kgn_nets == NULL) GOTO(failed, rc = -ENOMEM); @@ -2464,8 +2458,7 @@ kgnilnd_base_shutdown(void) CDEBUG(((i & (-i)) == i) ? D_WARNING : D_NET, "Waiting for conns to be cleaned up %d\n",atomic_read(&kgnilnd_data.kgn_nconns)); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); + schedule_timeout_uninterruptible(cfs_time_seconds(1)); } /* Peer state all cleaned up BEFORE setting shutdown, so threads don't * have to worry about shutdown races. NB connections may be created @@ -2484,8 +2477,7 @@ kgnilnd_base_shutdown(void) i++; CDEBUG(((i & (-i)) == i) ? D_WARNING : D_NET, "Waiting for ruhroh thread to terminate\n"); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); + schedule_timeout_uninterruptible(cfs_time_seconds(1)); } /* Flag threads to terminate */ @@ -2517,8 +2509,7 @@ kgnilnd_base_shutdown(void) CDEBUG(((i & (-i)) == i) ? D_WARNING : D_NET, /* power of 2? */ "Waiting for %d threads to terminate\n", atomic_read(&kgnilnd_data.kgn_nthreads)); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); + schedule_timeout_uninterruptible(cfs_time_seconds(1)); } LASSERTF(atomic_read(&kgnilnd_data.kgn_npeers) == 0, @@ -2528,9 +2519,8 @@ kgnilnd_base_shutdown(void) for (i = 0; i < *kgnilnd_tunables.kgn_peer_hash_size; i++) LASSERT(list_empty(&kgnilnd_data.kgn_peers[i])); - LIBCFS_FREE(kgnilnd_data.kgn_peers, - sizeof (struct list_head) * - *kgnilnd_tunables.kgn_peer_hash_size); + CFS_FREE_PTRE_ARRAT(kgnilnd_data.kgn_peers, + *kgnilnd_tunables.kgn_peer_hash_size); } down_write(&kgnilnd_data.kgn_net_rw_sem); @@ -2538,9 +2528,8 @@ kgnilnd_base_shutdown(void) for (i = 0; i < *kgnilnd_tunables.kgn_net_hash_size; i++) LASSERT(list_empty(&kgnilnd_data.kgn_nets[i])); - LIBCFS_FREE(kgnilnd_data.kgn_nets, - sizeof (struct list_head) * - *kgnilnd_tunables.kgn_net_hash_size); + CFS_FREE_PTRE_ARRAY(kgnilnd_data.kgn_nets, + *kgnilnd_tunables.kgn_net_hash_size); } up_write(&kgnilnd_data.kgn_net_rw_sem); @@ -2551,9 +2540,8 @@ kgnilnd_base_shutdown(void) for (i = 0; i < *kgnilnd_tunables.kgn_peer_hash_size; i++) LASSERT(list_empty(&kgnilnd_data.kgn_conns[i])); - LIBCFS_FREE(kgnilnd_data.kgn_conns, - sizeof (struct list_head) * - *kgnilnd_tunables.kgn_peer_hash_size); + CFS_FREE_PTR_ARRAY(kgnilnd_data.kgn_conns, + *kgnilnd_tunables.kgn_peer_hash_size); } for (i = 0; i < kgnilnd_data.kgn_ndevs; i++) { @@ -2564,12 +2552,12 @@ kgnilnd_base_shutdown(void) "dgrams left %d\n", atomic_read(&dev->gnd_ndgrams)); if (dev->gnd_dgrams != NULL) { - for (i = 0; i < *kgnilnd_tunables.kgn_peer_hash_size; i++) + for (i = 0; i < *kgnilnd_tunables.kgn_peer_hash_size; + i++) LASSERT(list_empty(&dev->gnd_dgrams[i])); - LIBCFS_FREE(dev->gnd_dgrams, - sizeof (struct list_head) * - *kgnilnd_tunables.kgn_peer_hash_size); + CFS_FREE_PTR_ARRAY(dev->gnd_dgrams, + *kgnilnd_tunables.kgn_peer_hash_size); } kgnilnd_free_phys_fmablk(dev); @@ -2769,8 +2757,7 @@ kgnilnd_shutdown(struct lnet_ni *ni) "Waiting for %d references to clear on net %d\n", atomic_read(&net->gnn_refcount), net->gnn_netnum); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(1)); + schedule_timeout_uninterruptible(cfs_time_seconds(1)); } /* release ref from kgnilnd_startup */