generic_file_read_iter(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

generic_file_read_iter(9) 🌸

okay so this is the Kernel API Manual entry for generic_file_read_iter, and yes bestie we're gonna make it make sense. πŸ’–

🌸 NAME 🌸

generic_file_read_iter β€” generic filesystem read routine. That's the whole vibe. No cap.

✨ SYNOPSIS ✨

The signature, exactly as it is, no edits:

ssize_t generic_file_read_iter (struct kiocb *iocb , struct iov_iter
       *iter );

πŸŽ€ ARGUMENTS πŸŽ€

  • iocb β€” kernel I/O control block. It's giving "the paperwork for this I/O operation."
  • iter β€” destination for the data read. This is where the bytes are headed, periodt.

πŸ’… DESCRIPTION πŸ’…

This is the "read_iter" routine for all filesystems that can use the page cache directly. Main character energy for page-cache girlies, honestly.

The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall be returned when no data can be read without waiting for I/O requests to complete. Important: it doesn't prevent readahead. iykyk.

The IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O requests shall be made for the read or for readahead. When no data can be read, -EAGAIN shall be returned. When readahead would be triggered, a partial, possibly empty read shall be returned. Lowkey a vibe check for your I/O. 😭

πŸ”₯ RETURN πŸ”₯

  • number of bytes copied, even for partial reads
  • negative error code (or 0 if IOCB_NOIO) if nothing was read

🌈 SEE ALSO 🌈

Kernel file ./mm/filemap.c plus the whole friend group: filemap_remove_folio(9), filemap_fdatawrite_range(9), filemap_flush_range(9), filemap_flush(9), filemap_range_has_page(9), filemap_fdatawait_range(9), filemap_fdatawait_range_keep_errors(9), file_fdatawait_range(9), filemap_fdatawait_keep_errors(9), filemap_write_and_wait_range(9), file_check_and_advance_wb_err(9), file_write_and_wait_range(9), replace_page_cache_folio(9), softleaf_entry_wait_on_locked(9), folio_put_wait_locked(9), folio_unlock(9), folio_end_read(9), folio_end_private_2(9), folio_wait_private_2(9), folio_wait_private_2_killable(9), folio_end_writeback_no_dropbehind(9), folio_end_writeback(9), __folio_lock(9), page_cache_next_miss(9), page_cache_prev_miss(9), __filemap_get_folio_mpol(9), find_get_entries(9), find_lock_entries(9), filemap_get_folios(9), filemap_get_folios_contig(9), filemap_get_folios_tag(9), filemap_get_folios_dirty(9), filemap_read(9), filemap_splice_read(9), mapping_seek_hole_data(9), filemap_fault(9), read_cache_folio(9), mapping_read_folio_gfp(9), read_cache_page_gfp(9), __generic_file_write_iter(9), generic_file_write_iter(9), filemap_release_folio(9), filemap_invalidate_inode(9), filemap_cachestat(9).


🫢 cute sign-off: source/version is ./mm, date is October 2026, and the page is generic_file_read_iter(9). bye bestie, go read some pages! πŸ¦‹πŸ’–
πŸ“¦ where this page comes from