get_reference_counter(9)
π get_reference_counter β a Kernel API Manual moment
okay so first things first, the manual we're in is the Kernel API Manual, and this page is called get_reference_counter(9). it's a tiny little function page and honestly? it's giving "one job, does it well." π
β¨ NAME β¨
get_reference_counter β bestie, it gets the reference counter that covers the given physical block number. that's it. that's the whole vibe. πΈ
π¦ SYNOPSIS π¦
int get_reference_counter (struct vdo_slab *slab ,
physical_block_number_t pbn , vdo_refcount_t **counter_ptr );
like, look at that signature. so clean. so intentional. no cap. β¨
π ARGUMENTS π
don't panic, there are only three of them:
slabβ the slab you want to query. this is the main character you're interrogating. πpbnβ the physical block number. yes, that physical block number. π₯counter_ptrβ a pointer to the reference counter. it's giving "here's where the answer shows up." π«Ά
ngl the whole function is basically: you hand it a slab and a pbn, and it hands you back a pointer to the reference counter. lowkey iconic.
π SEE ALSO π
okay this part is a lot and I need you to stay with me β the manpage says the kernel file is ./drivers/md/dm-vdo/slab-depot.c, and then it justβ¦ keeps listing friends. all of these, fr fr, no skips:
get_lock(9),must_make_entries_to_flush(9),is_reaping(9),initialize_tail_block(9),initialize_journal_state(9),block_is_full(9),is_slab_journal_blank(9),mark_slab_journal_dirty(9),compute_fullness_hint(9)check_summary_drain_complete(9),notify_summary_waiters(9),finish_updating_slab_summary_block(9),finish_update(9),handle_write_error(9),launch_write(9),update_slab_summary_entry(9)finish_reaping(9),complete_reaping(9),handle_flush_error(9),flush_for_reaping(9),reap_slab_journal(9),adjust_slab_journal_block_reference(9),release_journal_locks(9)update_tail_block_location(9),reopen_slab_journal(9),complete_write(9),write_slab_journal_block(9),commit_tail(9),encode_slab_journal_entry(9),expand_journal_point(9),add_entry(9)vdo_attempt_replay_into_slab(9),requires_reaping(9),launch_reference_block_write(9),finish_reference_block_write(9),get_reference_counters_for_block(9),pack_reference_block(9),handle_io_error(9),write_reference_block(9)reference_count_to_status(9),dirty_block(9),get_reference_block(9),slab_block_number_from_pbn(9),adjust_free_block_count(9),increment_for_data(9),decrement_for_data(9),increment_for_block_map(9),update_reference_count(9)add_entry_from_waiter(9),is_next_entry_a_block_map_increment(9),add_entries(9),reset_search_cursor(9),advance_search_cursor(9)vdo_adjust_reference_count_for_rebuild(9),replay_reference_count_change(9),find_zero_byte_in_word(9),find_free_block(9),search_current_reference_block(9),search_reference_blocks(9),make_provisional_reference(9),dirty_all_reference_blocks(9)match_bytes(9),count_valid_references(9),unpack_reference_block(9),finish_reference_block_load(9),load_reference_block_group(9),load_reference_blocks(9)drain_slab(9),read_slab_journal_tail(9),load_slab_journal(9),get_next_slab(9),has_slabs_to_scrub(9),uninitialize_scrubber_vio(9),finish_scrubbing(9),slab_scrubbed(9),abort_scrubbing(9),handle_scrubber_error(9)apply_block_entries(9),apply_journal_entries(9),start_scrubbing(9),scrub_next_slab(9),scrub_slabs(9),get_depot_slab_iterator(9),next_slab(9)abort_waiter(9),vdo_acquire_provisional_reference(9),open_slab(9),vdo_enqueue_clean_slab_waiter(9),vdo_modify_reference_count(9),vdo_notify_slab_journals_are_recovered(9)make_slab(9),allocate_slabs(9),vdo_abandon_new_slabs(9),release_recovery_journal_lock(9),prepare_for_tail_block_commit(9),schedule_tail_block_commit(9)initialize_slab_scrubber(9),initialize_slab_summary_block(9),vdo_decode_slab_depot(9),vdo_free_slab_depot(9),vdo_record_slab_depot(9),vdo_allocate_reference_counters(9),get_slab_number(9),vdo_get_slab(9),vdo_get_increment_limit(9),vdo_is_physical_data_block(9),vdo_get_slab_depot_allocated_blocks(9),vdo_get_slab_depot_data_blocks(9)finish_combining_zones(9),combine_summaries(9),finish_loading_summary(9),load_slab_summary(9),vdo_load_slab_depot(9),vdo_prepare_slab_depot_to_allocate(9),vdo_update_slab_depot_size(9),vdo_prepare_to_grow_slab_depot(9)finish_registration(9),vdo_use_new_slabs(9),stop_scrubbing(9),vdo_drain_slab_depot(9),resume_scrubbing(9),vdo_resume_slab_depot(9),vdo_commit_oldest_slab_journal_tail_blocks(9),vdo_scrub_all_unrecovered_slabs(9)get_block_allocator_statistics(9),get_ref_counts_statistics(9),get_slab_journal_statistics(9),vdo_get_slab_depot_statistics(9),vdo_dump_slab_depot(9)
likeβ¦ the way this function knows everybody? main character energy for sure. πβ¨
π cute lil sign-off: this page lives under ./drivers/md/dm-vdo, and it's dated October 2026. so it's from the future, bestie. we love a forward-thinking manual. π§π
π¦ 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