| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright 2023 Red Hat |
| */ |
| |
| #ifndef UDS_CONFIG_H |
| #define UDS_CONFIG_H |
| |
| #include "geometry.h" |
| #include "indexer.h" |
| #include "io-factory.h" |
| |
| /* |
| * The uds_configuration records a variety of parameters used to configure a new UDS index. Some |
| * parameters are provided by the client, while others are fixed or derived from user-supplied |
| * values. It is created when an index is created, and it is recorded in the index metadata. |
| */ |
| |
| enum { |
| DEFAULT_VOLUME_INDEX_MEAN_DELTA = 4096, |
| DEFAULT_CACHE_CHAPTERS = 7, |
| DEFAULT_SPARSE_SAMPLE_RATE = 32, |
| MAX_ZONES = 16, |
| }; |
| |
| /* A set of configuration parameters for the indexer. */ |
| struct uds_configuration { |
| /* Storage device for the index */ |
| struct block_device *bdev; |
| |
| /* The maximum allowable size of the index */ |
| size_t size; |
| |
| /* The offset where the index should start */ |
| off_t offset; |
| |
| /* Parameters for the volume */ |
| |
| /* The volume layout */ |
| struct index_geometry *geometry; |
| |
| /* Index owner's nonce */ |
| u64 nonce; |
| |
| /* The number of threads used to process index requests */ |
| unsigned int zone_count; |
| |
| /* The number of threads used to read volume pages */ |
| unsigned int read_threads; |
| |
| /* Size of the page cache and sparse chapter index cache in chapters */ |
| u32 cache_chapters; |
| |
| /* Parameters for the volume index */ |
| |
| /* The mean delta for the volume index */ |
| u32 volume_index_mean_delta; |
| |
| /* Sampling rate for sparse indexing */ |
| u32 sparse_sample_rate; |
| }; |
| |
| /* On-disk structure of data for a version 8.02 index. */ |
| struct uds_configuration_8_02 { |
| /* Smaller (16), Small (64) or large (256) indices */ |
| u32 record_pages_per_chapter; |
| /* Total number of chapters per volume */ |
| u32 chapters_per_volume; |
| /* Number of sparse chapters per volume */ |
| u32 sparse_chapters_per_volume; |
| /* Size of the page cache, in chapters */ |
| u32 cache_chapters; |
| /* Unused field */ |
| u32 unused; |
| /* The volume index mean delta to use */ |
| u32 volume_index_mean_delta; |
| /* Size of a page, used for both record pages and index pages */ |
| u32 bytes_per_page; |
| /* Sampling rate for sparse indexing */ |
| u32 sparse_sample_rate; |
| /* Index owner's nonce */ |
| u64 nonce; |
| /* Virtual chapter remapped from physical chapter 0 */ |
| u64 remapped_virtual; |
| /* New physical chapter which remapped chapter was moved to */ |
| u64 remapped_physical; |
| } __packed; |
| |
| /* On-disk structure of data for a version 6.02 index. */ |
| struct uds_configuration_6_02 { |
| /* Smaller (16), Small (64) or large (256) indices */ |
| u32 record_pages_per_chapter; |
| /* Total number of chapters per volume */ |
| u32 chapters_per_volume; |
| /* Number of sparse chapters per volume */ |
| u32 sparse_chapters_per_volume; |
| /* Size of the page cache, in chapters */ |
| u32 cache_chapters; |
| /* Unused field */ |
| u32 unused; |
| /* The volume index mean delta to use */ |
| u32 volume_index_mean_delta; |
| /* Size of a page, used for both record pages and index pages */ |
| u32 bytes_per_page; |
| /* Sampling rate for sparse indexing */ |
| u32 sparse_sample_rate; |
| /* Index owner's nonce */ |
| u64 nonce; |
| } __packed; |
| |
| int __must_check uds_make_configuration(const struct uds_parameters *params, |
| struct uds_configuration **config_ptr); |
| |
| void uds_free_configuration(struct uds_configuration *config); |
| |
| int __must_check uds_validate_config_contents(struct buffered_reader *reader, |
| struct uds_configuration *config); |
| |
| int __must_check uds_write_config_contents(struct buffered_writer *writer, |
| struct uds_configuration *config, u32 version); |
| |
| void uds_log_configuration(struct uds_configuration *config); |
| |
| #endif /* UDS_CONFIG_H */ |