|
@@ -99,11 +99,6 @@ struct fc_exch_mgr {
|
|
u16 max_xid;
|
|
u16 max_xid;
|
|
u16 pool_max_index;
|
|
u16 pool_max_index;
|
|
|
|
|
|
- /*
|
|
|
|
- * currently exchange mgr stats are updated but not used.
|
|
|
|
- * either stats can be expose via sysfs or remove them
|
|
|
|
- * all together if not used XXX
|
|
|
|
- */
|
|
|
|
struct {
|
|
struct {
|
|
atomic_t no_free_exch;
|
|
atomic_t no_free_exch;
|
|
atomic_t no_free_exch_xid;
|
|
atomic_t no_free_exch_xid;
|
|
@@ -2155,6 +2150,31 @@ out:
|
|
fc_exch_release(ep); /* drop hold from fc_exch_find */
|
|
fc_exch_release(ep); /* drop hold from fc_exch_find */
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * fc_exch_update_stats() - update exches stats to lport
|
|
|
|
+ * @lport: The local port to update exchange manager stats
|
|
|
|
+ */
|
|
|
|
+void fc_exch_update_stats(struct fc_lport *lport)
|
|
|
|
+{
|
|
|
|
+ struct fc_host_statistics *st;
|
|
|
|
+ struct fc_exch_mgr_anchor *ema;
|
|
|
|
+ struct fc_exch_mgr *mp;
|
|
|
|
+
|
|
|
|
+ st = &lport->host_stats;
|
|
|
|
+
|
|
|
|
+ list_for_each_entry(ema, &lport->ema_list, ema_list) {
|
|
|
|
+ mp = ema->mp;
|
|
|
|
+ st->fc_no_free_exch += atomic_read(&mp->stats.no_free_exch);
|
|
|
|
+ st->fc_no_free_exch_xid +=
|
|
|
|
+ atomic_read(&mp->stats.no_free_exch_xid);
|
|
|
|
+ st->fc_xid_not_found += atomic_read(&mp->stats.xid_not_found);
|
|
|
|
+ st->fc_xid_busy += atomic_read(&mp->stats.xid_busy);
|
|
|
|
+ st->fc_seq_not_found += atomic_read(&mp->stats.seq_not_found);
|
|
|
|
+ st->fc_non_bls_resp += atomic_read(&mp->stats.non_bls_resp);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(fc_exch_update_stats);
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* fc_exch_mgr_add() - Add an exchange manager to a local port's list of EMs
|
|
* fc_exch_mgr_add() - Add an exchange manager to a local port's list of EMs
|
|
* @lport: The local port to add the exchange manager to
|
|
* @lport: The local port to add the exchange manager to
|