mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-30 08:04:13 +08:00
[SCSI] ibmvfc: Reduce error logging noise
The ibmvfc driver currently logs errors during discovery for several transient fabric errors, which generally get retried. If retries do not work, we see multiple errors in the log. If retries do work, we see errors in the log which may be confusing since the retry worked. This patch enhances the discovery time error logging to only log errors for command failures during discovery if all allowed retries have been used up. The existing behavior of logging all failures can be restored by setting the hosts log_level to a value of 3 or greater. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
85e2399e92
commit
7d0e462247
@ -842,9 +842,13 @@ static void ibmvfc_reset_host(struct ibmvfc_host *vhost)
|
||||
* ibmvfc_retry_host_init - Retry host initialization if allowed
|
||||
* @vhost: ibmvfc host struct
|
||||
*
|
||||
* Returns: 1 if init will be retried / 0 if not
|
||||
*
|
||||
**/
|
||||
static void ibmvfc_retry_host_init(struct ibmvfc_host *vhost)
|
||||
static int ibmvfc_retry_host_init(struct ibmvfc_host *vhost)
|
||||
{
|
||||
int retry = 0;
|
||||
|
||||
if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) {
|
||||
vhost->delay_init = 1;
|
||||
if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) {
|
||||
@ -853,11 +857,14 @@ static void ibmvfc_retry_host_init(struct ibmvfc_host *vhost)
|
||||
ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE);
|
||||
} else if (vhost->init_retries == IBMVFC_MAX_HOST_INIT_RETRIES)
|
||||
__ibmvfc_reset_host(vhost);
|
||||
else
|
||||
else {
|
||||
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
|
||||
retry = 1;
|
||||
}
|
||||
}
|
||||
|
||||
wake_up(&vhost->work_wait_q);
|
||||
return retry;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2733,15 +2740,19 @@ static void ibmvfc_init_tgt(struct ibmvfc_target *tgt,
|
||||
* @tgt: ibmvfc target struct
|
||||
* @job_step: initialization job step
|
||||
*
|
||||
* Returns: 1 if step will be retried / 0 if not
|
||||
*
|
||||
**/
|
||||
static void ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt,
|
||||
static int ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt,
|
||||
void (*job_step) (struct ibmvfc_target *))
|
||||
{
|
||||
if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) {
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
|
||||
wake_up(&tgt->vhost->work_wait_q);
|
||||
return 0;
|
||||
} else
|
||||
ibmvfc_init_tgt(tgt, job_step);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Defined in FC-LS */
|
||||
@ -2790,7 +2801,7 @@ static void ibmvfc_tgt_prli_done(struct ibmvfc_event *evt)
|
||||
struct ibmvfc_process_login *rsp = &evt->xfer_iu->prli;
|
||||
struct ibmvfc_prli_svc_parms *parms = &rsp->parms;
|
||||
u32 status = rsp->common.status;
|
||||
int index;
|
||||
int index, level = IBMVFC_DEFAULT_LOG_LEVEL;
|
||||
|
||||
vhost->discovery_threads--;
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE);
|
||||
@ -2826,13 +2837,14 @@ static void ibmvfc_tgt_prli_done(struct ibmvfc_event *evt)
|
||||
break;
|
||||
case IBMVFC_MAD_FAILED:
|
||||
default:
|
||||
tgt_err(tgt, "Process Login failed: %s (%x:%x) rc=0x%02X\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error),
|
||||
rsp->status, rsp->error, status);
|
||||
if (ibmvfc_retry_cmd(rsp->status, rsp->error))
|
||||
ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli);
|
||||
level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli);
|
||||
else
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
|
||||
|
||||
tgt_log(tgt, level, "Process Login failed: %s (%x:%x) rc=0x%02X\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error),
|
||||
rsp->status, rsp->error, status);
|
||||
break;
|
||||
};
|
||||
|
||||
@ -2891,6 +2903,7 @@ static void ibmvfc_tgt_plogi_done(struct ibmvfc_event *evt)
|
||||
struct ibmvfc_host *vhost = evt->vhost;
|
||||
struct ibmvfc_port_login *rsp = &evt->xfer_iu->plogi;
|
||||
u32 status = rsp->common.status;
|
||||
int level = IBMVFC_DEFAULT_LOG_LEVEL;
|
||||
|
||||
vhost->discovery_threads--;
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE);
|
||||
@ -2919,15 +2932,15 @@ static void ibmvfc_tgt_plogi_done(struct ibmvfc_event *evt)
|
||||
break;
|
||||
case IBMVFC_MAD_FAILED:
|
||||
default:
|
||||
tgt_err(tgt, "Port Login failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n",
|
||||
if (ibmvfc_retry_cmd(rsp->status, rsp->error))
|
||||
level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi);
|
||||
else
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
|
||||
|
||||
tgt_log(tgt, level, "Port Login failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error), rsp->status, rsp->error,
|
||||
ibmvfc_get_fc_type(rsp->fc_type), rsp->fc_type,
|
||||
ibmvfc_get_ls_explain(rsp->fc_explain), rsp->fc_explain, status);
|
||||
|
||||
if (ibmvfc_retry_cmd(rsp->status, rsp->error))
|
||||
ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi);
|
||||
else
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
|
||||
break;
|
||||
};
|
||||
|
||||
@ -3281,6 +3294,7 @@ static void ibmvfc_tgt_query_target_done(struct ibmvfc_event *evt)
|
||||
struct ibmvfc_host *vhost = evt->vhost;
|
||||
struct ibmvfc_query_tgt *rsp = &evt->xfer_iu->query_tgt;
|
||||
u32 status = rsp->common.status;
|
||||
int level = IBMVFC_DEFAULT_LOG_LEVEL;
|
||||
|
||||
vhost->discovery_threads--;
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE);
|
||||
@ -3300,19 +3314,19 @@ static void ibmvfc_tgt_query_target_done(struct ibmvfc_event *evt)
|
||||
break;
|
||||
case IBMVFC_MAD_FAILED:
|
||||
default:
|
||||
tgt_err(tgt, "Query Target failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error), rsp->status, rsp->error,
|
||||
ibmvfc_get_fc_type(rsp->fc_type), rsp->fc_type,
|
||||
ibmvfc_get_gs_explain(rsp->fc_explain), rsp->fc_explain, status);
|
||||
|
||||
if ((rsp->status & IBMVFC_FABRIC_MAPPED) == IBMVFC_FABRIC_MAPPED &&
|
||||
rsp->error == IBMVFC_UNABLE_TO_PERFORM_REQ &&
|
||||
rsp->fc_explain == IBMVFC_PORT_NAME_NOT_REG)
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
|
||||
else if (ibmvfc_retry_cmd(rsp->status, rsp->error))
|
||||
ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target);
|
||||
level += ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target);
|
||||
else
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
|
||||
|
||||
tgt_log(tgt, level, "Query Target failed: %s (%x:%x) %s (%x) %s (%x) rc=0x%02X\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error), rsp->status, rsp->error,
|
||||
ibmvfc_get_fc_type(rsp->fc_type), rsp->fc_type,
|
||||
ibmvfc_get_gs_explain(rsp->fc_explain), rsp->fc_explain, status);
|
||||
break;
|
||||
};
|
||||
|
||||
@ -3431,6 +3445,7 @@ static void ibmvfc_discover_targets_done(struct ibmvfc_event *evt)
|
||||
struct ibmvfc_host *vhost = evt->vhost;
|
||||
struct ibmvfc_discover_targets *rsp = &evt->xfer_iu->discover_targets;
|
||||
u32 mad_status = rsp->common.status;
|
||||
int level = IBMVFC_DEFAULT_LOG_LEVEL;
|
||||
|
||||
switch (mad_status) {
|
||||
case IBMVFC_MAD_SUCCESS:
|
||||
@ -3439,9 +3454,9 @@ static void ibmvfc_discover_targets_done(struct ibmvfc_event *evt)
|
||||
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_ALLOC_TGTS);
|
||||
break;
|
||||
case IBMVFC_MAD_FAILED:
|
||||
dev_err(vhost->dev, "Discover Targets failed: %s (%x:%x)\n",
|
||||
level += ibmvfc_retry_host_init(vhost);
|
||||
ibmvfc_log(vhost, level, "Discover Targets failed: %s (%x:%x)\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error), rsp->status, rsp->error);
|
||||
ibmvfc_retry_host_init(vhost);
|
||||
break;
|
||||
case IBMVFC_MAD_DRIVER_FAILED:
|
||||
break;
|
||||
@ -3493,18 +3508,19 @@ static void ibmvfc_npiv_login_done(struct ibmvfc_event *evt)
|
||||
u32 mad_status = evt->xfer_iu->npiv_login.common.status;
|
||||
struct ibmvfc_npiv_login_resp *rsp = &vhost->login_buf->resp;
|
||||
unsigned int npiv_max_sectors;
|
||||
int level = IBMVFC_DEFAULT_LOG_LEVEL;
|
||||
|
||||
switch (mad_status) {
|
||||
case IBMVFC_MAD_SUCCESS:
|
||||
ibmvfc_free_event(evt);
|
||||
break;
|
||||
case IBMVFC_MAD_FAILED:
|
||||
dev_err(vhost->dev, "NPIV Login failed: %s (%x:%x)\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error), rsp->status, rsp->error);
|
||||
if (ibmvfc_retry_cmd(rsp->status, rsp->error))
|
||||
ibmvfc_retry_host_init(vhost);
|
||||
level += ibmvfc_retry_host_init(vhost);
|
||||
else
|
||||
ibmvfc_link_down(vhost, IBMVFC_LINK_DEAD);
|
||||
ibmvfc_log(vhost, level, "NPIV Login failed: %s (%x:%x)\n",
|
||||
ibmvfc_get_cmd_error(rsp->status, rsp->error), rsp->status, rsp->error);
|
||||
ibmvfc_free_event(evt);
|
||||
return;
|
||||
case IBMVFC_MAD_CRQ_ERROR:
|
||||
|
@ -707,6 +707,12 @@ struct ibmvfc_host {
|
||||
#define tgt_err(t, fmt, ...) \
|
||||
dev_err((t)->vhost->dev, "%llX: " fmt, (t)->scsi_id, ##__VA_ARGS__)
|
||||
|
||||
#define tgt_log(t, level, fmt, ...) \
|
||||
do { \
|
||||
if ((t)->vhost->log_level >= level) \
|
||||
tgt_err(t, fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define ibmvfc_dbg(vhost, ...) \
|
||||
DBG_CMD(dev_info((vhost)->dev, ##__VA_ARGS__))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user