conn_cb->ksnr_blko_conn_count = 0;
conn_cb->ksnr_max_conns = 0;
conn_cb->ksnr_busy_retry_count = 0;
+ conn_cb->ksnr_t_last_conn = 0;
+ conn_cb->ksnr_max_retries = 0;
return conn_cb;
}
peer_ni->ksnp_last_alive = 0;
peer_ni->ksnp_zc_next_cookie = SOCKNAL_KEEPALIVE_PING + 1;
peer_ni->ksnp_conn_cb = NULL;
+ peer_ni->ksnp_t_created = ktime_get_seconds();
INIT_LIST_HEAD(&peer_ni->ksnp_conns);
INIT_LIST_HEAD(&peer_ni->ksnp_tx_queue);
if (peer_ni->ksnp_conn_cb) {
ksocknal_conn_cb_decref(conn_cb);
} else {
- ksocknal_add_conn_cb_locked(peer_ni, conn_cb);
/* Remember conns_per_peer setting at the time
* of connection initiation. It will define the
* max number of conns per type for this conn_cb
* while it's in use.
*/
conn_cb->ksnr_max_conns = ksocknal_get_conns_per_peer(peer_ni);
+ ksocknal_add_conn_cb_locked(peer_ni, conn_cb);
}
write_unlock_bh(&ksocknal_data.ksnd_global_lock);
unsigned int ksnr_busy_retry_count;/* counts retry attempts
* due to EALREADY rc
*/
+ time64_t ksnr_t_last_conn;
+ unsigned int ksnr_max_retries:4;/* max_retries by type */
};
#define SOCKNAL_KEEPALIVE_PING 1 /* cookie for keepalive ping */
struct list_head ksnp_zc_req_list;
time64_t ksnp_send_keepalive; /* time to send keepalive */
struct lnet_ni *ksnp_ni; /* which network */
+ time64_t ksnp_t_created;
};
struct ksock_connreq {
conn_cb->ksnr_blki_conn_count <= conn_cb->ksnr_blko_conn_count) {
type = SOCKLND_CONN_BULK_IN;
} else {
+ if ((wanted & BIT(SOCKLND_CONN_BULK_OUT)) == 0) {
+ CERROR("Time %lld Peer %s (c:a:la:ct)(%d:%d:%lld:%lld)\n",
+ ktime_get_seconds(),
+ libcfs_nid2str(peer_ni->ksnp_id.nid),
+ peer_ni->ksnp_closing,
+ peer_ni->ksnp_accepting,
+ peer_ni->ksnp_last_alive,
+ peer_ni->ksnp_t_created);
+ CERROR("Conn_cb %p IP %pI4h (sh:cg:cd:de:cc:ct:mr)(%u,%u,%u:%u:%d:%lld:%u)\n",
+ conn_cb,
+ &conn_cb->ksnr_ipaddr,
+ conn_cb->ksnr_scheduled,
+ conn_cb->ksnr_connecting,
+ conn_cb->ksnr_connected,
+ conn_cb->ksnr_deleted,
+ conn_cb->ksnr_conn_count,
+ conn_cb->ksnr_t_last_conn,
+ conn_cb->ksnr_max_retries);
+ }
LASSERT ((wanted & BIT(SOCKLND_CONN_BULK_OUT)) != 0);
type = SOCKLND_CONN_BULK_OUT;
}
if (retry_later)
CDEBUG(D_NET, "peer_ni %s: conn race, retry later. rc %d\n",
libcfs_nid2str(peer_ni->ksnp_id.nid), rc);
+ conn_cb->ksnr_t_last_conn = ktime_get_seconds();
write_lock_bh(&ksocknal_data.ksnd_global_lock);
}
* the peer doesn't support as many connections as we want
*/
conn_cb->ksnr_connected |= BIT(type);
+ conn_cb->ksnr_max_retries |= BIT(type);
retry_later = false;
}