lpfc_els_flush_all_cmd(9)
π lpfc_els_flush_all_cmd β the "okay everybody OUT" routine π
okay so real talk, bestie: this page is from the Kernel API Manual, and it's about a lil function called lpfc_els_flush_all_cmd(9). it's a whole vibe check for your HBA. let's get into it π«Ά
β¨ NAME β¨
lpfc_els_flush_all_cmd β clean up, like, all the outstanding els commands to a HBA. every single one. no stragglers. no crumbs. π§Ή
β¨ SYNOPSIS β¨
void lpfc_els_flush_all_cmd (struct lpfc_hba *phba );
it returns void, so don't @ me looking for a return value, there isn't one π
β¨ ARGUMENTS β¨
phbaβ pointer to thelpfchba data structure. that's the whole cast, one single parameter, main character energy π
β¨ DESCRIPTION β¨
okay so here's the tea β β this routine is used to clean up all the outstanding ELS commands on a phba. like, all of them. and it does it in three very deliberate little steps, and honestly the way that it's structured? obsessed. π
step one, the big abort: first it aborts the phba by invoking the lpfc_fabric_abort_hba routine. boom. doors closed. πͺ
step two, the transmit queue walk: after that, it walks the ELS transmit queue to remove all the IOCBs to the phba other than the QUE_RING and ABORT/CLOSE IOCBs. those two get to stay, they're VIPs, iykyk π and then it gets spicy with the leftovers:
- for the IOCBs with the completion callback function associated, that callback function will be invoked with the status set to
IOSTAT_LOCAL_REJECTandun.ulpWord[4]set toIOERR_SLI_ABORTEDπ (sorry bestie, it's a local reject, it's not personal) - for IOCBs without the completion callback function associated, the IOCB will simply be released. no callback, no drama. just gone. poof β¨
step three, the completion queue walk: finally, it walks the ELS transmit completion queue to issue an abort IOCB to any transmit completion queue IOCB that is not an IOCB from libdfc (i.e., the management plane IOCBs that are not part of the discovery state machine) out to HBA by invoking the lpfc_sli_issue_abort_iotag routine. say that five times fast, I dare you π
tl;dr: abort the phba, sweep the transmit queue (minus QUE_RING and ABORT/CLOSE), callback-with-IOSTAT_LOCAL_REJECT-and-IOERR_SLI_ABORTED or just release, then sweep the completion queue and abort the non-libdfc ones via lpfc_sli_issue_abort_iotag. clean. efficient. slay. π₯
π SEE ALSO π
buckle up bestie, the friend group is HUGE and every single one of them is invited to the function π
lpfc_els_chk_latt(9), lpfc_prep_els_iocb(9), lpfc_issue_fabric_reglogin(9), lpfc_issue_reg_vfi(9), lpfc_issue_unreg_vfi(9), lpfc_check_clean_addr_bit(9), lpfc_cmpl_els_flogi_fabric(9), lpfc_cmpl_els_flogi_nport(9), lpfc_cmpl_els_flogi(9), lpfc_cmpl_els_link_down(9), lpfc_issue_els_flogi(9), lpfc_els_abort_flogi(9), lpfc_initial_flogi(9), lpfc_initial_fdisc(9), lpfc_more_plogi(9), lpfc_plogi_confirm_nport(9), lpfc_end_rscn(9), lpfc_cmpl_els_rrq(9), lpfc_check_encryption(9), lpfc_cmpl_els_plogi(9), lpfc_issue_els_plogi(9), lpfc_cmpl_els_prli(9), lpfc_issue_els_prli(9), lpfc_rscn_disc(9), lpfc_adisc_done(9), lpfc_more_adisc(9), lpfc_cmpl_els_adisc(9), lpfc_issue_els_adisc(9), lpfc_cmpl_els_logo(9), lpfc_issue_els_logo(9), lpfc_cmpl_els_cmd(9), lpfc_reg_fab_ctrl_node(9), lpfc_cmpl_els_disc_cmd(9), lpfc_issue_els_scr(9), lpfc_issue_els_rscn(9), lpfc_issue_els_farpr(9), lpfc_issue_els_rdf(9), lpfc_least_capable_settings(9), lpfc_cmpl_els_edc(9), lpfc_cancel_retry_delay_tmo(9), lpfc_els_retry_delay(9), lpfc_els_retry_delay_handler(9), lpfc_link_reset(9), lpfc_els_retry(9), lpfc_els_free_data(9), lpfc_els_free_bpl(9), lpfc_els_free_iocb(9), lpfc_cmpl_els_logo_acc(9), lpfc_mbx_cmpl_dflt_rpi(9), lpfc_cmpl_els_rsp(9), lpfc_els_rsp_acc(9), lpfc_els_rsp_reject(9), lpfc_els_rsp_adisc_acc(9), lpfc_els_rsp_prli_acc(9), lpfc_els_rsp_rnid_acc(9), lpfc_els_clear_rrq(9), lpfc_els_rsp_echo_acc(9), lpfc_els_disc_adisc(9), lpfc_els_disc_plogi(9), lpfc_els_rcv_lcb(9), lpfc_els_flush_rscn(9), lpfc_rscn_payload_check(9), lpfc_rscn_recovery_check(9), lpfc_send_rscn_event(9), lpfc_els_rcv_rscn(9), lpfc_els_handle_rscn(9), lpfc_els_rcv_flogi(9), lpfc_els_rcv_rnid(9), lpfc_els_rcv_echo(9), lpfc_els_rcv_lirr(9), lpfc_els_rcv_rrq(9), lpfc_els_rsp_rls_acc(9), lpfc_els_rcv_rls(9), lpfc_els_rcv_rtv(9), lpfc_send_rrq(9), lpfc_els_rsp_rpl_acc(9), lpfc_els_rcv_rpl(9), lpfc_els_rcv_farp(9), lpfc_els_rcv_farpr(9), lpfc_els_rcv_fan(9), lpfc_els_rcv_edc(9), lpfc_els_timeout(9), lpfc_els_timeout_handler(9), lpfc_els_flush_cmd(9), lpfc_send_els_failure_event(9), lpfc_send_els_event(9), lpfc_display_fpin_wwpn(9), lpfc_els_rcv_fpin_li(9), lpfc_els_rcv_fpin_del(9), lpfc_els_rcv_fpin_peer_cgn(9), lpfc_els_rcv_fpin_cgn(9), lpfc_els_unsol_buffer(9), lpfc_els_unsol_event(9), lpfc_do_scr_ns_plogi(9), lpfc_cmpl_reg_new_vport(9), lpfc_register_new_vport(9), lpfc_cancel_all_vport_retry_delay_timer(9), lpfc_retry_pport_discovery(9), lpfc_fabric_login_reqd(9), lpfc_cmpl_els_fdisc(9), lpfc_issue_els_fdisc(9), lpfc_cmpl_els_npiv_logo(9), lpfc_issue_els_npiv_logo(9), lpfc_fabric_block_timeout(9), lpfc_resume_fabric_iocbs(9), lpfc_unblock_fabric_iocbs(9), lpfc_block_fabric_iocbs(9), lpfc_cmpl_fabric_iocb(9), lpfc_issue_fabric_iocb(9), lpfc_fabric_abort_vport(9), lpfc_fabric_abort_nport(9), lpfc_fabric_abort_hba(9), lpfc_sli4_vport_delete_els_xri_aborted(9), lpfc_sli4_els_xri_aborted(9)
also, the Kernel file itself is ./drivers/scsi/lpfc/lpfc_els.c β that's where all the magic lives, go say hi π
π¦ a lil sign-off π¦
and that's the whole page, bestie!! this one's from the kernel file at ./drivers/scsi/lpfc, dated October 2026, and it's filed under lpfc_els_flush_all_cmd(9) in case you need to find it again π go flush those ELS commands, you're gonna do great, periodt β¨π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms