lpfc_els_flush_all_cmd(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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 the lpfc hba 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_REJECT and un.ulpWord[4] set to IOERR_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