diff options
| -rw-r--r-- | drivers/nvdimm/pmem.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index 42b3a8217073..24618431a14b 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c | |||
| @@ -47,7 +47,7 @@ static struct nd_region *to_region(struct pmem_device *pmem) | |||
| 47 | return to_nd_region(to_dev(pmem)->parent); | 47 | return to_nd_region(to_dev(pmem)->parent); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | static void pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset, | 50 | static int pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset, |
| 51 | unsigned int len) | 51 | unsigned int len) |
| 52 | { | 52 | { |
| 53 | struct device *dev = to_dev(pmem); | 53 | struct device *dev = to_dev(pmem); |
| @@ -62,8 +62,12 @@ static void pmem_clear_poison(struct pmem_device *pmem, phys_addr_t offset, | |||
| 62 | __func__, (unsigned long long) sector, | 62 | __func__, (unsigned long long) sector, |
| 63 | cleared / 512, cleared / 512 > 1 ? "s" : ""); | 63 | cleared / 512, cleared / 512 > 1 ? "s" : ""); |
| 64 | badblocks_clear(&pmem->bb, sector, cleared / 512); | 64 | badblocks_clear(&pmem->bb, sector, cleared / 512); |
| 65 | } else { | ||
| 66 | return -EIO; | ||
| 65 | } | 67 | } |
| 68 | |||
| 66 | invalidate_pmem(pmem->virt_addr + offset, len); | 69 | invalidate_pmem(pmem->virt_addr + offset, len); |
| 70 | return 0; | ||
| 67 | } | 71 | } |
| 68 | 72 | ||
| 69 | static void write_pmem(void *pmem_addr, struct page *page, | 73 | static void write_pmem(void *pmem_addr, struct page *page, |
| @@ -123,7 +127,7 @@ static int pmem_do_bvec(struct pmem_device *pmem, struct page *page, | |||
| 123 | flush_dcache_page(page); | 127 | flush_dcache_page(page); |
| 124 | write_pmem(pmem_addr, page, off, len); | 128 | write_pmem(pmem_addr, page, off, len); |
| 125 | if (unlikely(bad_pmem)) { | 129 | if (unlikely(bad_pmem)) { |
| 126 | pmem_clear_poison(pmem, pmem_off, len); | 130 | rc = pmem_clear_poison(pmem, pmem_off, len); |
| 127 | write_pmem(pmem_addr, page, off, len); | 131 | write_pmem(pmem_addr, page, off, len); |
| 128 | } | 132 | } |
| 129 | } | 133 | } |
