lpfc_sli3_post_buffer(9)
π« lpfc_sli3_post_buffer(9) π«
okay so first things first, bestie: this little page lives in the Kernel API Manual, and it's all about a function called lpfc_sli3_post_buffer β which is lowkey the mail-carrier of the IOCB world. Let's get into it. π
β¨ NAME β¨
lpfc_sli3_post_buffer β Post IOCB(s) with DMA buffer descriptor(s) to a IOCB ring
Like, that's the whole vibe: you've got IOCBs (I/O control blocks), you've got DMA buffer descriptors attached to them, and this function yeets them onto a ring. Iconic. π
πΈ SYNOPSIS πΈ
int lpfc_sli3_post_buffer (struct lpfc_hba *phba , struct lpfc_sli_ring
*pring , int cnt );
Yes the line break in the middle of the declaration is canon, don't come for me. π«Ά
π¦ ARGUMENTS π¦
phbaβ pointer to lpfc hba data structure. That's your host bus adapter's whole personality right there β this is the context everything hangs off of. πpringβ pointer to a IOCB ring. The actual ring you're yeeting things onto. main character energy, honestly.cntβ the number of IOCBs to be posted to the IOCB ring. So, how many are we sending? That many. fr fr. π’
π₯ DESCRIPTION π₯
okay so what this routine actually does: it posts a given number of IOCBs β each one carrying the DMA buffer descriptors associated with it β to the given IOCB ring. The count comes straight from the cnt argument, and the destination ring is whatever pring is pointing at. Not me explaining a whole posting operation in one sentence. π
Return codes β here's the plot twist: it returns the number of IOCBs NOT able to be posted to the IOCB ring. Yes, bestie, it counts the failures, not the successes. Read that twice. The way that's so easy to misread at 2am. π
ngl, double-check that return value before you assume everything landed. Zero is the dream. Anything else means some IOCBs got left on read. π
π SEE ALSO π
The kernel file that holds all this lore is ./drivers/scsi/lpfc/lpfc_init.c, and likeβ¦ the friend group here is massive. Buckle up, bestie, we're going through the whole group chat: π
lpfc_config_port_prep(9),lpfc_config_async_cmpl(9),lpfc_dump_wakeup_param_cmpl(9),lpfc_update_vport_wwn(9),lpfc_config_port_post(9),lpfc_sli4_refresh_params(9),lpfc_hba_init_link(9),lpfc_hba_init_link_fc_topology(9),lpfc_hba_down_link(9),lpfc_hba_down_prep(9)lpfc_sli4_free_sp_events(9),lpfc_hba_free_post_buf(9),lpfc_hba_clean_txcmplq(9),lpfc_hba_down_post_s3(9),lpfc_hba_down_post_s4(9),lpfc_hba_down_post(9),lpfc_hb_timeout(9),lpfc_rrq_timeout(9),lpfc_hb_mbox_cmpl(9),lpfc_hb_mxp_handler(9),lpfc_issue_hb_mbox(9),lpfc_issue_hb_tmo(9),lpfc_hb_timeout_handler(9)lpfc_offline_eratt(9),lpfc_sli4_offline_eratt(9),lpfc_handle_deferred_eratt(9),lpfc_handle_eratt_s3(9),lpfc_sli4_port_sta_fn_reset(9),lpfc_handle_eratt_s4(9),lpfc_handle_eratt(9),lpfc_handle_latt(9),lpfc_parse_vpd(9),lpfc_get_atto_model_desc(9),lpfc_get_hba_model_desc(9),lpfc_post_rcv_buf(9),lpfc_sha_init(9),lpfc_sha_iterate(9),lpfc_challenge_key(9),lpfc_hba_init(9),lpfc_cleanup(9),lpfc_stop_vport_timers(9),__lpfc_sli4_stop_fcf_redisc_wait_timer(9),lpfc_sli4_stop_fcf_redisc_wait_timer(9),lpfc_cmf_stop(9),lpfc_cmf_start(9),lpfc_stop_hba_timers(9),lpfc_block_mgmt_io(9)lpfc_sli4_node_rpi_restore(9),lpfc_create_expedite_pool(9),lpfc_destroy_expedite_pool(9),lpfc_create_multixri_pools(9),lpfc_destroy_multixri_pools(9),lpfc_online(9),lpfc_unblock_mgmt_io(9),lpfc_offline_prep(9),lpfc_offline(9),lpfc_scsi_free(9),lpfc_io_free(9),lpfc_sli4_els_sgl_update(9),lpfc_sli4_nvmet_sgl_update(9),lpfc_sli4_io_sgl_update(9),lpfc_new_io_buf(9),lpfc_vmid_res_alloc(9),lpfc_create_port(9),destroy_port(9),lpfc_get_instance(9),lpfc_scan_finished(9),lpfc_host_attrib_init(9),lpfc_stop_port_s3(9),lpfc_stop_port_s4(9),lpfc_stop_port(9),lpfc_fcf_redisc_wait_start_timer(9),lpfc_sli4_fcf_redisc_wait_tmo(9),lpfc_vmid_poll(9),lpfc_sli4_parse_latt_fault(9),lpfc_sli4_parse_latt_type(9),lpfc_sli_port_speed_get(9),lpfc_sli4_port_speed_parse(9)lpfc_sli4_async_link_evt(9),lpfc_async_link_speed_to_read_top(9),lpfc_cgn_update_stat(9),lpfc_cgn_update_tstamp(9),lpfc_cmf_stats_timer(9),lpfc_calc_cmf_latency(9),lpfc_cmf_timer(9),lpfc_sli4_async_fc_evt(9),lpfc_sli4_async_sli_evt(9),lpfc_sli4_perform_vport_cvl(9),lpfc_sli4_perform_all_vport_cvl(9),lpfc_sli4_async_fip_evt(9),lpfc_sli4_async_dcbx_evt(9),lpfc_sli4_async_grp5_evt(9),lpfc_sli4_async_cmstat_evt(9),lpfc_cgn_params_val(9),lpfc_cgn_params_parse(9),lpfc_sli4_cgn_params_read(9),lpfc_sli4_cgn_parm_chg_evt(9),lpfc_sli4_async_event_proc(9),lpfc_sli4_fcf_redisc_event_proc(9)lpfc_api_table_setup(9),lpfc_log_intr_mode(9),lpfc_enable_pci_dev(9),lpfc_disable_pci_dev(9),lpfc_reset_hba(9),lpfc_sli_sriov_nr_virtfn_get(9),lpfc_sli_probe_sriov_nr_virtfn(9),lpfc_setup_driver_resource_phase1(9),lpfc_sli_driver_resource_setup(9),lpfc_sli_driver_resource_unset(9),lpfc_sli4_driver_resource_setup(9),lpfc_sli4_driver_resource_unset(9),lpfc_init_api_table_setup(9),lpfc_setup_driver_resource_phase2(9),lpfc_unset_driver_resource_phase2(9),lpfc_free_iocb_list(9),lpfc_init_iocb_list(9),lpfc_free_sgl_list(9),lpfc_free_els_sgl_list(9),lpfc_free_nvmet_sgl_list(9),lpfc_init_active_sgl_array(9),lpfc_free_active_sgl(9),lpfc_init_sgl_list(9),lpfc_sli4_init_rpi_hdrs(9),lpfc_sli4_create_rpi_hdr(9),lpfc_sli4_remove_rpi_hdrs(9)lpfc_hba_alloc(9),lpfc_hba_free(9),lpfc_setup_fdmi_mask(9),lpfc_create_shost(9),lpfc_destroy_shost(9),lpfc_setup_bg(9),lpfc_post_init_setup(9),lpfc_sli_pci_mem_setup(9),lpfc_sli_pci_mem_unset(9),lpfc_sli4_post_status_check(9),lpfc_sli4_bar0_register_memmap(9),lpfc_sli4_bar1_register_memmap(9),lpfc_sli4_bar2_register_memmap(9),lpfc_create_bootstrap_mbox(9),lpfc_destroy_bootstrap_mbox(9),lpfc_map_topology(9),lpfc_sli4_read_config(9),lpfc_setup_endian_order(9),lpfc_sli4_queue_verify(9),lpfc_sli4_queue_create(9),lpfc_sli4_queue_destroy(9),lpfc_setup_cq_lookup(9),lpfc_sli4_queue_setup(9),lpfc_sli4_queue_unset(9)lpfc_sli4_cq_event_pool_create(9),lpfc_sli4_cq_event_pool_destroy(9),__lpfc_sli4_cq_event_alloc(9),lpfc_sli4_cq_event_alloc(9),__lpfc_sli4_cq_event_release(9),lpfc_sli4_cq_event_release(9),lpfc_sli4_cq_event_release_all(9),lpfc_pci_function_reset(9),lpfc_sli4_pci_mem_setup(9),lpfc_sli4_pci_mem_unset(9),lpfc_sli_enable_msix(9),lpfc_sli_enable_msi(9),lpfc_sli_enable_intr(9),lpfc_sli_disable_intr(9),lpfc_find_cpu_handle(9),lpfc_find_hyper(9),lpfc_cpu_map_array_init(9),lpfc_hba_eq_hdl_array_init(9),lpfc_cpu_affinity_check(9),lpfc_cpuhp_get_eq(9),lpfc_irq_set_aff(9),lpfc_irq_clear_aff(9),lpfc_irq_rebalance(9),lpfc_sli4_enable_msix(9),lpfc_sli4_enable_msi(9),lpfc_sli4_enable_intr(9),lpfc_sli4_disable_intr(9),lpfc_unset_hba(9),lpfc_sli4_xri_exchange_busy_wait(9),lpfc_sli4_hba_unset(9),__lpfc_reg_congestion_buf(9),lpfc_get_sli4_parameters(9)lpfc_pci_probe_one_s3(9),lpfc_pci_remove_one_s3(9),lpfc_pci_suspend_one_s3(9),lpfc_pci_resume_one_s3(9),lpfc_sli_prep_dev_for_recover(9),lpfc_sli_prep_dev_for_reset(9),lpfc_sli_prep_dev_for_perm_failure(9),lpfc_io_error_detected_s3(9),lpfc_io_slot_reset_s3(9),lpfc_io_resume_s3(9),lpfc_sli4_get_els_iocb_cnt(9),lpfc_sli4_get_iocb_cnt(9),lpfc_write_firmware(9),lpfc_sli4_request_firmware_update(9),lpfc_pci_probe_one_s4(9),lpfc_pci_remove_one_s4(9),lpfc_pci_suspend_one_s4(9),lpfc_pci_resume_one_s4(9),lpfc_sli4_prep_dev_for_recover(9),lpfc_sli4_prep_dev_for_reset(9),lpfc_sli4_prep_dev_for_perm_failure(9),lpfc_io_error_detected_s4(9),lpfc_io_slot_reset_s4(9),lpfc_io_resume_s4(9)lpfc_pci_probe_one(9),lpfc_pci_remove_one(9),lpfc_pci_suspend_one(9),lpfc_pci_resume_one(9),lpfc_io_error_detected(9),lpfc_io_slot_reset(9),lpfc_io_resume(9),lpfc_sli4_oas_verify(9),lpfc_sli4_ras_init(9),lpfc_init(9),lpfc_exit(9)
Like I said. Whole group chat. Every single one accounted for, no cap. π
aaaand that's the page, bestie! π This little beauty ships out of ./drivers/scsi/lpfc and it's dated October 2026 β so yeah, timestamped from the future, which is honestly so on brand for kernel docs. Go post those IOCBs, and may your return value always be 0. π¦πβ
π¦ 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