86 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2023 Red Hat4 */5 6#ifndef UDS_INDEX_SESSION_H7#define UDS_INDEX_SESSION_H8 9#include <linux/atomic.h>10#include <linux/cache.h>11 12#include "thread-utils.h"13 14#include "config.h"15#include "indexer.h"16 17/*18 * The index session mediates all interactions with a UDS index. Once the index session is created,19 * it can be used to open, close, suspend, or recreate an index. It implements the majority of the20 * functions in the top-level UDS API.21 *22 * If any deduplication request fails due to an internal error, the index is marked disabled. It23 * will not accept any further requests and can only be closed. Closing the index will clear the24 * disabled flag, and the index can then be reopened and recovered using the same index session.25 */26 27struct __aligned(L1_CACHE_BYTES) session_stats {28 /* Post requests that found an entry */29 u64 posts_found;30 /* Post requests found in the open chapter */31 u64 posts_found_open_chapter;32 /* Post requests found in the dense index */33 u64 posts_found_dense;34 /* Post requests found in the sparse index */35 u64 posts_found_sparse;36 /* Post requests that did not find an entry */37 u64 posts_not_found;38 /* Update requests that found an entry */39 u64 updates_found;40 /* Update requests that did not find an entry */41 u64 updates_not_found;42 /* Delete requests that found an entry */43 u64 deletions_found;44 /* Delete requests that did not find an entry */45 u64 deletions_not_found;46 /* Query requests that found an entry */47 u64 queries_found;48 /* Query requests that did not find an entry */49 u64 queries_not_found;50 /* Total number of requests */51 u64 requests;52};53 54enum index_suspend_status {55 /* An index load has started but the index is not ready for use. */56 INDEX_OPENING = 0,57 /* The index is able to handle requests. */58 INDEX_READY,59 /* The index is attempting to suspend a rebuild. */60 INDEX_SUSPENDING,61 /* An index rebuild has been suspended. */62 INDEX_SUSPENDED,63 /* An index rebuild is being stopped in order to shut down. */64 INDEX_FREEING,65};66 67struct index_load_context {68 struct mutex mutex;69 struct cond_var cond;70 enum index_suspend_status status;71};72 73struct uds_index_session {74 unsigned int state;75 struct uds_index *index;76 struct uds_request_queue *callback_queue;77 struct uds_parameters parameters;78 struct index_load_context load_context;79 struct mutex request_mutex;80 struct cond_var request_cond;81 int request_count;82 struct session_stats stats;83};84 85#endif /* UDS_INDEX_SESSION_H */86