# SPDX-License-Identifier: GPL-2.0-only
+ccflags-y := -I$(srctree)/$(src) -I$(srctree)/$(src)/indexer
+
obj-$(CONFIG_DM_VDO) += dm-vdo.o
dm-vdo-objs := \
action-manager.o \
admin-state.o \
block-map.o \
- chapter-index.o \
completion.o \
- config.o \
data-vio.o \
dedupe.o \
- delta-index.o \
dm-vdo-target.o \
dump.o \
encodings.o \
errors.o \
flush.o \
funnel-queue.o \
- funnel-requestqueue.o \
funnel-workqueue.o \
- geometry.o \
- index-layout.o \
- index.o \
- index-page-map.o \
- index-session.o \
int-map.o \
- io-factory.o \
io-submitter.o \
logger.o \
logical-zone.o \
memory-alloc.o \
message-stats.o \
murmurhash3.o \
- open-chapter.o \
packer.o \
permassert.o \
physical-zone.o \
pool-sysfs.o \
pool-sysfs-stats.o \
priority-table.o \
- radix-sort.o \
recovery-journal.o \
repair.o \
slab-depot.o \
- sparse-cache.o \
status-codes.o \
string-utils.o \
sysfs.o \
uds-sysfs.o \
vdo.o \
vio.o \
- volume-index.o \
- volume.o \
- wait-queue.o
+ wait-queue.o \
+ indexer/chapter-index.o \
+ indexer/config.o \
+ indexer/delta-index.o \
+ indexer/funnel-requestqueue.o \
+ indexer/geometry.o \
+ indexer/index.o \
+ indexer/index-layout.o \
+ indexer/index-page-map.o \
+ indexer/index-session.o \
+ indexer/io-factory.o \
+ indexer/open-chapter.o \
+ indexer/radix-sort.o \
+ indexer/sparse-cache.o \
+ indexer/volume.o \
+ indexer/volume-index.o
#include <linux/bio.h>
#include <linux/list.h>
-#include "indexer.h"
#include "permassert.h"
+#include "indexer.h"
+
#include "block-map.h"
#include "completion.h"
#include "constants.h"
#include <linux/spinlock.h>
#include <linux/timer.h>
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "numeric.h"
#include "permassert.h"
#include "string-utils.h"
+#include "indexer.h"
+
#include "action-manager.h"
#include "admin-state.h"
#include "completion.h"
#include "chapter-index.h"
#include "errors.h"
-#include "hash-utils.h"
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "permassert.h"
+#include "hash-utils.h"
+#include "indexer.h"
+
int uds_make_open_chapter_index(struct open_chapter_index **chapter_index,
const struct index_geometry *geometry, u64 volume_nonce)
{
#include <linux/limits.h>
#include <linux/log2.h>
-#include "config.h"
#include "cpu.h"
#include "errors.h"
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "numeric.h"
#include "string-utils.h"
#include "time-utils.h"
+#include "config.h"
+#include "indexer.h"
+
/*
* The entries in a delta index could be stored in a single delta list, but to reduce search times
* and update costs it uses multiple delta lists. These lists are stored in a single chunk of
#include <linux/cache.h>
-#include "config.h"
-#include "io-factory.h"
#include "numeric.h"
#include "time-utils.h"
+#include "config.h"
+#include "io-factory.h"
+
/*
* A delta index is a key-value store, where each entry maps an address (the key) to a payload (the
* value). The entries are sorted by address, and only the delta between successive addresses is
#include <linux/compiler.h>
#include <linux/log2.h>
-#include "delta-index.h"
#include "errors.h"
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "permassert.h"
+#include "delta-index.h"
+#include "indexer.h"
+
/*
* An index volume is divided into a fixed number of fixed-size chapters, each consisting of a
* fixed number of fixed-size pages. The volume layout is defined by two constants and four
#ifndef UDS_HASH_UTILS_H
#define UDS_HASH_UTILS_H
+#include "numeric.h"
+
#include "geometry.h"
#include "indexer.h"
-#include "numeric.h"
/* Utilities for extracting portions of a request name for various uses. */
#include <linux/random.h>
-#include "config.h"
#include "logger.h"
#include "memory-alloc.h"
#include "murmurhash3.h"
#include "numeric.h"
-#include "open-chapter.h"
#include "time-utils.h"
+
+#include "config.h"
+#include "open-chapter.h"
#include "volume-index.h"
/*
#include "index-page-map.h"
#include "errors.h"
-#include "hash-utils.h"
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "numeric.h"
#include "string-utils.h"
#include "thread-utils.h"
+#include "hash-utils.h"
+#include "indexer.h"
+
/*
* The index page map is conceptually a two-dimensional array indexed by chapter number and index
* page number within the chapter. Each entry contains the number of the last delta list on that
#include <linux/atomic.h>
-#include "funnel-requestqueue.h"
-#include "index.h"
-#include "index-layout.h"
#include "logger.h"
#include "memory-alloc.h"
#include "time-utils.h"
+#include "funnel-requestqueue.h"
+#include "index.h"
+#include "index-layout.h"
+
/*
* The index session contains a lock (the request_mutex) which ensures that only one thread can
* change the state of its index at a time. The state field indicates the current state of the
#include <linux/atomic.h>
#include <linux/cache.h>
+#include "thread-utils.h"
+
#include "config.h"
#include "indexer.h"
-#include "thread-utils.h"
/*
* The index session mediates all interactions with a UDS index. Once the index session is created,
#include "index.h"
-#include "funnel-requestqueue.h"
-#include "hash-utils.h"
#include "logger.h"
#include "memory-alloc.h"
+
+#include "funnel-requestqueue.h"
+#include "hash-utils.h"
#include "sparse-cache.h"
static const u64 NO_LAST_SAVE = U64_MAX;
#include <linux/log2.h>
-#include "config.h"
-#include "hash-utils.h"
#include "logger.h"
#include "memory-alloc.h"
#include "numeric.h"
#include "permassert.h"
+#include "config.h"
+#include "hash-utils.h"
+
/*
* Each index zone has a dedicated open chapter zone structure which gets an equal share of the
* open chapter space. Records are assigned to zones based on their record name. Within each zone,
#include <linux/delay.h>
#include <linux/dm-bufio.h>
-#include "chapter-index.h"
-#include "config.h"
-#include "index.h"
#include "logger.h"
#include "memory-alloc.h"
#include "permassert.h"
+#include "chapter-index.h"
+#include "config.h"
+#include "index.h"
+
/*
* Since the cache is small, it is implemented as a simple array of cache entries. Searching for a
* specific virtual chapter is implemented as a linear search. The cache replacement policy is
#include <linux/compiler.h>
#include <linux/log2.h>
-#include "config.h"
#include "errors.h"
-#include "geometry.h"
-#include "hash-utils.h"
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "numeric.h"
#include "permassert.h"
#include "thread-utils.h"
+#include "config.h"
+#include "geometry.h"
+#include "hash-utils.h"
+#include "indexer.h"
+
/*
* The volume index is a combination of two separate subindexes, one containing sparse hook entries
* (retained for all chapters), and one containing the remaining entries (retained only for the
#include <linux/limits.h>
+#include "thread-utils.h"
+
#include "config.h"
#include "delta-index.h"
#include "indexer.h"
-#include "thread-utils.h"
/*
* The volume index is the primary top-level index for UDS. It contains records which map a record
#include <linux/dm-bufio.h>
#include <linux/err.h>
-#include "chapter-index.h"
-#include "config.h"
#include "errors.h"
-#include "geometry.h"
-#include "hash-utils.h"
-#include "index.h"
#include "logger.h"
#include "memory-alloc.h"
#include "permassert.h"
-#include "sparse-cache.h"
#include "string-utils.h"
#include "thread-utils.h"
+#include "chapter-index.h"
+#include "config.h"
+#include "geometry.h"
+#include "hash-utils.h"
+#include "index.h"
+#include "sparse-cache.h"
+
/*
* The first block of the volume layout is reserved for the volume header, which is no longer used.
* The remainder of the volume is divided into chapters consisting of several pages of records, and
#include <linux/dm-bufio.h>
#include <linux/limits.h>
+#include "permassert.h"
+#include "thread-utils.h"
+
#include "chapter-index.h"
#include "config.h"
#include "geometry.h"
#include "indexer.h"
#include "index-layout.h"
#include "index-page-map.h"
-#include "permassert.h"
#include "radix-sort.h"
#include "sparse-cache.h"
-#include "thread-utils.h"
/*
* The volume manages deduplication records on permanent storage. The term "volume" can also refer
#include <linux/module.h>
#include <linux/slab.h>
-#include "indexer.h"
#include "logger.h"
#include "memory-alloc.h"
#include "string-utils.h"
+#include "indexer.h"
+
#define UDS_SYSFS_NAME "uds"
static struct {