brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · edabb23 Raw
84 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2023 Red Hat4 */5 6#ifndef UDS_INDEX_H7#define UDS_INDEX_H8 9#include "index-layout.h"10#include "index-session.h"11#include "open-chapter.h"12#include "volume.h"13#include "volume-index.h"14 15/*16 * The index is a high-level structure which represents the totality of the UDS index. It manages17 * the queues for incoming requests and dispatches them to the appropriate sub-components like the18 * volume or the volume index. It also manages administrative tasks such as saving and loading the19 * index.20 *21 * The index is divided into a number of independent zones and assigns each request to a zone based22 * on its name. Most sub-components are similarly divided into zones as well so that requests in23 * each zone usually operate without interference or coordination between zones.24 */25 26typedef void (*index_callback_fn)(struct uds_request *request);27 28struct index_zone {29	struct uds_index *index;30	struct open_chapter_zone *open_chapter;31	struct open_chapter_zone *writing_chapter;32	u64 oldest_virtual_chapter;33	u64 newest_virtual_chapter;34	unsigned int id;35};36 37struct uds_index {38	bool has_saved_open_chapter;39	bool need_to_save;40	struct index_load_context *load_context;41	struct index_layout *layout;42	struct volume_index *volume_index;43	struct volume *volume;44	unsigned int zone_count;45	struct index_zone **zones;46 47	u64 oldest_virtual_chapter;48	u64 newest_virtual_chapter;49 50	u64 last_save;51	u64 prev_save;52	struct chapter_writer *chapter_writer;53 54	index_callback_fn callback;55	struct uds_request_queue *triage_queue;56	struct uds_request_queue *zone_queues[];57};58 59enum request_stage {60	STAGE_TRIAGE,61	STAGE_INDEX,62	STAGE_MESSAGE,63};64 65int __must_check uds_make_index(struct uds_configuration *config,66				enum uds_open_index_type open_type,67				struct index_load_context *load_context,68				index_callback_fn callback, struct uds_index **new_index);69 70int __must_check uds_save_index(struct uds_index *index);71 72void uds_free_index(struct uds_index *index);73 74int __must_check uds_replace_index_storage(struct uds_index *index,75					   struct block_device *bdev);76 77void uds_get_index_stats(struct uds_index *index, struct uds_index_stats *counters);78 79void uds_enqueue_request(struct uds_request *request, enum request_stage stage);80 81void uds_wait_for_idle_index(struct uds_index *index);82 83#endif /* UDS_INDEX_H */84