Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78727137 authored by Dan Williams's avatar Dan Williams
Browse files

nfit, address-range-scrub: fix scrub in-progress reporting



There is a small window whereby ARS scan requests can schedule work that
userspace will miss when polling scrub_show. Hold the init_mutex lock
over calls to report the status to close this potential escape. Also,
make sure that requests to cancel the ARS workqueue are treated as an
idle event.

Cc: <stable@vger.kernel.org>
Cc: Vishal Verma <vishal.l.verma@intel.com>
Fixes: 37b137ff ("nfit, libnvdimm: allow an ARS scrub...")
Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 8d0d8ed3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1249,8 +1249,11 @@ static ssize_t scrub_show(struct device *dev,
	if (nd_desc) {
		struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc);

		mutex_lock(&acpi_desc->init_mutex);
		rc = sprintf(buf, "%d%s", acpi_desc->scrub_count,
				(work_busy(&acpi_desc->work)) ? "+\n" : "\n");
				work_busy(&acpi_desc->work)
				&& !acpi_desc->cancel ? "+\n" : "\n");
		mutex_unlock(&acpi_desc->init_mutex);
	}
	device_unlock(dev);
	return rc;