@@ -1,50 +1,39 @@
# 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 \
@@ -54,6 +43,19 @@ dm-vdo-objs := \
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
@@ -10,9 +10,10 @@
#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"
@@ -126,13 +126,14 @@
#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"
similarity index 99%
rename from drivers/md/dm-vdo/chapter-index.c
rename to drivers/md/dm-vdo/indexer/chapter-index.c
@@ -6,12 +6,13 @@
#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)
{
similarity index 100%
rename from drivers/md/dm-vdo/chapter-index.h
rename to drivers/md/dm-vdo/indexer/chapter-index.h
similarity index 100%
rename from drivers/md/dm-vdo/config.c
rename to drivers/md/dm-vdo/indexer/config.c
similarity index 100%
rename from drivers/md/dm-vdo/config.h
rename to drivers/md/dm-vdo/indexer/config.h
similarity index 99%
rename from drivers/md/dm-vdo/delta-index.c
rename to drivers/md/dm-vdo/indexer/delta-index.c
@@ -10,10 +10,8 @@
#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"
@@ -21,6 +19,9 @@
#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
similarity index 99%
rename from drivers/md/dm-vdo/delta-index.h
rename to drivers/md/dm-vdo/indexer/delta-index.h
@@ -8,11 +8,12 @@
#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
similarity index 100%
rename from drivers/md/dm-vdo/funnel-requestqueue.c
rename to drivers/md/dm-vdo/indexer/funnel-requestqueue.c
similarity index 100%
rename from drivers/md/dm-vdo/funnel-requestqueue.h
rename to drivers/md/dm-vdo/indexer/funnel-requestqueue.h
similarity index 99%
rename from drivers/md/dm-vdo/geometry.c
rename to drivers/md/dm-vdo/indexer/geometry.c
@@ -8,13 +8,14 @@
#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
similarity index 100%
rename from drivers/md/dm-vdo/geometry.h
rename to drivers/md/dm-vdo/indexer/geometry.h
similarity index 99%
rename from drivers/md/dm-vdo/hash-utils.h
rename to drivers/md/dm-vdo/indexer/hash-utils.h
@@ -6,9 +6,10 @@
#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. */
similarity index 99%
rename from drivers/md/dm-vdo/index-layout.c
rename to drivers/md/dm-vdo/indexer/index-layout.c
@@ -7,13 +7,14 @@
#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"
/*
similarity index 100%
rename from drivers/md/dm-vdo/index-layout.h
rename to drivers/md/dm-vdo/indexer/index-layout.h
similarity index 99%
rename from drivers/md/dm-vdo/index-page-map.c
rename to drivers/md/dm-vdo/indexer/index-page-map.c
@@ -6,8 +6,6 @@
#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"
@@ -15,6 +13,9 @@
#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
similarity index 100%
rename from drivers/md/dm-vdo/index-page-map.h
rename to drivers/md/dm-vdo/indexer/index-page-map.h
similarity index 99%
rename from drivers/md/dm-vdo/index-session.c
rename to drivers/md/dm-vdo/indexer/index-session.c
@@ -7,13 +7,14 @@
#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
similarity index 99%
rename from drivers/md/dm-vdo/index-session.h
rename to drivers/md/dm-vdo/indexer/index-session.h
@@ -9,9 +9,10 @@
#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,
similarity index 99%
rename from drivers/md/dm-vdo/index.c
rename to drivers/md/dm-vdo/indexer/index.c
@@ -6,10 +6,11 @@
#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;
similarity index 100%
rename from drivers/md/dm-vdo/index.h
rename to drivers/md/dm-vdo/indexer/index.h
similarity index 100%
rename from drivers/md/dm-vdo/indexer.h
rename to drivers/md/dm-vdo/indexer/indexer.h
similarity index 100%
rename from drivers/md/dm-vdo/io-factory.c
rename to drivers/md/dm-vdo/indexer/io-factory.c
similarity index 100%
rename from drivers/md/dm-vdo/io-factory.h
rename to drivers/md/dm-vdo/indexer/io-factory.h
similarity index 99%
rename from drivers/md/dm-vdo/open-chapter.c
rename to drivers/md/dm-vdo/indexer/open-chapter.c
@@ -7,13 +7,14 @@
#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,
similarity index 100%
rename from drivers/md/dm-vdo/open-chapter.h
rename to drivers/md/dm-vdo/indexer/open-chapter.h
similarity index 100%
rename from drivers/md/dm-vdo/radix-sort.c
rename to drivers/md/dm-vdo/indexer/radix-sort.c
similarity index 100%
rename from drivers/md/dm-vdo/radix-sort.h
rename to drivers/md/dm-vdo/indexer/radix-sort.h
similarity index 99%
rename from drivers/md/dm-vdo/sparse-cache.c
rename to drivers/md/dm-vdo/indexer/sparse-cache.c
@@ -9,13 +9,14 @@
#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
similarity index 100%
rename from drivers/md/dm-vdo/sparse-cache.h
rename to drivers/md/dm-vdo/indexer/sparse-cache.h
similarity index 99%
rename from drivers/md/dm-vdo/volume-index.c
rename to drivers/md/dm-vdo/indexer/volume-index.c
@@ -10,17 +10,18 @@
#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
similarity index 99%
rename from drivers/md/dm-vdo/volume-index.h
rename to drivers/md/dm-vdo/indexer/volume-index.h
@@ -8,10 +8,11 @@
#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
similarity index 99%
rename from drivers/md/dm-vdo/volume.c
rename to drivers/md/dm-vdo/indexer/volume.c
@@ -9,19 +9,20 @@
#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
similarity index 99%
rename from drivers/md/dm-vdo/volume.h
rename to drivers/md/dm-vdo/indexer/volume.h
@@ -11,16 +11,17 @@
#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
@@ -9,11 +9,12 @@
#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 {