vma_start_pgoff(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… vma_start_pgoff β€” like, the whole kernel API manual vibe

okay so bestie, welcome to vma_start_pgoff(9) πŸ’– this is a Kernel API Manual entry, and honestly it's giving "small function, big lore." let's get into it ✨


🌸 NAME

vma_start_pgoff β€” get the page offset of the start of @vma πŸŽ€


✨ SYNOPSIS

pgoff_t vma_start_pgoff (const struct vm_area_struct *vma );

πŸ¦‹ ARGUMENTS

  • vma β€” the VMA whose page offset is required. that's the whole vibe check right there 🫢

πŸ‘‘ DESCRIPTION

okay so this is where it gets juicy 🌈 it depends entirely on what kind of VMA you're dealing with, no cap:

  • if the VMA is file-backed, this is the page offset into the file πŸ“ periodt.
  • if vma is anonymous, this is the virtual page offset of the start of the VMA: if it's unfaulted, then it's vma->vm_start >> PAGE_SHIFT, and if it's faulted, then it's the virtual page offset at the time of first fault 😭 (yes, those can differ, don't come for me).
  • if vma is a MAP_PRIVATE file-backed mapping, then this returns the page offset within the file πŸ’… same energy as the file-backed case.

πŸ’€ edge cases (the messy part, iykyk)

  • nommu does not abide by these 🚫 like at all, it's on its own little journey.
  • MAP_PRIVATE-/dev/zero satisfies vma_is_anonymous but has a file-backed page offset πŸ™ˆ sneaky.
  • MAP_PRIVATE-pfnmap regions have their page offset set to the first PFN in the range πŸ”₯ noted.
no guessing bestie β€” those are literally the documented edge cases, and they will bite you if you forget them πŸ’€

⭐ RETURN

the page offset of the start of vma πŸ’– that's it, that's the return value, iconic.


🧚 SEE ALSO

Kernel file ./include/linux/mm.h

folio_page_idx(9), vma_flag_t(9), fault_flag_allow_retry_first(9), vma_kernel_pagesize(9), folio_order(9), folio_reset_order(9), folio_mapcount(9), folio_mapped(9), thp_order(9), thp_size(9), folio_get(9), folio_put(9), folio_put_refs(9), folios_put(9), vma_flags_is_cow_mapping(9), vma_is_cow_mapping(9), vma_desc_is_cow_mapping(9), folio_pfn(9), folio_mk_pte(9), folio_mk_pmd(9), folio_mk_pud(9), folio_maybe_dma_pinned(9), is_zero_page(9), is_zero_folio(9), folio_nr_pages(9), folio_next(9), folio_shift(9), folio_size(9), folio_maybe_mapped_shared(9), folio_expected_ref_count(9), zap_vma(9), ptdesc_address(9), ptdesc_set_kernel(9), ptdesc_clear_kernel(9), ptdesc_test_kernel(9), pagetable_alloc(9), pagetable_free(9), vma_lookup(9), vma_end_pgoff(9), vma_last_pgoff(9), vma_start_anon_pgoff(9), vma_end_anon_pgoff(9), vma_last_anon_pgoff(9), mmap_action_remap(9), mmap_action_remap_full(9), mmap_action_ioremap(9), mmap_action_ioremap_full(9), mmap_action_simple_ioremap(9), mmap_action_map_kernel_pages(9), mmap_action_map_kernel_pages_full(9), range_is_subset(9), range_in_vma(9), range_in_vma_desc(9), clear_pages(9) 🌟

yeah that's a lot of friends, go say hi to all of them 🫢


mwah πŸ’‹ this page lives in ./include/linux, dated October 2026, and that's the whole manual β€” slay, go read your VMAs responsibly βœ¨πŸŽ€

πŸ“¦ where this page comes from