diff options
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_gs.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 13 |
2 files changed, 12 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c index 5bf9a59432f6..21eff2d30266 100644 --- a/drivers/scsi/qla2xxx/qla_gs.c +++ b/drivers/scsi/qla2xxx/qla_gs.c | |||
| @@ -3179,6 +3179,7 @@ done_free_sp: | |||
| 3179 | sp->free(sp); | 3179 | sp->free(sp); |
| 3180 | fcport->flags &= ~FCF_ASYNC_SENT; | 3180 | fcport->flags &= ~FCF_ASYNC_SENT; |
| 3181 | done: | 3181 | done: |
| 3182 | fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 3182 | return rval; | 3183 | return rval; |
| 3183 | } | 3184 | } |
| 3184 | 3185 | ||
| @@ -3370,6 +3371,7 @@ done_free_sp: | |||
| 3370 | sp->free(sp); | 3371 | sp->free(sp); |
| 3371 | fcport->flags &= ~FCF_ASYNC_SENT; | 3372 | fcport->flags &= ~FCF_ASYNC_SENT; |
| 3372 | done: | 3373 | done: |
| 3374 | fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 3373 | return rval; | 3375 | return rval; |
| 3374 | } | 3376 | } |
| 3375 | 3377 | ||
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 4efc25700e99..d5a45c4981ec 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
| @@ -213,6 +213,7 @@ done_free_sp: | |||
| 213 | sp->free(sp); | 213 | sp->free(sp); |
| 214 | fcport->flags &= ~FCF_ASYNC_SENT; | 214 | fcport->flags &= ~FCF_ASYNC_SENT; |
| 215 | done: | 215 | done: |
| 216 | fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 216 | return rval; | 217 | return rval; |
| 217 | } | 218 | } |
| 218 | 219 | ||
| @@ -263,7 +264,7 @@ qla2x00_async_logout(struct scsi_qla_host *vha, fc_port_t *fcport) | |||
| 263 | done_free_sp: | 264 | done_free_sp: |
| 264 | sp->free(sp); | 265 | sp->free(sp); |
| 265 | done: | 266 | done: |
| 266 | fcport->flags &= ~FCF_ASYNC_SENT; | 267 | fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); |
| 267 | return rval; | 268 | return rval; |
| 268 | } | 269 | } |
| 269 | 270 | ||
| @@ -271,6 +272,7 @@ void | |||
| 271 | qla2x00_async_prlo_done(struct scsi_qla_host *vha, fc_port_t *fcport, | 272 | qla2x00_async_prlo_done(struct scsi_qla_host *vha, fc_port_t *fcport, |
| 272 | uint16_t *data) | 273 | uint16_t *data) |
| 273 | { | 274 | { |
| 275 | fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 274 | /* Don't re-login in target mode */ | 276 | /* Don't re-login in target mode */ |
| 275 | if (!fcport->tgt_session) | 277 | if (!fcport->tgt_session) |
| 276 | qla2x00_mark_device_lost(vha, fcport, 1, 0); | 278 | qla2x00_mark_device_lost(vha, fcport, 1, 0); |
| @@ -284,6 +286,7 @@ qla2x00_async_prlo_sp_done(void *s, int res) | |||
| 284 | struct srb_iocb *lio = &sp->u.iocb_cmd; | 286 | struct srb_iocb *lio = &sp->u.iocb_cmd; |
| 285 | struct scsi_qla_host *vha = sp->vha; | 287 | struct scsi_qla_host *vha = sp->vha; |
| 286 | 288 | ||
| 289 | sp->fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 287 | if (!test_bit(UNLOADING, &vha->dpc_flags)) | 290 | if (!test_bit(UNLOADING, &vha->dpc_flags)) |
| 288 | qla2x00_post_async_prlo_done_work(sp->fcport->vha, sp->fcport, | 291 | qla2x00_post_async_prlo_done_work(sp->fcport->vha, sp->fcport, |
| 289 | lio->u.logio.data); | 292 | lio->u.logio.data); |
| @@ -322,6 +325,7 @@ qla2x00_async_prlo(struct scsi_qla_host *vha, fc_port_t *fcport) | |||
| 322 | done_free_sp: | 325 | done_free_sp: |
| 323 | sp->free(sp); | 326 | sp->free(sp); |
| 324 | done: | 327 | done: |
| 328 | fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 325 | return rval; | 329 | return rval; |
| 326 | } | 330 | } |
| 327 | 331 | ||
| @@ -375,6 +379,8 @@ qla2x00_async_adisc_sp_done(void *ptr, int res) | |||
| 375 | "Async done-%s res %x %8phC\n", | 379 | "Async done-%s res %x %8phC\n", |
| 376 | sp->name, res, sp->fcport->port_name); | 380 | sp->name, res, sp->fcport->port_name); |
| 377 | 381 | ||
| 382 | sp->fcport->flags &= ~FCF_ASYNC_SENT; | ||
| 383 | |||
| 378 | memset(&ea, 0, sizeof(ea)); | 384 | memset(&ea, 0, sizeof(ea)); |
| 379 | ea.event = FCME_ADISC_DONE; | 385 | ea.event = FCME_ADISC_DONE; |
| 380 | ea.rc = res; | 386 | ea.rc = res; |
| @@ -425,7 +431,7 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport, | |||
| 425 | done_free_sp: | 431 | done_free_sp: |
| 426 | sp->free(sp); | 432 | sp->free(sp); |
| 427 | done: | 433 | done: |
| 428 | fcport->flags &= ~FCF_ASYNC_SENT; | 434 | fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); |
| 429 | qla2x00_post_async_adisc_work(vha, fcport, data); | 435 | qla2x00_post_async_adisc_work(vha, fcport, data); |
| 430 | return rval; | 436 | return rval; |
| 431 | } | 437 | } |
| @@ -1799,6 +1805,7 @@ qla2x00_async_logout_done(struct scsi_qla_host *vha, fc_port_t *fcport, | |||
| 1799 | qla2x00_mark_device_lost(vha, fcport, 1, 0); | 1805 | qla2x00_mark_device_lost(vha, fcport, 1, 0); |
| 1800 | qlt_logo_completion_handler(fcport, data[0]); | 1806 | qlt_logo_completion_handler(fcport, data[0]); |
| 1801 | fcport->login_gen++; | 1807 | fcport->login_gen++; |
| 1808 | fcport->flags &= ~FCF_ASYNC_ACTIVE; | ||
| 1802 | return; | 1809 | return; |
| 1803 | } | 1810 | } |
| 1804 | 1811 | ||
| @@ -1806,6 +1813,7 @@ void | |||
| 1806 | qla2x00_async_adisc_done(struct scsi_qla_host *vha, fc_port_t *fcport, | 1813 | qla2x00_async_adisc_done(struct scsi_qla_host *vha, fc_port_t *fcport, |
| 1807 | uint16_t *data) | 1814 | uint16_t *data) |
| 1808 | { | 1815 | { |
| 1816 | fcport->flags &= ~(FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE); | ||
| 1809 | if (data[0] == MBS_COMMAND_COMPLETE) { | 1817 | if (data[0] == MBS_COMMAND_COMPLETE) { |
| 1810 | qla2x00_update_fcport(vha, fcport); | 1818 | qla2x00_update_fcport(vha, fcport); |
| 1811 | 1819 | ||
| @@ -1813,7 +1821,6 @@ qla2x00_async_adisc_done(struct scsi_qla_host *vha, fc_port_t *fcport, | |||
| 1813 | } | 1821 | } |
| 1814 | 1822 | ||
| 1815 | /* Retry login. */ | 1823 | /* Retry login. */ |
| 1816 | fcport->flags &= ~FCF_ASYNC_SENT; | ||
| 1817 | if (data[1] & QLA_LOGIO_LOGIN_RETRIED) | 1824 | if (data[1] & QLA_LOGIO_LOGIN_RETRIED) |
| 1818 | set_bit(RELOGIN_NEEDED, &vha->dpc_flags); | 1825 | set_bit(RELOGIN_NEEDED, &vha->dpc_flags); |
| 1819 | else | 1826 | else |
