__mpi3mr_sa..._sas_address(9)
π __mpi3mr_sa..._sas_address(9) β bestie edition π
okay so this page lives in the Kernel API Manual (yes that's the manual name, slay) and the actual function we're talking about is __mpi3mr_sas_node_find_by_sas_address β the header just had to truncate it with ... because kernel symbol names are lowkey built different π
β¨ NAME β¨
__mpi3mr_sas_node_find_by_sas_address β the sas node search π΅οΈββοΈβ¨
πΈ SYNOPSIS πΈ
struct mpi3mr_sas_node * __mpi3mr_sas_node_find_by_sas_address (struct
mpi3mr_ioc *mrioc , u64 sas_address , struct mpi3mr_hba_port *hba_port
);
like. it's giving "three arguments, one pointer back, no drama" π
π ARGUMENTS π
mriocβ the adapter instance reference, aka your whole controller's main character energy πsas_addressβ the SAS address of the expander or the sas host π¦hba_portβ the HBA port entry π«Ά
π₯ CONTEXT π₯
β οΈ bestie. the caller should acquire mrioc->sas_node_lock. like, before you call this. no cap. lock it first, question nothing ππ
π DESCRIPTION π
so here's the vibe check π
if the SAS address says the device is direct attached to the controller β meaning it's the controller's own SAS address β then the SAS node that's associated with the controller gets handed right back to you πβ¨
otherwise (the more common case, honestly), the sas_address and the hba_port get used together to pin down the exact expander, and the associated sas_node object comes back your way π
and if there's no match? you get NULL. that's it, that's the whole story π
β RETURN β
a valid SAS node β or NULL. that's the whole menu π
π§ SEE ALSO π§
the kernel file it actually lives in, first of all:
./drivers/scsi/mpi3mr/mpi3mr_transport.c
and now the entire friend group, no one left behind π«Ά (this is a long list, hydrate before scrolling π ):
mpi3mr_post_transport_req(9)mpi3mr_report_manufacture(9)__mpi3mr_expander_find_by_handle(9)mpi3mr_is_expander_device(9)mpi3mr_get_sas_address(9)__mpi3mr_get_tgtdev_by_addr(9)mpi3mr_get_tgtdev_by_addr(9)mpi3mr_remove_device_by_sas_address(9)__mpi3mr_get_tgtdev_by_addr_and_rphy(9)mpi3mr_expander_find_by_sas_address(9)mpi3mr_parent_present(9)mpi3mr_convert_phy_link_rate(9)mpi3mr_delete_sas_phy(9)mpi3mr_add_sas_phy(9)mpi3mr_add_phy_to_an_existing_port(9)mpi3mr_delete_sas_port(9)mpi3mr_del_phy_from_an_existing_port(9)mpi3mr_sas_port_sanity_check(9)mpi3mr_set_identify(9)mpi3mr_add_host_phy(9)mpi3mr_add_expander_phy(9)mpi3mr_alloc_hba_port(9)mpi3mr_get_hba_port_by_id(9)mpi3mr_update_links(9)mpi3mr_sas_host_refresh(9)mpi3mr_sas_host_add(9)mpi3mr_sas_port_add(9)mpi3mr_sas_port_remove(9)struct host_port(9)mpi3mr_update_mr_sas_port(9)mpi3mr_refresh_sas_ports(9)mpi3mr_refresh_expanders(9)mpi3mr_expander_node_add(9)mpi3mr_expander_add(9)mpi3mr_expander_node_remove(9)mpi3mr_expander_remove(9)mpi3mr_get_sas_negotiated_logical_linkrate(9)mpi3mr_report_tgtdev_to_sas_transport(9)mpi3mr_remove_tgtdev_from_sas_transport(9)mpi3mr_get_port_id_by_sas_phy(9)mpi3mr_get_port_id_by_rphy(9)mpi3mr_get_expander_phy_error_log(9)mpi3mr_transport_get_linkerrors(9)mpi3mr_transport_get_enclosure_identifier(9)mpi3mr_transport_get_bay_identifier(9)mpi3mr_expander_phy_control(9)mpi3mr_transport_phy_reset(9)mpi3mr_transport_phy_enable(9)mpi3mr_transport_phy_speed(9)mpi3mr_map_smp_buffer(9)mpi3mr_unmap_smp_buffer(9)mpi3mr_transport_smp_handler(9)
ππ sign-off time, bestie ππ
this little piece of lore lives at ./drivers/scsi/mpi3mr, and the page is dated October 2026. go forth, lock your sas_node_lock, find your node, and slay β¨ 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