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_io.h"
|
||||||
#include "ftl_trace.h"
|
#include "ftl_trace.h"
|
||||||
|
|
||||||
|
#ifdef SPDK_CONFIG_PMDK
|
||||||
|
#include "libpmem.h"
|
||||||
|
#endif /* SPDK_CONFIG_PMDK */
|
||||||
|
|
||||||
struct spdk_ftl_dev;
|
struct spdk_ftl_dev;
|
||||||
struct ftl_band;
|
struct ftl_band;
|
||||||
struct ftl_zone;
|
struct ftl_zone;
|
||||||
@ -376,6 +380,18 @@ ftl_addr_packed(const struct spdk_ftl_dev *dev)
|
|||||||
return dev->addr_len < 32;
|
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
|
static inline int
|
||||||
ftl_addr_invalid(struct ftl_addr addr)
|
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 {
|
} else {
|
||||||
_ftl_l2p_set64(dev->l2p, lba, addr.offset);
|
_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
|
static inline struct ftl_addr
|
||||||
|
Loading…
Reference in New Issue
Block a user