From 8d1635a6182312200695983d0462dadba60af14a Mon Sep 17 00:00:00 2001 From: James Simmons Date: Mon, 10 May 2021 16:10:29 -0400 Subject: [PATCH] LU-12678 lnet: use list_for_each_entry() Several loops use list_for_each(), then call list_entry() each time in the loop This complexity can be replaced with the use of list_for_each_entry(). Test-Parameters: trivial testlist=sanity-lnet Signed-off-by: James Simmons Change-Id: Ib7968466c4fce5173b20cbaf6c878975ba522d43 Reviewed-on: https://review.whamcloud.com/43591 Reviewed-by: Chris Horn Tested-by: jenkins Tested-by: Maloo Reviewed-by: Arshad Hussain Reviewed-by: Oleg Drokin --- lnet/klnds/gnilnd/gnilnd.c | 38 ++++++++++------------------------- lnet/klnds/gnilnd/gnilnd_proc.c | 14 ++++++------- lnet/klnds/o2iblnd/o2iblnd.c | 5 ++--- lnet/klnds/o2iblnd/o2iblnd_cb.c | 16 ++++----------- lnet/klnds/socklnd/socklnd.c | 41 +++++++++++--------------------------- lnet/klnds/socklnd/socklnd_cb.c | 11 +++------- lnet/klnds/socklnd/socklnd_proto.c | 7 +++---- 7 files changed, 40 insertions(+), 92 deletions(-) diff --git a/lnet/klnds/gnilnd/gnilnd.c b/lnet/klnds/gnilnd/gnilnd.c index c5da2ee..bfe044c 100644 --- a/lnet/klnds/gnilnd/gnilnd.c +++ b/lnet/klnds/gnilnd/gnilnd.c @@ -87,16 +87,13 @@ kgnilnd_start_sd_threads(void) int kgnilnd_close_stale_conns_locked(kgn_peer_t *peer, kgn_conn_t *newconn) { - kgn_conn_t *conn; - struct list_head *ctmp, *cnxt; + kgn_conn_t *conn, *cnxt; int loopback; int count = 0; loopback = peer->gnp_nid == peer->gnp_net->gnn_ni->ni_nid; - list_for_each_safe(ctmp, cnxt, &peer->gnp_conns) { - conn = list_entry(ctmp, kgn_conn_t, gnc_list); - + list_for_each_entry_safe(conn, cnxt, &peer->gnp_conns, gnc_list) { if (conn->gnc_state != GNILND_CONN_ESTABLISHED) continue; @@ -161,14 +158,12 @@ int kgnilnd_conn_isdup_locked(kgn_peer_t *peer, kgn_conn_t *newconn) { kgn_conn_t *conn; - struct list_head *tmp; int loopback; ENTRY; loopback = peer->gnp_nid == peer->gnp_net->gnn_ni->ni_nid; - list_for_each(tmp, &peer->gnp_conns) { - conn = list_entry(tmp, kgn_conn_t, gnc_list); + list_for_each_entry(conn, &peer->gnp_conns, gnc_list) { CDEBUG(D_NET, "checking conn 0x%p for peer %s" " lo %d new %llu existing %llu" " new peer %llu existing peer %llu" @@ -560,7 +555,7 @@ kgnilnd_peer_notify(kgn_peer_t *peer, int error, int alive) */ for (i = 0; i < *kgnilnd_tunables.kgn_net_hash_size; i++) { - list_for_each_entry(net , &kgnilnd_data.kgn_nets[i], gnn_list) { + list_for_each_entry(net, &kgnilnd_data.kgn_nets[i], gnn_list) { /* if gnn_shutdown set for any net shutdown is in progress just return */ if (net->gnn_shutdown) { up_read(&kgnilnd_data.kgn_net_rw_sem); @@ -1322,7 +1317,6 @@ kgnilnd_get_peer_info(int index, lnet_nid_t *id, __u32 *nic_addr, int *refcount, int *connecting) { - struct list_head *ptmp; kgn_peer_t *peer; int i; int rc = -ENOENT; @@ -1330,10 +1324,7 @@ kgnilnd_get_peer_info(int index, read_lock(&kgnilnd_data.kgn_peer_conn_lock); for (i = 0; i < *kgnilnd_tunables.kgn_peer_hash_size; i++) { - - list_for_each(ptmp, &kgnilnd_data.kgn_peers[i]) { - peer = list_entry(ptmp, kgn_peer_t, gnp_list); - + list_for_each_entry(peer, &kgnilnd_data.kgn_peers[i], gnp_list) { if (index-- > 0) continue; @@ -1509,8 +1500,7 @@ kgnilnd_del_conn_or_peer(kgn_net_t *net, lnet_nid_t nid, int command, { LIST_HEAD (souls); LIST_HEAD (zombies); - struct list_head *ptmp, *pnxt; - kgn_peer_t *peer; + kgn_peer_t *peer, *pnxt; int lo; int hi; int i; @@ -1528,9 +1518,8 @@ kgnilnd_del_conn_or_peer(kgn_net_t *net, lnet_nid_t nid, int command, } for (i = lo; i <= hi; i++) { - list_for_each_safe(ptmp, pnxt, &kgnilnd_data.kgn_peers[i]) { - peer = list_entry(ptmp, kgn_peer_t, gnp_list); - + list_for_each_entry_safe(peer, pnxt, &kgnilnd_data.kgn_peers[i], + gnp_list) { LASSERTF(peer->gnp_net != NULL, "peer %p (%s) with NULL net\n", peer, libcfs_nid2str(peer->gnp_nid)); @@ -1608,21 +1597,14 @@ kgn_conn_t * kgnilnd_get_conn_by_idx(int index) { kgn_peer_t *peer; - struct list_head *ptmp; kgn_conn_t *conn; - struct list_head *ctmp; int i; for (i = 0; i < *kgnilnd_tunables.kgn_peer_hash_size; i++) { read_lock(&kgnilnd_data.kgn_peer_conn_lock); - list_for_each(ptmp, &kgnilnd_data.kgn_peers[i]) { - - peer = list_entry(ptmp, kgn_peer_t, gnp_list); - - list_for_each(ctmp, &peer->gnp_conns) { - conn = list_entry(ctmp, kgn_conn_t, gnc_list); - + list_for_each_entry(peer, &kgnilnd_data.kgn_peers[i], gnp_list) { + list_for_each_entry(conn, &peer->gnp_conns, gnc_list) { if (conn->gnc_state != GNILND_CONN_ESTABLISHED) continue; diff --git a/lnet/klnds/gnilnd/gnilnd_proc.c b/lnet/klnds/gnilnd/gnilnd_proc.c index ab2eda9..0cdc6aa 100644 --- a/lnet/klnds/gnilnd/gnilnd_proc.c +++ b/lnet/klnds/gnilnd/gnilnd_proc.c @@ -754,7 +754,8 @@ typedef struct { int kgnilnd_conn_seq_seek(kgn_conn_seq_iter_t *gseq, loff_t off) { - struct list_head *list, *tmp; + struct list_head *list; + kgn_conn_t *conn; loff_t here = 0; int rc = 0; @@ -793,10 +794,8 @@ kgnilnd_conn_seq_seek(kgn_conn_seq_iter_t *gseq, loff_t off) start_list: - list_for_each(tmp, list) { + list_for_each_entry(conn, list, gnc_hashlist) { if (here == off) { - kgn_conn_t *conn; - conn = list_entry(tmp, kgn_conn_t, gnc_hashlist); gseq->gconn_conn = conn; rc = 0; goto out; @@ -1107,7 +1106,8 @@ typedef struct { int kgnilnd_peer_seq_seek(kgn_peer_seq_iter_t *gseq, loff_t off) { - struct list_head *list, *tmp; + struct list_head *list; + kgn_peer_t *peer; loff_t here = 0; int rc = 0; @@ -1146,10 +1146,8 @@ kgnilnd_peer_seq_seek(kgn_peer_seq_iter_t *gseq, loff_t off) start_list: - list_for_each(tmp, list) { + list_for_each_entry(peer, list, gnp_list) { if (here == off) { - kgn_peer_t *peer; - peer = list_entry(tmp, kgn_peer_t, gnp_list); gseq->gpeer_peer = peer; rc = 0; goto out; diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c index 82b8d10..b28c5b2 100644 --- a/lnet/klnds/o2iblnd/o2iblnd.c +++ b/lnet/klnds/o2iblnd/o2iblnd.c @@ -525,7 +525,6 @@ kiblnd_get_conn_by_idx(struct lnet_ni *ni, int index) { struct kib_peer_ni *peer_ni; struct kib_conn *conn; - struct list_head *ctmp; int i; unsigned long flags; @@ -537,11 +536,11 @@ kiblnd_get_conn_by_idx(struct lnet_ni *ni, int index) if (peer_ni->ibp_ni != ni) continue; - list_for_each(ctmp, &peer_ni->ibp_conns) { + list_for_each_entry(conn, &peer_ni->ibp_conns, + ibc_list) { if (index-- > 0) continue; - conn = list_entry(ctmp, struct kib_conn, ibc_list); kiblnd_conn_addref(conn); read_unlock_irqrestore(&kiblnd_data.kib_global_lock, flags); diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c index 4e79dfd..9fd0baa 100644 --- a/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -242,11 +242,9 @@ out: static struct kib_tx * kiblnd_find_waiting_tx_locked(struct kib_conn *conn, int txtype, u64 cookie) { - struct list_head *tmp; - - list_for_each(tmp, &conn->ibc_active_txs) { - struct kib_tx *tx = list_entry(tmp, struct kib_tx, tx_list); + struct kib_tx *tx; + list_for_each_entry(tx, &conn->ibc_active_txs, tx_list) { LASSERT(!tx->tx_queued); LASSERT(tx->tx_sending != 0 || tx->tx_waiting); @@ -3308,11 +3306,8 @@ static int kiblnd_check_txs_locked(struct kib_conn *conn, struct list_head *txs) { struct kib_tx *tx; - struct list_head *ttmp; - - list_for_each(ttmp, txs) { - tx = list_entry(ttmp, struct kib_tx, tx_list); + list_for_each_entry(tx, txs, tx_list) { if (txs != &conn->ibc_active_txs) { LASSERT(tx->tx_queued); } else { @@ -3354,7 +3349,6 @@ kiblnd_check_conns (int idx) struct kib_peer_ni *peer_ni; struct kib_conn *conn; struct kib_tx *tx, *tx_tmp; - struct list_head *ctmp; unsigned long flags; /* NB. We expect to have a look at all the peers and not find any @@ -3375,12 +3369,10 @@ kiblnd_check_conns (int idx) } } - list_for_each(ctmp, &peer_ni->ibp_conns) { + list_for_each_entry(conn, &peer_ni->ibp_conns, ibc_list) { int timedout; int sendnoop; - conn = list_entry(ctmp, struct kib_conn, ibc_list); - LASSERT(conn->ibc_state == IBLND_CONN_ESTABLISHED); spin_lock(&conn->ibc_lock); diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c index e9053fb..d9c428a 100644 --- a/lnet/klnds/socklnd/socklnd.c +++ b/lnet/klnds/socklnd/socklnd.c @@ -486,7 +486,6 @@ static void ksocknal_add_conn_cb_locked(struct ksock_peer_ni *peer_ni, struct ksock_conn_cb *conn_cb) { - struct list_head *tmp; struct ksock_conn *conn; struct ksock_net *net = peer_ni->ksnp_ni->ni_data; @@ -506,9 +505,7 @@ ksocknal_add_conn_cb_locked(struct ksock_peer_ni *peer_ni, /* peer_ni's route list takes over my ref on 'route' */ peer_ni->ksnp_conn_cb = conn_cb; - list_for_each(tmp, &peer_ni->ksnp_conns) { - conn = list_entry(tmp, struct ksock_conn, ksnc_list); - + list_for_each_entry(conn, &peer_ni->ksnp_conns, ksnc_list) { if (!rpc_cmp_addr((struct sockaddr *)&conn->ksnc_peeraddr, (struct sockaddr *)&conn_cb->ksnr_addr)) continue; @@ -688,7 +685,6 @@ ksocknal_get_conn_by_idx(struct lnet_ni *ni, int index) { struct ksock_peer_ni *peer_ni; struct ksock_conn *conn; - struct list_head *ctmp; int i; read_lock(&ksocknal_data.ksnd_global_lock); @@ -699,12 +695,11 @@ ksocknal_get_conn_by_idx(struct lnet_ni *ni, int index) if (peer_ni->ksnp_ni != ni) continue; - list_for_each(ctmp, &peer_ni->ksnp_conns) { + list_for_each_entry(conn, &peer_ni->ksnp_conns, + ksnc_list) { if (index-- > 0) continue; - conn = list_entry(ctmp, struct ksock_conn, - ksnc_list); ksocknal_conn_addref(conn); read_unlock(&ksocknal_data.ksnd_global_lock); return conn; @@ -785,7 +780,6 @@ ksocknal_create_conn(struct lnet_ni *ni, struct ksock_conn_cb *conn_cb, rwlock_t *global_lock = &ksocknal_data.ksnd_global_lock; LIST_HEAD(zombies); struct lnet_process_id peerid; - struct list_head *tmp; u64 incarnation; struct ksock_conn *conn; struct ksock_conn *conn2; @@ -983,9 +977,7 @@ ksocknal_create_conn(struct lnet_ni *ni, struct ksock_conn_cb *conn_cb, * loopback connection */ if (!rpc_cmp_addr((struct sockaddr *)&conn->ksnc_peeraddr, (struct sockaddr *)&conn->ksnc_myaddr)) { - list_for_each(tmp, &peer_ni->ksnp_conns) { - conn2 = list_entry(tmp, struct ksock_conn, ksnc_list); - + list_for_each_entry(conn2, &peer_ni->ksnp_conns, ksnc_list) { if (!rpc_cmp_addr( (struct sockaddr *)&conn2->ksnc_peeraddr, (struct sockaddr *)&conn->ksnc_peeraddr) || @@ -1203,7 +1195,6 @@ ksocknal_close_conn_locked(struct ksock_conn *conn, int error) struct ksock_peer_ni *peer_ni = conn->ksnc_peer; struct ksock_conn_cb *conn_cb; struct ksock_conn *conn2; - struct list_head *tmp; LASSERT(peer_ni->ksnp_error == 0); LASSERT(!conn->ksnc_closing); @@ -1225,19 +1216,13 @@ ksocknal_close_conn_locked(struct ksock_conn *conn, int error) LASSERT((conn_cb->ksnr_connected & BIT(conn->ksnc_type)) != 0); - conn2 = NULL; - list_for_each(tmp, &peer_ni->ksnp_conns) { - conn2 = list_entry(tmp, struct ksock_conn, ksnc_list); - + list_for_each_entry(conn2, &peer_ni->ksnp_conns, ksnc_list) { if (conn2->ksnc_conn_cb == conn_cb && conn2->ksnc_type == conn->ksnc_type) - break; - - conn2 = NULL; + goto conn2_found; } - if (conn2 == NULL) - conn_cb->ksnr_connected &= ~BIT(conn->ksnc_type); - + conn_cb->ksnr_connected &= ~BIT(conn->ksnc_type); +conn2_found: conn->ksnc_conn_cb = NULL; /* drop conn's ref on conn_cb */ @@ -1326,7 +1311,8 @@ ksocknal_finalize_zcreq(struct ksock_conn *conn) spin_lock(&peer_ni->ksnp_lock); - list_for_each_entry_safe(tx, tmp, &peer_ni->ksnp_zc_req_list, tx_zc_list) { + list_for_each_entry_safe(tx, tmp, &peer_ni->ksnp_zc_req_list, + tx_zc_list) { if (tx->tx_conn != conn) continue; @@ -1594,7 +1580,6 @@ ksocknal_push_peer(struct ksock_peer_ni *peer_ni) { int index; int i; - struct list_head *tmp; struct ksock_conn *conn; for (index = 0; ; index++) { @@ -1603,10 +1588,8 @@ ksocknal_push_peer(struct ksock_peer_ni *peer_ni) i = 0; conn = NULL; - list_for_each(tmp, &peer_ni->ksnp_conns) { + list_for_each_entry(conn, &peer_ni->ksnp_conns, ksnc_list) { if (i++ == index) { - conn = list_entry(tmp, struct ksock_conn, - ksnc_list); ksocknal_conn_addref(conn); break; } @@ -1614,7 +1597,7 @@ ksocknal_push_peer(struct ksock_peer_ni *peer_ni) read_unlock(&ksocknal_data.ksnd_global_lock); - if (conn == NULL) + if (i <= index) break; ksocknal_lib_push_conn (conn); diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c index c0d626a..24889b6 100644 --- a/lnet/klnds/socklnd/socklnd_cb.c +++ b/lnet/klnds/socklnd/socklnd_cb.c @@ -674,16 +674,14 @@ ksocknal_launch_all_connections_locked(struct ksock_peer_ni *peer_ni) struct ksock_conn * ksocknal_find_conn_locked(struct ksock_peer_ni *peer_ni, struct ksock_tx *tx, int nonblk) { - struct list_head *tmp; + struct ksock_conn *c; struct ksock_conn *conn; struct ksock_conn *typed = NULL; struct ksock_conn *fallback = NULL; int tnob = 0; int fnob = 0; - list_for_each(tmp, &peer_ni->ksnp_conns) { - struct ksock_conn *c = list_entry(tmp, struct ksock_conn, - ksnc_list); + list_for_each_entry(c, &peer_ni->ksnp_conns, ksnc_list) { int nob = atomic_read(&c->ksnc_tx_nob) + c->ksnc_sock->sk->sk_wmem_queued; int rc; @@ -2303,14 +2301,11 @@ ksocknal_find_timed_out_conn(struct ksock_peer_ni *peer_ni) { /* We're called with a shared lock on ksnd_global_lock */ struct ksock_conn *conn; - struct list_head *ctmp; struct ksock_tx *tx; - list_for_each(ctmp, &peer_ni->ksnp_conns) { + list_for_each_entry(conn, &peer_ni->ksnp_conns, ksnc_list) { int error; - conn = list_entry(ctmp, struct ksock_conn, ksnc_list); - /* Don't need the {get,put}connsock dance to deref ksnc_sock */ LASSERT (!conn->ksnc_closing); diff --git a/lnet/klnds/socklnd/socklnd_proto.c b/lnet/klnds/socklnd/socklnd_proto.c index 49267c0..533e8bb 100644 --- a/lnet/klnds/socklnd/socklnd_proto.c +++ b/lnet/klnds/socklnd/socklnd_proto.c @@ -63,8 +63,7 @@ ksocknal_next_tx_carrier(struct ksock_conn *conn) /* no more packets queued */ conn->ksnc_tx_carrier = NULL; } else { - conn->ksnc_tx_carrier = list_entry(tx->tx_list.next, - struct ksock_tx, tx_list); + conn->ksnc_tx_carrier = list_next_entry(tx, tx_list); LASSERT(conn->ksnc_tx_carrier->tx_msg.ksm_type == tx->tx_msg.ksm_type); } @@ -422,8 +421,8 @@ ksocknal_handle_zcack(struct ksock_conn *conn, __u64 cookie1, __u64 cookie2) spin_lock(&peer_ni->ksnp_lock); - list_for_each_entry_safe(tx, tmp, - &peer_ni->ksnp_zc_req_list, tx_zc_list) { + list_for_each_entry_safe(tx, tmp, &peer_ni->ksnp_zc_req_list, + tx_zc_list) { __u64 c = tx->tx_msg.ksm_zc_cookies[0]; if (c == cookie1 || c == cookie2 || (cookie1 < c && c < cookie2)) { -- 1.8.3.1