xref: /spdk/lib/ftl/ftl_sb_current.h (revision 9f42898ac3c433ad69b6701274c4ed3305fa61c5)
1c6880a39SArtur Paszkiewicz /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2022 Intel Corporation.
3c6880a39SArtur Paszkiewicz  *   All rights reserved.
4c6880a39SArtur Paszkiewicz  */
5c6880a39SArtur Paszkiewicz 
6c6880a39SArtur Paszkiewicz #ifndef FTL_SB_CURRENT_H
7c6880a39SArtur Paszkiewicz #define FTL_SB_CURRENT_H
8c6880a39SArtur Paszkiewicz 
9c6880a39SArtur Paszkiewicz #include "spdk/uuid.h"
10c6880a39SArtur Paszkiewicz #include "ftl_sb_common.h"
11c6880a39SArtur Paszkiewicz 
12*9f42898aSLukasz Lasek #define FTL_SB_VERSION_5			5
13*9f42898aSLukasz Lasek #define FTL_SB_VERSION_CURRENT			FTL_SB_VERSION_5
14c6880a39SArtur Paszkiewicz 
15c6880a39SArtur Paszkiewicz struct ftl_superblock {
16c6880a39SArtur Paszkiewicz 	struct ftl_superblock_header	header;
17c6880a39SArtur Paszkiewicz 
18c6880a39SArtur Paszkiewicz 	struct spdk_uuid		uuid;
19c6880a39SArtur Paszkiewicz 
2036049672SArtur Paszkiewicz 	/* Current sequence number */
2136049672SArtur Paszkiewicz 	uint64_t			seq_id;
2236049672SArtur Paszkiewicz 
23c6880a39SArtur Paszkiewicz 	/* Flag describing clean shutdown */
24c6880a39SArtur Paszkiewicz 	uint64_t			clean;
25c6880a39SArtur Paszkiewicz 
26c6880a39SArtur Paszkiewicz 	/* Number of surfaced LBAs */
27c6880a39SArtur Paszkiewicz 	uint64_t			lba_cnt;
28c6880a39SArtur Paszkiewicz 
29c6880a39SArtur Paszkiewicz 	/* Percentage of base device blocks not exposed to the user */
30c6880a39SArtur Paszkiewicz 	uint64_t			overprovisioning;
31c6880a39SArtur Paszkiewicz 
32c6880a39SArtur Paszkiewicz 	/* Maximum IO depth per band relocate */
33c6880a39SArtur Paszkiewicz 	uint64_t			max_reloc_qdepth;
34c6880a39SArtur Paszkiewicz 
35d4a2d28dSMateusz Kozlowski 	/* Flag indicates that the FTL is ready for upgrade */
36d4a2d28dSMateusz Kozlowski 	uint8_t				upgrade_ready;
37d4a2d28dSMateusz Kozlowski 
38920c1ccaSKozlowski Mateusz 	/* Reserved field */
39d4a2d28dSMateusz Kozlowski 	uint8_t				reserved3[15];
40c6880a39SArtur Paszkiewicz 
411738488eSArtur Paszkiewicz 	/* Last L2P checkpoint +1 (i.e. min_seq_id, 0:no ckpt) */
421738488eSArtur Paszkiewicz 	uint64_t			ckpt_seq_id;
431738488eSArtur Paszkiewicz 
44c6880a39SArtur Paszkiewicz 	struct ftl_superblock_gc_info	gc_info;
45c6880a39SArtur Paszkiewicz 
46*9f42898aSLukasz Lasek 	/* Points to the end of blob area */
47*9f42898aSLukasz Lasek 	ftl_df_obj_id			blob_area_end;
48*9f42898aSLukasz Lasek 
49*9f42898aSLukasz Lasek 	/* NVC device name */
50*9f42898aSLukasz Lasek 	char				nvc_dev_name[16];
51*9f42898aSLukasz Lasek 
52*9f42898aSLukasz Lasek 	/* NVC-stored MD layout tracking info */
53*9f42898aSLukasz Lasek 	struct ftl_superblock_v5_md_blob_hdr	md_layout_nvc;
54*9f42898aSLukasz Lasek 
55*9f42898aSLukasz Lasek 	/* Base device name */
56*9f42898aSLukasz Lasek 	char					base_dev_name[16];
57*9f42898aSLukasz Lasek 
58*9f42898aSLukasz Lasek 	/* Base dev-stored MD layout tracking info */
59*9f42898aSLukasz Lasek 	struct ftl_superblock_v5_md_blob_hdr	md_layout_base;
60*9f42898aSLukasz Lasek 
61*9f42898aSLukasz Lasek 	/* FTL layout params */
62*9f42898aSLukasz Lasek 	struct ftl_superblock_v5_md_blob_hdr	layout_params;
63*9f42898aSLukasz Lasek 
64*9f42898aSLukasz Lasek 	/* Start of the blob area */
65*9f42898aSLukasz Lasek 	char blob_area[0];
66920c1ccaSKozlowski Mateusz } __attribute__((packed));
67c6880a39SArtur Paszkiewicz 
68c6880a39SArtur Paszkiewicz SPDK_STATIC_ASSERT(offsetof(struct ftl_superblock, header) == 0,
69c6880a39SArtur Paszkiewicz 		   "Invalid placement of header");
70c6880a39SArtur Paszkiewicz 
71c6880a39SArtur Paszkiewicz SPDK_STATIC_ASSERT(FTL_SUPERBLOCK_SIZE >= sizeof(struct ftl_superblock),
72c6880a39SArtur Paszkiewicz 		   "FTL SB metadata size is invalid");
73c6880a39SArtur Paszkiewicz 
74c6880a39SArtur Paszkiewicz #endif /* FTL_SB_CURRENT_H */
75