/** * fc_fabric_logoff() - Logout of the fabric * @lport: The local port to logoff the fabric * * Return value: * 0 for success, -1 for failure */ int fc_fabric_logoff(struct fc_lport *lport) { lport->tt.disc_stop_final(lport); mutex_lock(&lport->lp_mutex); if (lport->dns_rdata) lport->tt.rport_logoff(lport->dns_rdata); mutex_unlock(&lport->lp_mutex); lport->tt.rport_flush_queue(); mutex_lock(&lport->lp_mutex); fc_lport_enter_logo(lport); mutex_unlock(&lport->lp_mutex); cancel_delayed_work_sync(&lport->retry_work); return 0; }
static void fc_lport_timeout(struct work_struct *work) { struct fc_lport *lport = container_of(work, struct fc_lport, retry_work.work); mutex_lock(&lport->lp_mutex); switch (lport->state) { case LPORT_ST_DISABLED: WARN_ON(1); break; case LPORT_ST_READY: break; case LPORT_ST_RESET: break; case LPORT_ST_FLOGI: fc_lport_enter_flogi(lport); break; case LPORT_ST_DNS: fc_lport_enter_dns(lport); break; case LPORT_ST_RNN_ID: case LPORT_ST_RSNN_NN: case LPORT_ST_RSPN_ID: case LPORT_ST_RFT_ID: case LPORT_ST_RFF_ID: fc_lport_enter_ns(lport, lport->state); break; case LPORT_ST_FDMI: fc_lport_enter_fdmi(lport); break; case LPORT_ST_RHBA: case LPORT_ST_RPA: case LPORT_ST_DHBA: case LPORT_ST_DPRT: fc_lport_enter_ms(lport, lport->state); break; case LPORT_ST_SCR: fc_lport_enter_scr(lport); break; case LPORT_ST_LOGO: fc_lport_enter_logo(lport); break; } mutex_unlock(&lport->lp_mutex); }
static void fc_lport_timeout(struct work_struct *work) { struct fc_lport *lport = container_of(work, struct fc_lport, retry_work.work); mutex_lock(&lport->lp_mutex); switch (lport->state) { case LPORT_ST_DISABLED: WARN_ON(1); break; case LPORT_ST_READY: WARN_ON(1); break; case LPORT_ST_RESET: break; case LPORT_ST_FLOGI: fc_lport_enter_flogi(lport); break; case LPORT_ST_DNS: fc_lport_enter_dns(lport); break; case LPORT_ST_RPN_ID: fc_lport_enter_rpn_id(lport); break; case LPORT_ST_RFT_ID: fc_lport_enter_rft_id(lport); break; case LPORT_ST_SCR: fc_lport_enter_scr(lport); break; case LPORT_ST_LOGO: fc_lport_enter_logo(lport); break; } mutex_unlock(&lport->lp_mutex); }