lkml.org 
[lkml]   [2017]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] libnvdimm: clear region badblock in nvdimm_clear_poison()
    Date
    Badblocks are tracked at both region and device levels.
    pmem_clear_poison() and nsio_rw_bytes() call nvdimm_clear_poison()
    and then badblocks_clear() to clear badblocks at the device level.
    However, it does not update badblocks at the region level, which
    makes them inconsistent.

    Change nvdimm_clear_poison() to update backblocks at the region
    level to keep them consistent.

    Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    ---
    Based on 'libnvdimm-for-next'.
    ---
    drivers/nvdimm/bus.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
    index 43ddfd4..998332d 100644
    --- a/drivers/nvdimm/bus.c
    +++ b/drivers/nvdimm/bus.c
    @@ -179,6 +179,7 @@ long nvdimm_clear_poison(struct device *dev, phys_addr_t phys,
    struct nvdimm_bus_descriptor *nd_desc;
    struct nd_cmd_clear_error clear_err;
    struct nd_cmd_ars_cap ars_cap;
    + struct resource res;
    u32 clear_err_unit, mask;
    int cmd_rc, rc;

    @@ -222,6 +223,14 @@ long nvdimm_clear_poison(struct device *dev, phys_addr_t phys,
    if (clear_err.cleared > 0)
    nvdimm_forget_poison(nvdimm_bus, phys, clear_err.cleared);

    + if (clear_err.cleared > 0 && clear_err.cleared / 512) {
    + nvdimm_bus_lock(&nvdimm_bus->dev);
    + res.start = phys;
    + res.end = phys + clear_err.cleared - 1;
    + __nvdimm_bus_badblocks_clear(nvdimm_bus, &res);
    + nvdimm_bus_unlock(&nvdimm_bus->dev);
    + }
    +
    return clear_err.cleared;
    }
    EXPORT_SYMBOL_GPL(nvdimm_clear_poison);
    \
     
     \ /
      Last update: 2017-04-28 01:00    [W:3.069 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site