On Sun, 2017-04-30 at 05:39 -0700, Dan Williams wrote: > Toshi noticed that the new support for a region-level badblocks > missed the case where errors are cleared due to BTT I/O. > > An initial attempt to fix this ran into a "sleeping while atomic" > warning due to taking the nvdimm_bus_lock() in the BTT I/O path to > satisfy the locking requirements of __nvdimm_bus_badblocks_clear(). > However, that lock is not needed since we are not acting any data > that is subject to change due to a change of state of the bus / > region. The badblocks instance has its own internal lock to handle > mutations of the error list. > > So, to make it clear that we are just acting on region devices and > don't need the lock rename __nvdimm_bus_badblocks_clear() to > nvdimm_clear_badblocks_regions(). Eliminate the lock and consolidate > all routines in drivers/nvdimm/bus.c. Also, make some cleanups to > remove unnecessary casts, make the calling convention of > nvdimm_clear_badblocks_regions() clearer by replacing struct resource > with the minimal struct clear_badblocks_context, and use the > DEVICE_ATTR macro. > > Cc: Dave Jiang <dave.ji...@intel.com> > Cc: Vishal Verma <vishal.l.ve...@intel.com> > Reported-by: Toshi Kani <toshi.k...@hpe.com> > Signed-off-by: Dan Williams <dan.j.willi...@intel.com>
Confirmed that the clear path to the region-level badblocks works with the btt workaround and ndctl fix. Tested-by: Toshi Kani <toshi.k...@hpe.com> Thanks! -Toshi