Spdk/lib/ftl/ftl_sb_current.h
Artur Paszkiewicz 1738488e41 ftl: p2l checkpointing
Since base device doesn't require VSS, FTL introduces a mechanism that
will allow for recovering both the P2L and write pointer of open bands
after a dirty shutdown. After writing 1MiB of data to a band, a 4KiB
block describing the P2L will be persisted to cache device, effectively
emulating VSS for the base device.

Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: Ic6be52dc09b237297a5cda3e752d6c038e98b70e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13367
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2022-09-07 00:08:34 +00:00

57 lines
1.2 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) Intel Corporation.
* All rights reserved.
*/
#ifndef FTL_SB_CURRENT_H
#define FTL_SB_CURRENT_H
#include "spdk/uuid.h"
#include "ftl_sb_common.h"
#define FTL_METADATA_VERSION_4 4
#define FTL_METADATA_VERSION_CURRENT FTL_METADATA_VERSION_4
struct ftl_superblock {
struct ftl_superblock_header header;
struct spdk_uuid uuid;
/* Current sequence number */
uint64_t seq_id;
/* Flag describing clean shutdown */
uint64_t clean;
/* Number of surfaced LBAs */
uint64_t lba_cnt;
/* Percentage of base device blocks not exposed to the user */
uint64_t overprovisioning;
/* Maximum IO depth per band relocate */
uint64_t max_reloc_qdepth;
/* Reserved fields */
uint64_t reserved;
bool reserved3;
uint32_t reserved2;
/* Last L2P checkpoint +1 (i.e. min_seq_id, 0:no ckpt) */
uint64_t ckpt_seq_id;
struct ftl_superblock_gc_info gc_info;
struct ftl_superblock_md_region md_layout_head;
};
SPDK_STATIC_ASSERT(offsetof(struct ftl_superblock, header) == 0,
"Invalid placement of header");
SPDK_STATIC_ASSERT(FTL_SUPERBLOCK_SIZE >= sizeof(struct ftl_superblock),
"FTL SB metadata size is invalid");
#endif /* FTL_SB_CURRENT_H */