lib/ftl: Make each ftl_l2p_set persistent when using pmem device for l2p
Signed-off-by: Maciej Szczepaniak <maciej.szczepaniak@intel.com> Change-Id: Ic176988664dc74d5c1d321914d7665516ba6704d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/911 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
12642633bf
commit
8b27fbba38
@ -49,6 +49,10 @@
|
||||
#include "ftl_io.h"
|
||||
#include "ftl_trace.h"
|
||||
|
||||
#ifdef SPDK_CONFIG_PMDK
|
||||
#include "libpmem.h"
|
||||
#endif /* SPDK_CONFIG_PMDK */
|
||||
|
||||
struct spdk_ftl_dev;
|
||||
struct ftl_band;
|
||||
struct ftl_zone;
|
||||
@ -376,6 +380,18 @@ ftl_addr_packed(const struct spdk_ftl_dev *dev)
|
||||
return dev->addr_len < 32;
|
||||
}
|
||||
|
||||
static inline void
|
||||
ftl_l2p_lba_persist(const struct spdk_ftl_dev *dev, uint64_t lba)
|
||||
{
|
||||
#ifdef SPDK_CONFIG_PMDK
|
||||
size_t ftl_addr_size = ftl_addr_packed(dev) ? 4 : 8;
|
||||
pmem_persist((char *)dev->l2p + (lba * ftl_addr_size), ftl_addr_size);
|
||||
#else /* SPDK_CONFIG_PMDK */
|
||||
SPDK_ERRLOG("Libpmem not available, cannot flush l2p to pmem\n");
|
||||
assert(0);
|
||||
#endif /* SPDK_CONFIG_PMDK */
|
||||
}
|
||||
|
||||
static inline int
|
||||
ftl_addr_invalid(struct ftl_addr addr)
|
||||
{
|
||||
@ -453,6 +469,10 @@ ftl_l2p_set(struct spdk_ftl_dev *dev, uint64_t lba, struct ftl_addr addr)
|
||||
} else {
|
||||
_ftl_l2p_set64(dev->l2p, lba, addr.offset);
|
||||
}
|
||||
|
||||
if (dev->l2p_pmem_len != 0) {
|
||||
ftl_l2p_lba_persist(dev, lba);
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct ftl_addr
|
||||
|
Loading…
Reference in New Issue
Block a user