[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: Vasu Dev <vasu.dev@intel.com> Acked-by : Robert Love <robert.w.love@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
0f02a66528
commit
4e5fae7adb
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
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 *,
|
||||||
* 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 *));
|
||||||
|
|
Loading…
Reference in New Issue