From: Dave Jiang Date: Fri, 9 Sep 2016 16:10:08 +0000 (-0700) Subject: libnvdimm: allow legacy (e820) pmem region to clear bad blocks X-Git-Tag: v4.14-rc1~2510^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1e8b8d9619f9476e94f32eb20cab000d50d236aa;p=platform%2Fkernel%2Flinux-rpi.git libnvdimm: allow legacy (e820) pmem region to clear bad blocks Bad blocks can be injected via /sys/block/pmemN/badblocks. In a situation where legacy pmem is being used or a pmem region created by using memmap kernel parameter, the injected bad blocks are not cleared due to nvdimm_clear_poison() failing from lack of ndctl function pointer. In this case we need to just return as handled and allow the bad blocks to be cleared rather than fail. Reviewed-by: Vishal Verma Signed-off-by: Dave Jiang Signed-off-by: Dan Williams --- diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c index 458daf9..935866f 100644 --- a/drivers/nvdimm/bus.c +++ b/drivers/nvdimm/bus.c @@ -185,8 +185,12 @@ long nvdimm_clear_poison(struct device *dev, phys_addr_t phys, return -ENXIO; nd_desc = nvdimm_bus->nd_desc; + /* + * if ndctl does not exist, it's PMEM_LEGACY and + * we want to just pretend everything is handled. + */ if (!nd_desc->ndctl) - return -ENXIO; + return len; memset(&ars_cap, 0, sizeof(ars_cap)); ars_cap.address = phys;