[lustre-devel] [PATCH 08/21] lustre: use list_first_entry() throughout
NeilBrown
neilb at suse.com
Wed Feb 6 16:03:33 PST 2019
Convert
list_entry(foo->next .....)
to
list_first_entry(foo, ....)
in remainder of lustre.
In several cases the call is combined with a list_empty() test and
list_first_entry_or_null() is used
Signed-off-by: NeilBrown <neilb at suse.com>
---
drivers/staging/lustre/lnet/libcfs/libcfs_string.c | 12 +++--
drivers/staging/lustre/lnet/selftest/conrpc.c | 5 +-
drivers/staging/lustre/lnet/selftest/console.c | 39 ++++++++----------
drivers/staging/lustre/lnet/selftest/framework.c | 44 ++++++++++----------
drivers/staging/lustre/lnet/selftest/rpc.c | 27 ++++++------
drivers/staging/lustre/lnet/selftest/timer.c | 4 +-
6 files changed, 62 insertions(+), 69 deletions(-)
diff --git a/drivers/staging/lustre/lnet/libcfs/libcfs_string.c b/drivers/staging/lustre/lnet/libcfs/libcfs_string.c
index 5fb85247525d..ae17b4d44cac 100644
--- a/drivers/staging/lustre/lnet/libcfs/libcfs_string.c
+++ b/drivers/staging/lustre/lnet/libcfs/libcfs_string.c
@@ -468,11 +468,11 @@ EXPORT_SYMBOL(cfs_expr_list_values);
void
cfs_expr_list_free(struct cfs_expr_list *expr_list)
{
- while (!list_empty(&expr_list->el_exprs)) {
- struct cfs_range_expr *expr;
+ struct cfs_range_expr *expr;
- expr = list_entry(expr_list->el_exprs.next,
- struct cfs_range_expr, re_link);
+ while ((expr = list_first_entry_or_null(&expr_list->el_exprs,
+ struct cfs_range_expr,
+ re_link)) != NULL) {
list_del(&expr->re_link);
kfree(expr);
}
@@ -553,8 +553,8 @@ cfs_expr_list_free_list(struct list_head *list)
{
struct cfs_expr_list *el;
- while (!list_empty(list)) {
- el = list_entry(list->next, struct cfs_expr_list, el_link);
+ while ((el = list_first_entry_or_null(list, struct cfs_expr_list,
+ el_link)) != NULL) {
list_del(&el->el_link);
cfs_expr_list_free(el);
}
diff --git a/drivers/staging/lustre/lnet/selftest/conrpc.c b/drivers/staging/lustre/lnet/selftest/conrpc.c
index d9bcfa8c92ae..af0d2aa3b6e8 100644
--- a/drivers/staging/lustre/lnet/selftest/conrpc.c
+++ b/drivers/staging/lustre/lnet/selftest/conrpc.c
@@ -1362,9 +1362,8 @@ lstcon_rpc_cleanup_wait(void)
spin_unlock(&console_session.ses_rpc_lock);
- while (!list_empty(&zlist)) {
- crpc = list_entry(zlist.next, struct lstcon_rpc, crp_link);
-
+ while ((crpc = list_first_entry_or_null(&zlist, struct lstcon_rpc,
+ crp_link)) != NULL) {
list_del(&crpc->crp_link);
kfree(crpc);
}
diff --git a/drivers/staging/lustre/lnet/selftest/console.c b/drivers/staging/lustre/lnet/selftest/console.c
index 045d79f44321..abc342c6a842 100644
--- a/drivers/staging/lustre/lnet/selftest/console.c
+++ b/drivers/staging/lustre/lnet/selftest/console.c
@@ -330,11 +330,10 @@ lstcon_group_move(struct lstcon_group *old, struct lstcon_group *new)
{
struct lstcon_ndlink *ndl;
- while (!list_empty(&old->grp_ndl_list)) {
- ndl = list_entry(old->grp_ndl_list.next,
- struct lstcon_ndlink, ndl_link);
+ while ((ndl = list_first_entry_or_null(&old->grp_ndl_list,
+ struct lstcon_ndlink,
+ ndl_link)) != NULL)
lstcon_group_ndlink_move(old, new, ndl);
- }
}
static int
@@ -1095,9 +1094,9 @@ lstcon_batch_destroy(struct lstcon_batch *bat)
list_del(&bat->bat_link);
- while (!list_empty(&bat->bat_test_list)) {
- test = list_entry(bat->bat_test_list.next,
- struct lstcon_test, tes_link);
+ while ((test = list_first_entry_or_null(&bat->bat_test_list,
+ struct lstcon_test,
+ tes_link)) != NULL) {
LASSERT(list_empty(&test->tes_trans_list));
list_del(&test->tes_link);
@@ -1110,17 +1109,17 @@ lstcon_batch_destroy(struct lstcon_batch *bat)
LASSERT(list_empty(&bat->bat_trans_list));
- while (!list_empty(&bat->bat_cli_list)) {
- ndl = list_entry(bat->bat_cli_list.next,
- struct lstcon_ndlink, ndl_link);
+ while ((ndl = list_first_entry_or_null(&bat->bat_cli_list,
+ struct lstcon_ndlink,
+ ndl_link)) != NULL) {
list_del_init(&ndl->ndl_link);
lstcon_ndlink_release(ndl);
}
- while (!list_empty(&bat->bat_srv_list)) {
- ndl = list_entry(bat->bat_srv_list.next,
- struct lstcon_ndlink, ndl_link);
+ while ((ndl = list_first_entry_or_null(&bat->bat_srv_list,
+ struct lstcon_ndlink,
+ ndl_link)) != NULL) {
list_del_init(&ndl->ndl_link);
lstcon_ndlink_release(ndl);
@@ -1844,17 +1843,15 @@ lstcon_session_end(void)
console_session.ses_feats_updated = 0;
/* destroy all batches */
- while (!list_empty(&console_session.ses_bat_list)) {
- bat = list_entry(console_session.ses_bat_list.next,
- struct lstcon_batch, bat_link);
-
+ while ((bat = list_first_entry_or_null(&console_session.ses_bat_list,
+ struct lstcon_batch,
+ bat_link)) != NULL)
lstcon_batch_destroy(bat);
- }
/* destroy all groups */
- while (!list_empty(&console_session.ses_grp_list)) {
- grp = list_entry(console_session.ses_grp_list.next,
- struct lstcon_group, grp_link);
+ while ((grp = list_first_entry_or_null(&console_session.ses_grp_list,
+ struct lstcon_group,
+ grp_link)) != NULL) {
LASSERT(grp->grp_ref == 1);
lstcon_group_decref(grp);
diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c
index a82efc394659..958f627580e7 100644
--- a/drivers/staging/lustre/lnet/selftest/framework.c
+++ b/drivers/staging/lustre/lnet/selftest/framework.c
@@ -628,16 +628,16 @@ sfw_destroy_test_instance(struct sfw_test_instance *tsi)
LASSERT(list_empty(&tsi->tsi_active_rpcs));
LASSERT(!sfw_test_active(tsi));
- while (!list_empty(&tsi->tsi_units)) {
- tsu = list_entry(tsi->tsi_units.next,
- struct sfw_test_unit, tsu_list);
+ while ((tsu = list_first_entry_or_null(&tsi->tsi_units,
+ struct sfw_test_unit,
+ tsu_list)) != NULL) {
list_del(&tsu->tsu_list);
kfree(tsu);
}
- while (!list_empty(&tsi->tsi_free_rpcs)) {
- rpc = list_entry(tsi->tsi_free_rpcs.next,
- struct srpc_client_rpc, crpc_list);
+ while ((rpc = list_first_entry_or_null(&tsi->tsi_free_rpcs,
+ struct srpc_client_rpc,
+ crpc_list)) != NULL) {
list_del(&rpc->crpc_list);
kfree(rpc);
}
@@ -655,9 +655,9 @@ sfw_destroy_batch(struct sfw_batch *tsb)
LASSERT(!sfw_batch_active(tsb));
LASSERT(list_empty(&tsb->bat_list));
- while (!list_empty(&tsb->bat_tests)) {
- tsi = list_entry(tsb->bat_tests.next,
- struct sfw_test_instance, tsi_list);
+ while ((tsi = list_first_entry_or_null(&tsb->bat_tests,
+ struct sfw_test_instance,
+ tsi_list)) != NULL) {
list_del_init(&tsi->tsi_list);
sfw_destroy_test_instance(tsi);
}
@@ -673,9 +673,9 @@ sfw_destroy_session(struct sfw_session *sn)
LASSERT(list_empty(&sn->sn_list));
LASSERT(sn != sfw_data.fw_session);
- while (!list_empty(&sn->sn_batches)) {
- batch = list_entry(sn->sn_batches.next,
- struct sfw_batch, bat_list);
+ while ((batch = list_first_entry_or_null(&sn->sn_batches,
+ struct sfw_batch,
+ bat_list)) != NULL) {
list_del_init(&batch->bat_list);
sfw_destroy_batch(batch);
}
@@ -1389,8 +1389,8 @@ sfw_create_rpc(struct lnet_process_id peer, int service,
LASSERT(service <= SRPC_FRAMEWORK_SERVICE_MAX_ID);
if (!nbulkiov && !list_empty(&sfw_data.fw_zombie_rpcs)) {
- rpc = list_entry(sfw_data.fw_zombie_rpcs.next,
- struct srpc_client_rpc, crpc_list);
+ rpc = list_first_entry(&sfw_data.fw_zombie_rpcs,
+ struct srpc_client_rpc, crpc_list);
list_del(&rpc->crpc_list);
srpc_init_client_rpc(rpc, peer, service, 0, 0,
@@ -1722,6 +1722,7 @@ sfw_shutdown(void)
{
struct srpc_service *sv;
struct sfw_test_case *tsc;
+ struct srpc_client_rpc *rpc;
int i;
spin_lock(&sfw_data.fw_lock);
@@ -1757,11 +1758,9 @@ sfw_shutdown(void)
srpc_remove_service(sv);
}
- while (!list_empty(&sfw_data.fw_zombie_rpcs)) {
- struct srpc_client_rpc *rpc;
-
- rpc = list_entry(sfw_data.fw_zombie_rpcs.next,
- struct srpc_client_rpc, crpc_list);
+ while ((rpc = list_first_entry_or_null(&sfw_data.fw_zombie_rpcs,
+ struct srpc_client_rpc,
+ crpc_list)) != NULL) {
list_del(&rpc->crpc_list);
kfree(rpc);
@@ -1775,10 +1774,9 @@ sfw_shutdown(void)
srpc_wait_service_shutdown(sv);
}
- while (!list_empty(&sfw_data.fw_tests)) {
- tsc = list_entry(sfw_data.fw_tests.next,
- struct sfw_test_case, tsc_list);
-
+ while ((tsc = list_first_entry_or_null(&sfw_data.fw_tests,
+ struct sfw_test_case,
+ tsc_list)) != NULL) {
srpc_wait_service_shutdown(tsc->tsc_srv_service);
list_del(&tsc->tsc_list);
diff --git a/drivers/staging/lustre/lnet/selftest/rpc.c b/drivers/staging/lustre/lnet/selftest/rpc.c
index 2a3010774dbe..abb6f8fb011e 100644
--- a/drivers/staging/lustre/lnet/selftest/rpc.c
+++ b/drivers/staging/lustre/lnet/selftest/rpc.c
@@ -210,9 +210,9 @@ srpc_service_fini(struct srpc_service *svc)
else
break;
- while (!list_empty(q)) {
- buf = list_entry(q->next, struct srpc_buffer,
- buf_list);
+ while ((buf = list_first_entry_or_null(
+ q, struct srpc_buffer,
+ buf_list)) != NULL) {
list_del(&buf->buf_list);
kfree(buf);
}
@@ -220,10 +220,9 @@ srpc_service_fini(struct srpc_service *svc)
LASSERT(list_empty(&scd->scd_rpc_active));
- while (!list_empty(&scd->scd_rpc_free)) {
- rpc = list_entry(scd->scd_rpc_free.next,
- struct srpc_server_rpc,
- srpc_list);
+ while ((rpc = list_first_entry_or_null(&scd->scd_rpc_free,
+ struct srpc_server_rpc,
+ srpc_list)) != NULL) {
list_del(&rpc->srpc_list);
kfree(rpc);
}
@@ -674,8 +673,8 @@ srpc_finish_service(struct srpc_service *sv)
continue;
}
- rpc = list_entry(scd->scd_rpc_active.next,
- struct srpc_server_rpc, srpc_list);
+ rpc = list_first_entry(&scd->scd_rpc_active,
+ struct srpc_server_rpc, srpc_list);
CNETERR("Active RPC %p on shutdown: sv %s, peer %s, wi %s, ev fired %d type %d status %d lnet %d\n",
rpc, sv->sv_name, libcfs_id2str(rpc->srpc_peer),
swi_state2str(rpc->srpc_wi.swi_state),
@@ -943,8 +942,8 @@ srpc_server_rpc_done(struct srpc_server_rpc *rpc, int status)
LASSERT(rpc->srpc_ev.ev_fired);
if (!sv->sv_shuttingdown && !list_empty(&scd->scd_buf_blocked)) {
- buffer = list_entry(scd->scd_buf_blocked.next,
- struct srpc_buffer, buf_list);
+ buffer = list_first_entry(&scd->scd_buf_blocked,
+ struct srpc_buffer, buf_list);
list_del(&buffer->buf_list);
srpc_init_server_rpc(rpc, scd, buffer);
@@ -1535,9 +1534,9 @@ srpc_lnet_ev_handler(struct lnet_event *ev)
}
if (!list_empty(&scd->scd_rpc_free)) {
- srpc = list_entry(scd->scd_rpc_free.next,
- struct srpc_server_rpc,
- srpc_list);
+ srpc = list_first_entry(&scd->scd_rpc_free,
+ struct srpc_server_rpc,
+ srpc_list);
list_del(&srpc->srpc_list);
srpc_init_server_rpc(srpc, scd, buffer);
diff --git a/drivers/staging/lustre/lnet/selftest/timer.c b/drivers/staging/lustre/lnet/selftest/timer.c
index c83473ebb368..bb61e3aa11e9 100644
--- a/drivers/staging/lustre/lnet/selftest/timer.c
+++ b/drivers/staging/lustre/lnet/selftest/timer.c
@@ -125,8 +125,8 @@ stt_expire_list(struct list_head *slot, time64_t now)
int expired = 0;
struct stt_timer *timer;
- while (!list_empty(slot)) {
- timer = list_entry(slot->next, struct stt_timer, stt_list);
+ while ((timer = list_first_entry_or_null(slot, struct stt_timer,
+ stt_list)) != NULL) {
if (timer->stt_expires > now)
break;
More information about the lustre-devel
mailing list