LOCK COUNTERS.(9)
π Lock Counters. π
okay bestie, welcome to Lock Counters.(9) in the Kernel API Manual β this one is short and honestly kinda chic. A lock_counter is intended to keep all of the locks for the blocks in the recovery journal. That's the whole assignment. π
All the per-zone counters are kept in a single array, and that array is arranged by zone β i.e. zone 0's lock 0 is at index 0, zone 0's lock 1 is at index 1, and zone 1's lock 0 is at index 'locks'. The way this arrangement is set up is intended to minimize cache-line contention for counters from different zones. lowkey iconic layout behavior. β¨
The locks are implemented as a single object instead of as a lock counter per lock. Why? two reasons, both valid: it affords this opportunity to reduce cache line contention, and it also eliminates the need to have a completion per lock. no extra completion per lock, we love that for us. π
Lock sets are laid out with the set for recovery journal first, followed by the logical zones, and then the physical zones. that's the order, periodt. π¦
πΈ SEE ALSO πΈ
Kernel file: ./drivers/md/dm-vdo/recovery-journal.c β yes, that exact cutie. π«Ά
The whole related-pages squad is literally:
get_zone_count_ptr(9),get_counter(9),is_journal_zone_locked(9),vdo_release_recovery_journal_block_reference(9),pop_free_list(9)is_block_dirty(9),is_block_empty(9),is_block_full(9),assert_on_journal_thread(9),continue_waiter(9)has_block_waiters(9),suspend_lock_counter(9),check_for_drain_complete(9),notify_recovery_journal_of_read_only_mode(9),enter_journal_read_only_mode(9)vdo_get_recovery_journal_current_sequence_number(9),get_recovery_journal_head(9),compute_recovery_count_byte(9),check_slab_journal_commit_threshold(9),finish_reaping(9)complete_reaping(9),handle_flush_error(9),initialize_journal_state(9),vdo_get_recovery_journal_length(9),reap_recovery_journal_callback(9)initialize_lock_counter(9),set_journal_tail(9),initialize_recovery_block(9),vdo_decode_recovery_journal(9),vdo_free_recovery_journal(9)vdo_initialize_recovery_journal_post_repair(9),vdo_get_journal_block_map_data_blocks_used(9),vdo_get_recovery_journal_thread_id(9),vdo_open_recovery_journal(9),vdo_record_recovery_journal(9)get_block_header(9),set_active_sector(9),advance_tail(9),initialize_lock_count(9),prepare_to_assign_entry(9)schedule_block_write(9),release_journal_block_reference(9),assign_entry(9),recycle_journal_block(9),continue_committed_waiter(9)notify_commit_waiters(9),recycle_journal_blocks(9),complete_write(9),add_queued_recovery_entries(9),write_block(9)write_blocks(9),vdo_add_recovery_journal_entry(9),is_lock_locked(9),reap_recovery_journal(9),vdo_acquire_recovery_journal_block_reference(9)vdo_release_journal_entry_lock(9),vdo_drain_recovery_journal(9),resume_lock_counter(9),vdo_resume_recovery_journal(9),vdo_get_recovery_journal_logical_blocks_used(9)vdo_get_recovery_journal_statistics(9),dump_recovery_block(9),vdo_dump_recovery_journal_statistics(9)
mwah π β this page comes from ./drivers/md/dm-vdo, dated October 2026, and it's literally Lock Counters.(9). bye bestie, go slay those locks ππ
π¦ 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