xref: /spdk/lib/ftl/utils/ftl_layout_tracker_bdev.h (revision 45a053c5777494f4e8ce4bc1191c9de3920377f7)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright 2023 Solidigm All Rights Reserved
3  */
4 
5 #ifndef FTL_LAYOUT_TRACKER_BDEV_H
6 #define FTL_LAYOUT_TRACKER_BDEV_H
7 
8 #include "spdk/stdinc.h"
9 #include "spdk/queue.h"
10 #include "ftl_layout.h"
11 
12 /**
13  * FTL layout region descriptor
14  */
15 struct ftl_layout_tracker_bdev_region_props {
16 	/* Region type */
17 	uint32_t type;
18 
19 	/* Region version */
20 	uint32_t ver;
21 
22 	/* Region offset in blocks */
23 	uint64_t blk_offs;
24 
25 	/* Region size in blocks */
26 	uint64_t blk_sz;
27 };
28 
29 /**
30  * FTL layout region tracker
31  */
32 struct ftl_layout_tracker_bdev;
33 
34 /**
35  * @brief Initialize the FTL layout tracker
36  *
37  * @param bdev_blks bdev's number of blocks
38  *
39  * @return pointer to ftl_md_layout_tracker_bdev on success : NULL on fault
40  */
41 struct ftl_layout_tracker_bdev *ftl_layout_tracker_bdev_init(uint64_t bdev_blks);
42 
43 /**
44  * @brief Deinitialize the FTL layout tracker
45  *
46  * @param tracker pointer to the tracker instance
47  */
48 void ftl_layout_tracker_bdev_fini(struct ftl_layout_tracker_bdev *tracker);
49 
50 /**
51  * @brief Add a new FTL layout region
52  *
53  * @param tracker pointer to the tracker instance
54  * @param reg_type FTL layout region type
55  * @param reg_ver FTL layout region version
56  * @param blk_sz size in blocks of the FTL layout region
57  * @param blk_align offset alignment in blocks of the FTL layout region
58  *
59  * @return pointer to the ftl_layout_tracker_bdev_region_props, describing the region added or NULL upon fault
60  */
61 const struct ftl_layout_tracker_bdev_region_props *ftl_layout_tracker_bdev_add_region(
62 	struct ftl_layout_tracker_bdev *tracker, enum ftl_layout_region_type reg_type, uint32_t reg_ver,
63 	uint64_t blk_sz, uint64_t blk_align);
64 
65 /**
66  * @brief Remove an existing FTL lyout region
67  *
68  * @param tracker pointer to the tracker instance
69  * @param reg_type FTL layout region type
70  * @param reg_ver FTL layout region version
71  *
72  * @return 0 on success : -1 on fault
73  */
74 int ftl_layout_tracker_bdev_rm_region(struct ftl_layout_tracker_bdev *tracker,
75 				      enum ftl_layout_region_type reg_type, uint32_t reg_ver);
76 
77 /**
78  * @brief Find the next FTL layout region of a given type
79  *
80  * @param tracker pointer to the tracker instance
81  * @param reg_type region type filter, FTL_LAYOUT_REGION_TYPE_INVALID to iterate through all regions
82  * @param search_ctx search context, points to NULL to find the first region
83  */
84 void ftl_layout_tracker_bdev_find_next_region(struct ftl_layout_tracker_bdev *tracker,
85 		enum ftl_layout_region_type reg_type,
86 		const struct ftl_layout_tracker_bdev_region_props **search_ctx);
87 
88 #endif /* FTL_LAYOUT_TRACKER_BDEV_H */
89