libnvdimm: fix potential deadlock while clearing errors
authorVishal Verma <vishal.l.verma@intel.com>
Thu, 31 Aug 2017 01:36:02 +0000 (19:36 -0600)
committerDan Williams <dan.j.williams@intel.com>
Thu, 31 Aug 2017 22:05:10 +0000 (15:05 -0700)
commit0930a750c35be3c2f5aacebc0d20ddeaf727c208
tree9fdf04c2bea121e8d9405e816d1cadfef4389b8c
parent75892004508260df72ed3d319f10d2acd516220e
libnvdimm: fix potential deadlock while clearing errors

With the ACPI NFIT 'DSM' methods, acpi can be called from IO paths.
Specifically, the DSM to clear media errors is called during writes, so
that we can provide a writes-fix-errors model.

However it is easy to imagine a scenario like:
 -> write through the nvdimm driver
   -> acpi allocation
     -> writeback, causes more IO through the nvdimm driver
       -> deadlock

Fix this by using memalloc_noio_{save,restore}, which sets the GFP_NOIO
flag for the current scope when issuing commands/IOs that are expected
to clear errors.

Cc: <linux-acpi@vger.kernel.org>
Cc: <linux-nvdimm@lists.01.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Robert Moore <robert.moore@intel.com>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/nvdimm/bus.c