In v3, dax recovery code path is independent of that of normal write. Competing dax recovery threads are serialized, racing read threads are guaranteed not overlapping with the recovery process. In this phase, the recovery granularity is page, future patch will explore recovery in finer granularity. Please refer to below discussions for more information: v2: https://lore.kernel.org/all/20211106011638.2613039-1-jane.chu@xxxxxxxxxx/ Disussions about marking poisoned page as 'np': https://lore.kernel.org/all/CAPcyv4hrXPb1tASBZUg-GgdVs0OOFKXMXLiHmktg_kFi7YBMyQ@xxxxxxxxxxxxxx/ Jane Chu (7): mce: fix set_mce_nospec to always unmap the whole page dax: introduce dax device flag DAXDEV_RECOVERY dm: make dm aware of target's DAXDEV_RECOVERY capability dax: add dax_recovery_write to dax_op and dm target type pmem: add pmem_recovery_write() dax op dax: add recovery_write to dax_iomap_iter in failure path pmem: fix pmem_do_write() avoid writing to 'np' page arch/x86/include/asm/set_memory.h | 17 ++--- arch/x86/kernel/cpu/mce/core.c | 6 +- arch/x86/mm/pat/set_memory.c | 8 ++- drivers/dax/super.c | 53 ++++++++++++++++ drivers/md/dm-linear.c | 13 ++++ drivers/md/dm-log-writes.c | 14 +++++ drivers/md/dm-stripe.c | 13 ++++ drivers/md/dm-table.c | 33 ++++++++++ drivers/md/dm.c | 27 ++++++++ drivers/nvdimm/pmem.c | 101 +++++++++++++++++++++++++++--- drivers/nvdimm/pmem.h | 1 + fs/dax.c | 25 +++++++- include/linux/dax.h | 9 +++ include/linux/device-mapper.h | 3 + include/linux/set_memory.h | 2 +- 15 files changed, 298 insertions(+), 27 deletions(-) -- 2.18.4