struct lock_counter { /* The completion for notifying the owner of a lock release */ struct vdo_completion completion; /* The number of logical zones which may hold locks */
zone_count_t logical_zones; /* The number of physical zones which may hold locks */
zone_count_t physical_zones; /* The number of locks */
block_count_t locks; /* Whether the lock release notification is in flight */
atomic_t state; /* The number of logical zones which hold each lock */
atomic_t *logical_zone_counts; /* The number of physical zones which hold each lock */
atomic_t *physical_zone_counts; /* The per-lock counts for the journal zone */
u16 *journal_counters; /* The per-lock decrement counts for the journal zone */
atomic_t *journal_decrement_counts; /* The per-zone, per-lock reference counts for logical zones */
u16 *logical_counters; /* The per-zone, per-lock reference counts for physical zones */
u16 *physical_counters;
};
struct recovery_journal_block { /* The doubly linked pointers for the free or active lists */ struct list_head list_node; /* The waiter for the pending full block list */ struct vdo_waiter write_waiter; /* The journal to which this block belongs */ struct recovery_journal *journal; /* A pointer to the current sector in the packed block buffer */ struct packed_journal_sector *sector; /* The vio for writing this block */ struct vio vio; /* The sequence number for this block */
sequence_number_t sequence_number; /* The location of this block in the on-disk journal */
physical_block_number_t block_number; /* Whether this block is being committed */ bool committing; /* The total number of entries in this block */
journal_entry_count_t entry_count; /* The total number of uncommitted entries (queued or committing) */
journal_entry_count_t uncommitted_entry_count; /* The number of new entries in the current commit */
journal_entry_count_t entries_in_commit; /* The queue of vios which will make entries for the next commit */ struct vdo_wait_queue entry_waiters; /* The queue of vios waiting for the current commit */ struct vdo_wait_queue commit_waiters;
};
struct recovery_journal { /* The thread ID of the journal zone */
thread_id_t thread_id; /* The slab depot which can hold locks on this journal */ struct slab_depot *depot; /* The block map which can hold locks on this journal */ struct block_map *block_map; /* The queue of vios waiting to make entries */ struct vdo_wait_queue entry_waiters; /* The number of free entries in the journal */
u64 available_space; /* The number of decrement entries which need to be made */
data_vio_count_t pending_decrement_count; /* Whether the journal is adding entries from the increment or decrement waiters queues */ bool adding_entries; /* The administrative state of the journal */ struct admin_state state; /* Whether a reap is in progress */ bool reaping; /* The location of the first journal block */
physical_block_number_t origin; /* The oldest active block in the journal on disk for block map rebuild */
sequence_number_t block_map_head; /* The oldest active block in the journal on disk for slab journal replay */
sequence_number_t slab_journal_head; /* The newest block in the journal on disk to which a write has finished */
sequence_number_t last_write_acknowledged; /* The end of the half-open interval of the active journal */
sequence_number_t tail; /* The point at which the last entry will have been added */ struct journal_point append_point; /* The journal point of the vio most recently released from the journal */ struct journal_point commit_point; /* The nonce of the VDO */
nonce_t nonce; /* The number of recoveries completed by the VDO */
u8 recovery_count; /* The number of entries which fit in a single block */
journal_entry_count_t entries_per_block; /* Unused in-memory journal blocks */ struct list_head free_tail_blocks; /* In-memory journal blocks with records */ struct list_head active_tail_blocks; /* A pointer to the active block (the one we are adding entries to now) */ struct recovery_journal_block *active_block; /* Journal blocks that need writing */ struct vdo_wait_queue pending_writes; /* The new block map reap head after reaping */
sequence_number_t block_map_reap_head; /* The head block number for the block map rebuild range */
block_count_t block_map_head_block_number; /* The new slab journal reap head after reaping */
sequence_number_t slab_journal_reap_head; /* The head block number for the slab journal replay range */
block_count_t slab_journal_head_block_number; /* The data-less vio, usable only for flushing */ struct vio *flush_vio; /* The number of blocks in the on-disk journal */
block_count_t size; /* The number of logical blocks that are in-use */
block_count_t logical_blocks_used; /* The number of block map pages that are allocated */
block_count_t block_map_data_blocks; /* The number of journal blocks written but not yet acknowledged */
block_count_t pending_write_count; /* The threshold at which slab journal tail blocks will be written out */
block_count_t slab_journal_commit_threshold; /* Counters for events in the journal that are reported as statistics */ struct recovery_journal_statistics events; /* The locks for each on-disk block */ struct lock_counter lock_counter; /* The tail blocks */ struct recovery_journal_block blocks[];
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.