Fix delaying requests to unknown virtual ports 2s after init.
This code was originally implemented 7 years ago, but never really worked due to trivial error. I think this functionality may be not required. Initiators supporting optional periodic command status checks detected those terminated commands and retried them 3 seconds later. But thinking about less featured initiators and the fact that it is our race makes virtual ports "unknown" it may be good to have this feature.
This commit is contained in:
parent
41ea34a25c
commit
514a71eba7
@ -2431,6 +2431,7 @@ isp_fc_enable_vp(ispsoftc_t *isp, int chan)
|
||||
__func__, chan, vp.vp_mod_hdr.rqs_flags, vp.vp_mod_status);
|
||||
return (EIO);
|
||||
}
|
||||
GET_NANOTIME(&isp->isp_init_time);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -5865,6 +5866,7 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox)
|
||||
* These are broadcast events that have to be sent across
|
||||
* all active channels.
|
||||
*/
|
||||
GET_NANOTIME(&isp->isp_init_time);
|
||||
for (chan = 0; chan < isp->isp_nchan; chan++) {
|
||||
fcp = FCPARAM(isp, chan);
|
||||
int topo = fcp->isp_topo;
|
||||
@ -5921,6 +5923,7 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox)
|
||||
* This is a broadcast event that has to be sent across
|
||||
* all active channels.
|
||||
*/
|
||||
GET_NANOTIME(&isp->isp_init_time);
|
||||
for (chan = 0; chan < isp->isp_nchan; chan++) {
|
||||
fcp = FCPARAM(isp, chan);
|
||||
if (fcp->role == ISP_ROLE_NONE)
|
||||
@ -5964,6 +5967,7 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox)
|
||||
* This is a broadcast event that has to be sent across
|
||||
* all active channels.
|
||||
*/
|
||||
GET_NANOTIME(&isp->isp_init_time);
|
||||
for (chan = 0; chan < isp->isp_nchan; chan++) {
|
||||
fcp = FCPARAM(isp, chan);
|
||||
if (fcp->role == ISP_ROLE_NONE)
|
||||
@ -6162,6 +6166,7 @@ isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *opt
|
||||
portid = (uint32_t)rid.ridacq_vp_port_hi << 16 |
|
||||
rid.ridacq_vp_port_lo;
|
||||
if (rid.ridacq_format == 0) {
|
||||
GET_NANOTIME(&isp->isp_init_time);
|
||||
for (chan = 0; chan < isp->isp_nchan; chan++) {
|
||||
fcparam *fcp = FCPARAM(isp, chan);
|
||||
if (fcp->role == ISP_ROLE_NONE)
|
||||
|
@ -2055,7 +2055,7 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
|
||||
* It's a bit tricky here as we need to stash this command *somewhere*.
|
||||
*/
|
||||
GET_NANOTIME(&now);
|
||||
if (NANOTIME_SUB(&isp->isp_init_time, &now) > 2000000000ULL) {
|
||||
if (NANOTIME_SUB(&now, &isp->isp_init_time) > 2000000000ULL) {
|
||||
isp_prt(isp, ISP_LOGWARN, "%s: [RX_ID 0x%x] D_ID %x not found on any channel- dropping", __func__, aep->at_rxid, did);
|
||||
isp_endcmd(isp, aep, NIL_HANDLE, ISP_NOCHAN, ECMD_TERMINATE, 0);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user