FEMU  原版 master 7e238cc
FEMU: Accurate, Scalable and Extensible NVMe SSD Emulator (FAST'18)
zns.c 文件参考
#include "./zns.h"
zns.c 的引用(Include)关系图:

结构体

struct  zns_zone_reset_ctx
 

宏定义

#define MIN_DISCARD_GRANULARITY   (4 * KiB)
 
#define NVME_DEFAULT_ZONE_SIZE   (128 * MiB)
 
#define NVME_DEFAULT_MAX_AZ_SIZE   (128 * KiB)
 

类型定义

typedef uint16_t(* op_handler_t) (NvmeNamespace *, NvmeZone *, NvmeZoneState, NvmeRequest *)
 

枚举

enum  NvmeZoneProcessingMask {
  NVME_PROC_CURRENT_ZONE = 0, NVME_PROC_OPENED_ZONES = 1 << 0, NVME_PROC_CLOSED_ZONES = 1 << 1, NVME_PROC_READ_ONLY_ZONES = 1 << 2,
  NVME_PROC_FULL_ZONES = 1 << 3
}
 

函数

static uint32_t zns_zone_idx (NvmeNamespace *ns, uint64_t slba)
 
static NvmeZonezns_get_zone_by_slba (NvmeNamespace *ns, uint64_t slba)
 
static int zns_init_zone_geometry (NvmeNamespace *ns, Error **errp)
 
static void zns_init_zoned_state (NvmeNamespace *ns)
 
static void zns_init_zone_identify (FemuCtrl *n, NvmeNamespace *ns, int lba_index)
 
static void zns_clear_zone (NvmeNamespace *ns, NvmeZone *zone)
 
static void zns_zoned_ns_shutdown (NvmeNamespace *ns)
 
void zns_ns_shutdown (NvmeNamespace *ns)
 
void zns_ns_cleanup (NvmeNamespace *ns)
 
static void zns_assign_zone_state (NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state)
 
static int zns_aor_check (NvmeNamespace *ns, uint32_t act, uint32_t opn)
 
static uint16_t zns_check_zone_state_for_write (NvmeZone *zone)
 
static uint16_t zns_check_zone_write (FemuCtrl *n, NvmeNamespace *ns, NvmeZone *zone, uint64_t slba, uint32_t nlb, bool append)
 
static uint16_t zns_check_zone_state_for_read (NvmeZone *zone)
 
static uint16_t zns_check_zone_read (NvmeNamespace *ns, uint64_t slba, uint32_t nlb)
 
static void zns_auto_transition_zone (NvmeNamespace *ns)
 
static uint16_t zns_auto_open_zone (NvmeNamespace *ns, NvmeZone *zone)
 
static void zns_finalize_zoned_write (NvmeNamespace *ns, NvmeRequest *req, bool failed)
 
static uint64_t zns_advance_zone_wp (NvmeNamespace *ns, NvmeZone *zone, uint32_t nlb)
 
static void zns_aio_zone_reset_cb (NvmeRequest *req, NvmeZone *zone)
 
static uint16_t zns_open_zone (NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req)
 
static uint16_t zns_close_zone (NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req)
 
static uint16_t zns_finish_zone (NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req)
 
static uint16_t zns_reset_zone (NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req)
 
static uint16_t zns_offline_zone (NvmeNamespace *ns, NvmeZone *zone, NvmeZoneState state, NvmeRequest *req)
 
static uint16_t zns_set_zd_ext (NvmeNamespace *ns, NvmeZone *zone)
 
static uint16_t zns_bulk_proc_zone (NvmeNamespace *ns, NvmeZone *zone, enum NvmeZoneProcessingMask proc_mask, op_handler_t op_hndlr, NvmeRequest *req)
 
static uint16_t zns_do_zone_op (NvmeNamespace *ns, NvmeZone *zone, enum NvmeZoneProcessingMask proc_mask, op_handler_t op_hndlr, NvmeRequest *req)
 
static uint16_t zns_get_mgmt_zone_slba_idx (FemuCtrl *n, NvmeCmd *c, uint64_t *slba, uint32_t *zone_idx)
 
static uint16_t zns_zone_mgmt_send (FemuCtrl *n, NvmeRequest *req)
 
static bool zns_zone_matches_filter (uint32_t zafs, NvmeZone *zl)
 
static uint16_t zns_zone_mgmt_recv (FemuCtrl *n, NvmeRequest *req)
 
static bool nvme_csi_has_nvm_support (NvmeNamespace *ns)
 
static uint16_t zns_check_bounds (NvmeNamespace *ns, uint64_t slba, uint32_t nlb)
 
static uint16_t zns_map_dptr (FemuCtrl *n, size_t len, NvmeRequest *req)
 
static uint16_t zns_do_write (FemuCtrl *n, NvmeRequest *req, bool append, bool wrz)
 
static uint16_t zns_admin_cmd (FemuCtrl *n, NvmeCmd *cmd)
 
static uint16_t zns_zone_append (FemuCtrl *n, NvmeRequest *req)
 
static uint16_t zns_check_dulbe (NvmeNamespace *ns, uint64_t slba, uint32_t nlb)
 
static uint16_t zns_read (FemuCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t zns_write (FemuCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req)
 
static uint16_t zns_io_cmd (FemuCtrl *n, NvmeNamespace *ns, NvmeCmd *cmd, NvmeRequest *req)
 
static void zns_set_ctrl_str (FemuCtrl *n)
 
static void zns_set_ctrl (FemuCtrl *n)
 
static int zns_init_zone_cap (FemuCtrl *n)
 
static int zns_start_ctrl (FemuCtrl *n)
 
static void zns_init (FemuCtrl *n, Error **errp)
 
static void zns_exit (FemuCtrl *n)
 
int nvme_register_znssd (FemuCtrl *n)
 

宏定义说明

◆ MIN_DISCARD_GRANULARITY

#define MIN_DISCARD_GRANULARITY   (4 * KiB)

◆ NVME_DEFAULT_MAX_AZ_SIZE

#define NVME_DEFAULT_MAX_AZ_SIZE   (128 * KiB)

◆ NVME_DEFAULT_ZONE_SIZE

#define NVME_DEFAULT_ZONE_SIZE   (128 * MiB)

类型定义说明

◆ op_handler_t

typedef uint16_t(* op_handler_t) (NvmeNamespace *, NvmeZone *, NvmeZoneState, NvmeRequest *)

枚举类型说明

◆ NvmeZoneProcessingMask

枚举值
NVME_PROC_CURRENT_ZONE 
NVME_PROC_OPENED_ZONES 
NVME_PROC_CLOSED_ZONES 
NVME_PROC_READ_ONLY_ZONES 
NVME_PROC_FULL_ZONES 

函数说明

◆ nvme_csi_has_nvm_support()

static bool nvme_csi_has_nvm_support ( NvmeNamespace ns)
inlinestatic

◆ nvme_register_znssd()

int nvme_register_znssd ( FemuCtrl n)
函数调用图:
这是这个函数的调用关系图:

◆ zns_admin_cmd()

static uint16_t zns_admin_cmd ( FemuCtrl n,
NvmeCmd cmd 
)
static
这是这个函数的调用关系图:

◆ zns_advance_zone_wp()

static uint64_t zns_advance_zone_wp ( NvmeNamespace ns,
NvmeZone zone,
uint32_t  nlb 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_aio_zone_reset_cb()

static void zns_aio_zone_reset_cb ( NvmeRequest req,
NvmeZone zone 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_aor_check()

static int zns_aor_check ( NvmeNamespace ns,
uint32_t  act,
uint32_t  opn 
)
static
这是这个函数的调用关系图:

◆ zns_assign_zone_state()

static void zns_assign_zone_state ( NvmeNamespace ns,
NvmeZone zone,
NvmeZoneState  state 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_auto_open_zone()

static uint16_t zns_auto_open_zone ( NvmeNamespace ns,
NvmeZone zone 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_auto_transition_zone()

static void zns_auto_transition_zone ( NvmeNamespace ns)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_bulk_proc_zone()

static uint16_t zns_bulk_proc_zone ( NvmeNamespace ns,
NvmeZone zone,
enum NvmeZoneProcessingMask  proc_mask,
op_handler_t  op_hndlr,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_check_bounds()

static uint16_t zns_check_bounds ( NvmeNamespace ns,
uint64_t  slba,
uint32_t  nlb 
)
inlinestatic
这是这个函数的调用关系图:

◆ zns_check_dulbe()

static uint16_t zns_check_dulbe ( NvmeNamespace ns,
uint64_t  slba,
uint32_t  nlb 
)
static
这是这个函数的调用关系图:

◆ zns_check_zone_read()

static uint16_t zns_check_zone_read ( NvmeNamespace ns,
uint64_t  slba,
uint32_t  nlb 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_check_zone_state_for_read()

static uint16_t zns_check_zone_state_for_read ( NvmeZone zone)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_check_zone_state_for_write()

static uint16_t zns_check_zone_state_for_write ( NvmeZone zone)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_check_zone_write()

static uint16_t zns_check_zone_write ( FemuCtrl n,
NvmeNamespace ns,
NvmeZone zone,
uint64_t  slba,
uint32_t  nlb,
bool  append 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_clear_zone()

static void zns_clear_zone ( NvmeNamespace ns,
NvmeZone zone 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_close_zone()

static uint16_t zns_close_zone ( NvmeNamespace ns,
NvmeZone zone,
NvmeZoneState  state,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_do_write()

static uint16_t zns_do_write ( FemuCtrl n,
NvmeRequest req,
bool  append,
bool  wrz 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_do_zone_op()

static uint16_t zns_do_zone_op ( NvmeNamespace ns,
NvmeZone zone,
enum NvmeZoneProcessingMask  proc_mask,
op_handler_t  op_hndlr,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_exit()

static void zns_exit ( FemuCtrl n)
static
这是这个函数的调用关系图:

◆ zns_finalize_zoned_write()

static void zns_finalize_zoned_write ( NvmeNamespace ns,
NvmeRequest req,
bool  failed 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_finish_zone()

static uint16_t zns_finish_zone ( NvmeNamespace ns,
NvmeZone zone,
NvmeZoneState  state,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_get_mgmt_zone_slba_idx()

static uint16_t zns_get_mgmt_zone_slba_idx ( FemuCtrl n,
NvmeCmd c,
uint64_t *  slba,
uint32_t *  zone_idx 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_get_zone_by_slba()

static NvmeZone* zns_get_zone_by_slba ( NvmeNamespace ns,
uint64_t  slba 
)
inlinestatic
函数调用图:
这是这个函数的调用关系图:

◆ zns_init()

static void zns_init ( FemuCtrl n,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_init_zone_cap()

static int zns_init_zone_cap ( FemuCtrl n)
static
这是这个函数的调用关系图:

◆ zns_init_zone_geometry()

static int zns_init_zone_geometry ( NvmeNamespace ns,
Error **  errp 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_init_zone_identify()

static void zns_init_zone_identify ( FemuCtrl n,
NvmeNamespace ns,
int  lba_index 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_init_zoned_state()

static void zns_init_zoned_state ( NvmeNamespace ns)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_io_cmd()

static uint16_t zns_io_cmd ( FemuCtrl n,
NvmeNamespace ns,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_map_dptr()

static uint16_t zns_map_dptr ( FemuCtrl n,
size_t  len,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_ns_cleanup()

void zns_ns_cleanup ( NvmeNamespace ns)

◆ zns_ns_shutdown()

void zns_ns_shutdown ( NvmeNamespace ns)
函数调用图:

◆ zns_offline_zone()

static uint16_t zns_offline_zone ( NvmeNamespace ns,
NvmeZone zone,
NvmeZoneState  state,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_open_zone()

static uint16_t zns_open_zone ( NvmeNamespace ns,
NvmeZone zone,
NvmeZoneState  state,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_read()

static uint16_t zns_read ( FemuCtrl n,
NvmeNamespace ns,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_reset_zone()

static uint16_t zns_reset_zone ( NvmeNamespace ns,
NvmeZone zone,
NvmeZoneState  state,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_set_ctrl()

static void zns_set_ctrl ( FemuCtrl n)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_set_ctrl_str()

static void zns_set_ctrl_str ( FemuCtrl n)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_set_zd_ext()

static uint16_t zns_set_zd_ext ( NvmeNamespace ns,
NvmeZone zone 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_start_ctrl()

static int zns_start_ctrl ( FemuCtrl n)
static
这是这个函数的调用关系图:

◆ zns_write()

static uint16_t zns_write ( FemuCtrl n,
NvmeNamespace ns,
NvmeCmd cmd,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_zone_append()

static uint16_t zns_zone_append ( FemuCtrl n,
NvmeRequest req 
)
inlinestatic
函数调用图:
这是这个函数的调用关系图:

◆ zns_zone_idx()

static uint32_t zns_zone_idx ( NvmeNamespace ns,
uint64_t  slba 
)
inlinestatic
这是这个函数的调用关系图:

◆ zns_zone_matches_filter()

static bool zns_zone_matches_filter ( uint32_t  zafs,
NvmeZone zl 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_zone_mgmt_recv()

static uint16_t zns_zone_mgmt_recv ( FemuCtrl n,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_zone_mgmt_send()

static uint16_t zns_zone_mgmt_send ( FemuCtrl n,
NvmeRequest req 
)
static
函数调用图:
这是这个函数的调用关系图:

◆ zns_zoned_ns_shutdown()

static void zns_zoned_ns_shutdown ( NvmeNamespace ns)
static
函数调用图:
这是这个函数的调用关系图: