acpi, nfit: Fix scrub idle detection
authorDan Williams <dan.j.williams@intel.com>
Thu, 5 Jul 2018 21:58:49 +0000 (14:58 -0700)
committerDan Williams <dan.j.williams@intel.com>
Fri, 6 Jul 2018 02:33:53 +0000 (19:33 -0700)
commit33cc2c9667561b224215e6dfb5bf98e8fa17914e
tree64f01a6dcb817b41fc694dc2a31999650c91a3c1
parent1273c253c32b9a073a4d8921ed079177ccc7c8af
acpi, nfit: Fix scrub idle detection

The notification of scrub completion happens within the scrub workqueue.
That can clearly race someone running scrub_show() and work_busy()
before the workqueue has a chance to flush the recently completed work.
Add a flag to reliably indicate the idle vs busy state. Without this
change applications using poll(2) to wait for scrub-completion may
falsely wakeup and read ARS as being busy even though the thread is
going idle and then hang indefinitely.

Fixes: bc6ba8085842 ("nfit, address-range-scrub: rework and simplify ARS...")
Cc: <stable@vger.kernel.org>
Reported-by: Vishal Verma <vishal.l.verma@intel.com>
Tested-by: Vishal Verma <vishal.l.verma@intel.com>
Reported-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/acpi/nfit/core.c
drivers/acpi/nfit/nfit.h