update_reference_count(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

Hey bestie, welcome to update_reference_count(9) from the Kernel API Manual ✨ β€” this is the page for the function that updates the reference count of a block.

update_reference_count β€” Update the reference count of a block. Periodt.


✨ SYNOPSIS ✨

The signature is long, but code stays untouched, so here it is verbatim 🫢:

int update_reference_count (struct vdo_slab *slab , struct
       reference_block *block , slab_block_number block_number , const struct
       journal_point *slab_journal_point , struct reference_updater *updater ,
       bool normal_operation , bool adjust_block_count , bool
       *provisional_decrement_ptr );

πŸŽ€ ARGUMENTS πŸŽ€

  • slab β€” The slab which owns the block. It's giving "main character owns the block" energy πŸ‘‘.
  • block β€” The reference block which contains the block being updated. Yes, block-ception, but make it make sense πŸ’….
  • block_number β€” The block to update.
  • slab_journal_point β€” The slab journal point at which this update is journaled. Very specific, very demure.
  • updater β€” The reference updater.
  • normal_operation β€” Whether we are in normal operation vs. recovery or rebuild. Important vibe check 😭.
  • adjust_block_count β€” Whether to update the slab's free block count.
  • provisional_decrement_ptr β€” A pointer which will be set to true if this update was a decrement of a provisional reference. It's a pointer, bestie, so handle with care 🫢.

πŸ”₯ RETURN πŸ”₯

It returns VDO_SUCCESS or an error. That's the whole return menu, no cap ✨.


πŸ¦‹ SEE ALSO πŸ¦‹

Kernel file: ./drivers/md/dm-vdo/slab-depot.c.

The whole cross-ref friend group is: 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), get_reference_counter(9), adjust_free_block_count(9), increment_for_data(9), decrement_for_data(9), increment_for_block_map(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).


Cute sign-off: source/version ./drivers/md/dm-vdo, dated October 2026, page update_reference_count(9) β€” bye bestie πŸ’…βœ¨

πŸ“¦ where this page comes from