ata_build_rw_tf(9)
π ata_build_rw_tf(9) β the Kernel API Manual glow-up π
okay so bestie, we're in the Kernel API Manual today and the main character is ata_build_rw_tf β and yes she does exactly what her name says: she builds the ATA taskfile for whatever read/write request you hand her. let's get into it β¨
β¨ SYNOPSIS β¨
int ata_build_rw_tf (struct ata_queued_cmd *qc , u64 block , u32 n_block , unsigned int tf_flags , int cdl , int class );
πΈ ARGUMENTS πΈ
qcβ the metadata that's attached to the taskfile you're building, iykyk π«Άblockβ the block address, like where are we even goingn_blockβ how many blocks we're talking abouttf_flagsβ the read/write + FUA etc. flags, literally the whole vibe of the requestcdlβ the command duration limit indexclassβ the IO priority class, so she knows how important this is
π DESCRIPTION π
LOCKING: None. no cap, no locks, we move free π
So what she does: she builds the ATA taskfile for the command qc for a read/write request β and that request is described by block, n_block, tf_flags and class. that's the whole gig. iconic.
And the returns, since you will ask:
0on success π (we love a clean win)-ERANGEif the request is too large fordevβ like babe, that's not fitting π-EINVALif the request is just invalid β genuinely not it, try again
π¦ SEE ALSO π¦
Kernel file ./drivers/ata/libata-core.c β and honestly bestie, the related-reading list is giving entire semester syllabus, so buckle up π§:
ata_link_next(9),ata_dev_next(9),ata_dev_phys_link(9),ata_force_cbl(9)ata_force_pflags(9),ata_force_link_limits(9),ata_force_xfermask(9),ata_force_quirks(9)atapi_cmd_type(9),ata_set_rwcmd_protocol(9),ata_tf_read_block(9)ata_pack_xfermask(9),ata_unpack_xfermask(9),ata_xfer_mask2mode(9),ata_xfer_mode2mask(9)ata_xfer_mode2shift(9),ata_mode_string(9)ata_dev_classify(9),ata_id_string(9),ata_id_c_string(9)ata_read_native_max_address(9),ata_set_max_sectors(9),ata_hpa_resize(9),ata_dump_id(9),ata_id_xfermask(9)ata_exec_internal(9),ata_pio_need_iordy(9),ata_pio_mask_no_iordy(9)ata_do_dev_read_id(9),ata_dev_read_id(9)ata_dev_power_set_standby(9),ata_dev_power_set_active(9)ata_read_log_page(9),ata_dev_configure(9)ata_cable_40wire(9),ata_cable_80wire(9),ata_cable_unknown(9),ata_cable_ignore(9),ata_cable_sata(9)sata_print_link_status(9),ata_dev_pair(9)ata_timing_cycle2mode(9),ata_down_xfermask_limit(9),ata_set_mode(9)ata_wait_ready(9),ata_wait_after_reset(9),ata_std_prereset(9),ata_std_postreset(9)ata_dev_same_device(9),ata_dev_reread_id(9),ata_dev_revalidate(9)ata_is_40wire(9),cable_is_40wire(9)ata_dev_xfermask(9),ata_dev_set_xfermode(9),ata_dev_set_feature(9),ata_dev_init_params(9)atapi_check_dma(9),ata_std_qc_defer(9)ata_sg_init(9),ata_sg_clean(9),ata_sg_setup(9),swap_buf_le16(9)ata_qc_free(9),ata_qc_complete(9),ata_qc_get_active(9),ata_qc_issue(9)ata_phys_link_online(9),ata_phys_link_offline(9),ata_link_online(9),ata_link_offline(9)ata_host_suspend(9),ata_host_resume(9)ata_dev_init(9),ata_link_init(9),sata_link_init_spd(9)ata_port_alloc(9),ata_host_alloc(9),ata_host_alloc_pinfo(9),ata_finalize_port_ops(9),ata_host_start(9)ata_host_init(9),ata_host_register(9),ata_host_activate(9)ata_dev_free_resources(9),ata_port_detach(9),ata_host_detach(9)ata_pci_remove_one(9),ata_platform_remove_one(9)ata_msleep(9),ata_wait_register(9)
π real talk though: LOCKING: None. means nobody's holding anything for you β that's the documented behaviour, so don't go assuming otherwise, bestie.
and that's the whole page, periodt. this one came out of the ./drivers/ata source, dated October 2026, and she's filed under the Kernel API Manual β go off, queen ππ
π¦ 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