list_for_each_entry(net, &the_lnet.ln_nets, net_list) {
if (net->net_id == net_id) {
- ni = list_entry(net->net_ni_list.next, struct lnet_ni,
- ni_netlist);
+ ni = list_first_entry(&net->net_ni_list, struct lnet_ni,
+ ni_netlist);
return ni;
}
}
* list and shut them down in guaranteed thread context
*/
i = 2;
- while (!list_empty(zombie_list)) {
- int *ref;
- int j;
+ while ((ni = list_first_entry_or_null(zombie_list,
+ struct lnet_ni,
+ ni_netlist)) != NULL) {
+ int *ref;
+ int j;
- ni = list_entry(zombie_list->next,
- struct lnet_ni, ni_netlist);
list_del_init(&ni->ni_netlist);
/* the ni should be in deleting state. If it's not it's
* a bug */
list_del_init(&net->net_list);
- while (!list_empty(&net->net_ni_list)) {
- ni = list_entry(net->net_ni_list.next,
- struct lnet_ni, ni_netlist);
+ while ((ni = list_first_entry_or_null(&net->net_ni_list,
+ struct lnet_ni,
+ ni_netlist)) != NULL) {
lnet_net_unlock(LNET_LOCK_EX);
lnet_shutdown_lndni(ni);
lnet_net_lock(LNET_LOCK_EX);
lnet_net_unlock(LNET_LOCK_EX);
/* iterate through the net zombie list and delete each net */
- while (!list_empty(&the_lnet.ln_net_zombie)) {
- net = list_entry(the_lnet.ln_net_zombie.next,
- struct lnet_net, net_list);
+ while ((net = list_first_entry_or_null(&the_lnet.ln_net_zombie,
+ struct lnet_net,
+ net_list)) != NULL)
lnet_shutdown_lndnet(net);
- }
spin_lock(&the_lnet.ln_msg_resend_lock);
list_splice(&the_lnet.ln_msg_resend, &resend);
* After than we want to delete the network being added,
* to avoid a memory leak.
*/
- while (!list_empty(&net->net_ni_added)) {
- ni = list_entry(net->net_ni_added.next, struct lnet_ni,
- ni_netlist);
+ while ((ni = list_first_entry_or_null(&net->net_ni_added,
+ struct lnet_ni,
+ ni_netlist)) != NULL) {
list_del_init(&ni->ni_netlist);
/* make sure that the the NI we're about to start
* shutdown the new NIs that are being started up
* free the NET being started
*/
- while (!list_empty(&local_ni_list)) {
- ni = list_entry(local_ni_list.next, struct lnet_ni,
- ni_netlist);
-
+ while ((ni = list_first_entry_or_null(&local_ni_list,
+ struct lnet_ni,
+ ni_netlist)) != NULL)
lnet_shutdown_lndni(ni);
- }
failed0:
lnet_net_free(net);
the_lnet.ln_state = LNET_STATE_RUNNING;
lnet_net_unlock(LNET_LOCK_EX);
- while (!list_empty(netlist)) {
- net = list_entry(netlist->next, struct lnet_net, net_list);
+ while ((net = list_first_entry_or_null(netlist,
+ struct lnet_net,
+ net_list)) != NULL) {
list_del_init(&net->net_list);
rc = lnet_startup_lndnet(net, NULL);
lnet_unprepare();
LASSERT(rc < 0);
mutex_unlock(&the_lnet.ln_api_mutex);
- while (!list_empty(&net_head)) {
- struct lnet_net *net;
-
- net = list_entry(net_head.next, struct lnet_net, net_list);
+ while ((net = list_first_entry_or_null(&net_head,
+ struct lnet_net,
+ net_list)) != NULL) {
list_del_init(&net->net_list);
lnet_net_free(net);
}
* a message being sent. This function accessed the net without
* checking if the list is empty
*/
- if (prev == NULL) {
- if (net == NULL)
- net = list_entry(the_lnet.ln_nets.next, struct lnet_net,
- net_list);
+ if (!prev) {
+ if (!net)
+ net = list_first_entry(&the_lnet.ln_nets,
+ struct lnet_net,
+ net_list);
if (list_empty(&net->net_ni_list))
return NULL;
- ni = list_entry(net->net_ni_list.next, struct lnet_ni,
- ni_netlist);
+ ni = list_first_entry(&net->net_ni_list, struct lnet_ni,
+ ni_netlist);
return ni;
}
return NULL;
/* get the next net */
- net = list_entry(prev->ni_net->net_list.next, struct lnet_net,
- net_list);
+ net = list_first_entry(&prev->ni_net->net_list, struct lnet_net,
+ net_list);
if (list_empty(&net->net_ni_list))
return NULL;
/* get the ni on it */
- ni = list_entry(net->net_ni_list.next, struct lnet_ni,
- ni_netlist);
+ ni = list_first_entry(&net->net_ni_list, struct lnet_ni,
+ ni_netlist);
return ni;
}
return NULL;
/* there are more nis left */
- ni = list_entry(prev->ni_netlist.next, struct lnet_ni, ni_netlist);
+ ni = list_first_entry(&prev->ni_netlist, struct lnet_ni, ni_netlist);
return ni;
}
rc = -ESHUTDOWN;
goto out;
}
- while (!list_empty(&net_head)) {
- net = list_entry(net_head.next, struct lnet_net, net_list);
+
+ while ((net = list_first_entry_or_null(&net_head,
+ struct lnet_net,
+ net_list)) != NULL) {
list_del_init(&net->net_list);
rc = lnet_add_net_common(net, tun);
if (rc < 0)
out:
mutex_unlock(&the_lnet.ln_api_mutex);
- while (!list_empty(&net_head)) {
- net = list_entry(net_head.next, struct lnet_net, net_list);
+ while ((net = list_first_entry_or_null(&net_head,
+ struct lnet_net,
+ net_list)) != NULL) {
list_del_init(&net->net_list);
lnet_net_free(net);
}
goto out_unlock_clean;
}
- net = list_entry(net_head.next, struct lnet_net, net_list);
+ net = list_first_entry(&net_head, struct lnet_net, net_list);
list_del_init(&net->net_list);
LASSERT(lnet_net_unique(net->net_id, &the_lnet.ln_nets, NULL));
out_unlock_clean:
mutex_unlock(&the_lnet.ln_api_mutex);
- while (!list_empty(&net_head)) {
- /* net_head list is empty in success case */
- net = list_entry(net_head.next, struct lnet_net, net_list);
+ /* net_head list is empty in success case */
+ while ((net = list_first_entry_or_null(&net_head,
+ struct lnet_net,
+ net_list)) != NULL) {
list_del_init(&net->net_list);
lnet_net_free(net);
}