提交 4e5fae7a 编写于 作者: V Vasu Dev 提交者: James Bottomley

[SCSI] libfc: update fcp and exch stats

Updates newly added stats from fc_get_host_stats,
added new function fc_exch_update_stats to
update exches related stats from fc_exch.c
by going thru internal ema_list elements.
Signed-off-by: NVasu Dev <vasu.dev@intel.com>
Acked-by : Robert Love <robert.w.love@intel.com>
Tested-by: NRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
上级 0f02a665
...@@ -99,11 +99,6 @@ struct fc_exch_mgr { ...@@ -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 @@ static void fc_exch_els_rrq(struct fc_frame *fp) ...@@ -2155,6 +2150,31 @@ static void fc_exch_els_rrq(struct fc_frame *fp)
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
......
...@@ -329,6 +329,9 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) ...@@ -329,6 +329,9 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost)
fc_stats->fcp_control_requests += stats->ControlRequests; fc_stats->fcp_control_requests += stats->ControlRequests;
fcp_in_bytes += stats->InputBytes; fcp_in_bytes += stats->InputBytes;
fcp_out_bytes += stats->OutputBytes; fcp_out_bytes += stats->OutputBytes;
fc_stats->fcp_packet_alloc_failures += stats->FcpPktAllocFails;
fc_stats->fcp_packet_aborts += stats->FcpPktAborts;
fc_stats->fcp_frame_alloc_failures += stats->FcpFrameAllocFails;
fc_stats->link_failure_count += stats->LinkFailureCount; fc_stats->link_failure_count += stats->LinkFailureCount;
} }
fc_stats->fcp_input_megabytes = div_u64(fcp_in_bytes, 1000000); fc_stats->fcp_input_megabytes = div_u64(fcp_in_bytes, 1000000);
...@@ -339,6 +342,10 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost) ...@@ -339,6 +342,10 @@ struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *shost)
fc_stats->loss_of_signal_count = -1; fc_stats->loss_of_signal_count = -1;
fc_stats->prim_seq_protocol_err_count = -1; fc_stats->prim_seq_protocol_err_count = -1;
fc_stats->dumped_frames = -1; fc_stats->dumped_frames = -1;
/* update exches stats */
fc_exch_update_stats(lport);
return fc_stats; return fc_stats;
} }
EXPORT_SYMBOL(fc_get_host_stats); EXPORT_SYMBOL(fc_get_host_stats);
......
...@@ -1121,6 +1121,7 @@ void fc_fill_hdr(struct fc_frame *, const struct fc_frame *, ...@@ -1121,6 +1121,7 @@ void fc_fill_hdr(struct fc_frame *, const struct fc_frame *,
* EXCHANGE MANAGER LAYER * EXCHANGE MANAGER LAYER
*****************************/ *****************************/
int fc_exch_init(struct fc_lport *); int fc_exch_init(struct fc_lport *);
void fc_exch_update_stats(struct fc_lport *lport);
struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *, struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *,
struct fc_exch_mgr *, struct fc_exch_mgr *,
bool (*match)(struct fc_frame *)); bool (*match)(struct fc_frame *));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册