Provided by: libpmem2-dev_1.13.1-1.1ubuntu2_amd64 bug

NAME

       pmem2_deep_flush() - highly reliable persistent memory synchronization

SYNOPSIS

              #include <libpmem2.h>

              int pmem2_deep_flush(struct pmem2_map *map, void *ptr, size_t size)

DESCRIPTION

       The  pmem2_deep_flush() function forces any changes in the range [ptr, ptr+len) from the map to be stored
       durably in the most reliable persistence domain available to software.  In particular, on supported plat‐
       forms, this enables the code not to rely on automatic cache or WPQ (write pending queue) flush  on  power
       failure (ADR/eADR).

       Since  this  operation  is usually much more expensive than regular persist, it should be used sparingly.
       Typically, the application should only ever use this function as a precaution against hardware  failures,
       e.g.,  in  code  that  detects silent data corruption caused by unsafe shutdown (see more in libpmem2_un‐
       safe_shutdown(7)).

RETURN VALUE

       The pmem2_deep_flush() function returns 0 on success or an error code on failure.

ERRORS

       The pmem2_deep_flush() can fail with the following errors:

       • PMEM2_E_DEEP_FLUSH_RANGE - the provided flush range is not a subset of the map’s address space.

       • PMEM2_E_DAX_REGION_NOT_FOUND - the underlying device region id cannot be detected.

       • -errno set by failing msync(2), while trying to perform a deep flush on a regular DAX volume.

SEE ALSO

       msync(2), pmem2_get_drain_fn(3), pmem2_get_persist_fn(3) pmem2_map(3), libpmem2(7) and <http://pmem.io>