per Intel policy to include file commit date using git cmd below. The policy does not apply to non-Intel (C) notices. git log --follow -C90% --format=%ad --date default <file> | tail -1 and then pull just the 4 digit year from the result. Intel copyrights were not added to files where Intel either had no contribution ot the contribution lacked substance (ie license header updates, formatting changes, etc). Contribution date used "--follow -C95%" to get the most accurate date. Note that several files in this patch didn't end the license/(c) block with a blank comment line so these were added as the vast majority of files do have this last blank line. Simply there for consistency. Signed-off-by: paul luse <paul.e.luse@intel.com> Change-Id: Id5b7ce4f658fe87132f14139ead58d6e285c04d4 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15192 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> Community-CI: Mellanox Build Bot
77 lines
2.2 KiB
C
77 lines
2.2 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright (C) 2022 Intel Corporation.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#ifndef FTL_SB_COMMON_H
|
|
#define FTL_SB_COMMON_H
|
|
|
|
#include "spdk/stdinc.h"
|
|
#include "utils/ftl_defs.h"
|
|
#include "utils/ftl_df.h"
|
|
|
|
/* Size of superblock on NV cache, make it bigger for future fields */
|
|
#define FTL_SUPERBLOCK_SIZE (128ULL * KiB)
|
|
|
|
#define FTL_MAGIC(a, b, c, d) \
|
|
((UINT64_C(a) << 48) | (UINT64_C(b) << 32) | (UINT64_C(c) << 16) | \
|
|
UINT64_C(d))
|
|
|
|
/**
|
|
* Magic number identifies FTL superblock
|
|
*/
|
|
#define FTL_SUPERBLOCK_MAGIC FTL_MAGIC(0x1410, 0x1683, 0x1920, 0x1989)
|
|
|
|
struct ftl_superblock_gc_info {
|
|
/* High priority band; if there's no free bands after dirty shutdown, don't restart GC from same id, or phys_id -
|
|
* pick actual lowest validity band to avoid being stuck and try to write it to the open band.
|
|
*/
|
|
uint64_t band_id_high_prio;
|
|
/* Currently relocated band (note it's just id, not seq_id ie. its actual location on disk) */
|
|
uint64_t current_band_id;
|
|
/* Bands are grouped together into larger reclaim units; this is the band id translated to those units */
|
|
uint64_t band_phys_id;
|
|
/* May be updating multiple fields at the same time, clearing/setting this marks the transaction */
|
|
uint64_t is_valid;
|
|
} __attribute__((packed));
|
|
SPDK_STATIC_ASSERT(sizeof(struct ftl_superblock_gc_info) == 32,
|
|
"ftl_superblock_gc_info incorrect size");
|
|
|
|
struct ftl_superblock_header {
|
|
uint64_t magic;
|
|
uint64_t crc;
|
|
uint64_t version;
|
|
} __attribute__((packed));
|
|
SPDK_STATIC_ASSERT(sizeof(struct ftl_superblock_header) == 24,
|
|
"ftl_superblock_header incorrect size");
|
|
|
|
struct ftl_superblock_md_region {
|
|
uint32_t type;
|
|
uint32_t version;
|
|
uint64_t blk_offs;
|
|
uint64_t blk_sz;
|
|
ftl_df_obj_id df_next;
|
|
} __attribute__((packed));
|
|
SPDK_STATIC_ASSERT(sizeof(struct ftl_superblock_md_region) == 32,
|
|
"ftl_superblock_md_region incorrect size");
|
|
|
|
struct ftl_superblock_shm {
|
|
/* SHM initialization completed */
|
|
bool shm_ready;
|
|
|
|
/* SHM status - fast restart */
|
|
bool shm_clean;
|
|
|
|
/* Used to continue trim after SHM recovery */
|
|
struct {
|
|
bool in_progress;
|
|
uint64_t start_lba;
|
|
uint64_t num_blocks;
|
|
uint64_t seq_id;
|
|
} trim;
|
|
|
|
struct ftl_superblock_gc_info gc_info;
|
|
};
|
|
|
|
#endif /* FTL_SB_COMMON_H */
|