• Vishal Verma's avatar
    libnvdimm: clear the internal poison_list when clearing badblocks · 13c06fcc
    Vishal Verma authored
    commit e046114a upstream.
    
    nvdimm_clear_poison cleared the user-visible badblocks, and sent
    commands to the NVDIMM to clear the areas marked as 'poison', but it
    neglected to clear the same areas from the internal poison_list which is
    used to marshal ARS results before sorting them by namespace. As a
    result, once on-demand ARS functionality was added:
    
    37b137ff nfit, libnvdimm: allow an ARS scrub to be triggered on demand
    
    A scrub triggered from either sysfs or an MCE was found to be adding
    stale entries that had been cleared from gendisk->badblocks, but were
    still present in nvdimm_bus->poison_list. Additionally, the stale entries
    could be triggered into producing stale disk->badblocks by simply disabling
    and re-enabling the namespace or region.
    
    This adds the missing step of clearing poison_list entries when clearing
    poison, so that it is always in sync with badblocks.
    
    Fixes: 37b137ff ("nfit, libnvdimm: allow an ARS scrub to be triggered on demand")
    Signed-off-by: default avatarVishal Verma <vishal.l.verma@intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    13c06fcc
core.c 18.1 KB