Spdk/lib/ftl/ftl_writer.h
Artur Paszkiewicz 36049672a3 ftl: sequence id tracking
Track the relative sequence of opening and closing bands and chunks.
Necessary for detecting the most recent user data during dirty shutdown recovery.

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

80 lines
1.6 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) Intel Corporation.
* All rights reserved.
*/
#ifndef FTL_WRITER_H
#define FTL_WRITER_H
#include "spdk/stdinc.h"
#include "spdk/queue.h"
#include "ftl_io.h"
struct ftl_writer {
struct spdk_ftl_dev *dev;
TAILQ_HEAD(, ftl_rq) rq_queue;
/* Band currently being written to */
struct ftl_band *band;
/* Number of bands associated with writer */
uint64_t num_bands;
/* Band next being written to */
struct ftl_band *next_band;
/* List of full bands */
TAILQ_HEAD(, ftl_band) full_bands;
/* FTL band limit which blocks writes */
int limit;
/* Flag indicating halt has been requested */
bool halt;
/* Which type of band the writer uses */
enum ftl_band_type writer_type;
uint64_t last_seq_id;
};
bool ftl_writer_is_halted(struct ftl_writer *writer);
void ftl_writer_init(struct spdk_ftl_dev *dev, struct ftl_writer *writer,
uint64_t limit, enum ftl_band_type type);
void ftl_writer_run(struct ftl_writer *writer);
void ftl_writer_band_state_change(struct ftl_band *band);
static inline void
ftl_writer_halt(struct ftl_writer *writer)
{
writer->halt = true;
}
static inline void
ftl_writer_resume(struct ftl_writer *writer)
{
writer->halt = false;
}
bool ftl_writer_is_halted(struct ftl_writer *writer);
void ftl_writer_run(struct ftl_writer *writer);
static inline void
ftl_writer_queue_rq(struct ftl_writer *writer, struct ftl_rq *rq)
{
TAILQ_INSERT_TAIL(&writer->rq_queue, rq, qentry);
}
/**
* @brief Returns free space in currently processing band
*/
uint64_t ftl_writer_get_free_blocks(struct ftl_writer *writer);
#endif /* FTL_WRITER_H */