linux/drivers/md/dm-vdo/indexer/index.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright 2023 Red Hat
 */

#ifndef UDS_INDEX_H
#define UDS_INDEX_H

#include "index-layout.h"
#include "index-session.h"
#include "open-chapter.h"
#include "volume.h"
#include "volume-index.h"

/*
 * The index is a high-level structure which represents the totality of the UDS index. It manages
 * the queues for incoming requests and dispatches them to the appropriate sub-components like the
 * volume or the volume index. It also manages administrative tasks such as saving and loading the
 * index.
 *
 * The index is divided into a number of independent zones and assigns each request to a zone based
 * on its name. Most sub-components are similarly divided into zones as well so that requests in
 * each zone usually operate without interference or coordination between zones.
 */

index_callback_fn;

struct index_zone {};

struct uds_index {};

enum request_stage {};

int __must_check uds_make_index(struct uds_configuration *config,
				enum uds_open_index_type open_type,
				struct index_load_context *load_context,
				index_callback_fn callback, struct uds_index **new_index);

int __must_check uds_save_index(struct uds_index *index);

void uds_free_index(struct uds_index *index);

int __must_check uds_replace_index_storage(struct uds_index *index,
					   struct block_device *bdev);

void uds_get_index_stats(struct uds_index *index, struct uds_index_stats *counters);

void uds_enqueue_request(struct uds_request *request, enum request_stage stage);

void uds_wait_for_idle_index(struct uds_index *index);

#endif /* UDS_INDEX_H */