summaryrefslogtreecommitdiff
path: root/drivers/nvdimm
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/nvdimm')
-rw-r--r--drivers/nvdimm/claim.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/drivers/nvdimm/claim.c b/drivers/nvdimm/claim.c
index 4638b9ea5229..3376da1fb263 100644
--- a/drivers/nvdimm/claim.c
+++ b/drivers/nvdimm/claim.c
@@ -242,29 +242,26 @@ static int nsio_rw_bytes(struct nd_namespace_common *ndns,
if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align)))
return -EIO;
return memcpy_from_pmem(buf, nsio->addr + offset, size);
- } else {
-
- if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align))) {
- if (IS_ALIGNED(offset, 512) && IS_ALIGNED(size, 512)) {
- long cleared;
-
- cleared = nvdimm_clear_poison(&ndns->dev,
- offset, size);
- if (cleared != size) {
- size = cleared;
- rc = -EIO;
- }
-
- badblocks_clear(&nsio->bb, sector,
- cleared >> 9);
- } else
+ }
+
+ if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align))) {
+ if (IS_ALIGNED(offset, 512) && IS_ALIGNED(size, 512)) {
+ long cleared;
+
+ cleared = nvdimm_clear_poison(&ndns->dev, offset, size);
+ if (cleared != size) {
+ size = cleared;
rc = -EIO;
- }
+ }
- memcpy_to_pmem(nsio->addr + offset, buf, size);
- nvdimm_flush(to_nd_region(ndns->dev.parent));
+ badblocks_clear(&nsio->bb, sector, cleared >> 9);
+ } else
+ rc = -EIO;
}
+ memcpy_to_pmem(nsio->addr + offset, buf, size);
+ nvdimm_flush(to_nd_region(ndns->dev.parent));
+
return rc;
}