summaryrefslogtreecommitdiffstats
path: root/drivers/nvdimm/pmem.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2016-07-09 09:12:52 +0200
committerDan Williams <dan.j.williams@intel.com>2016-07-13 00:13:48 +0200
commit476f848aaee466fd5d74f123fa652e757f2baeba (patch)
treed84cdd4fdb50252dfc5d1e2916b665d4f5570b76 /drivers/nvdimm/pmem.c
parentlibnvdimm, pmem: use REQ_FUA, REQ_FLUSH for nvdimm_flush() (diff)
downloadlinux-476f848aaee466fd5d74f123fa652e757f2baeba.tar.xz
linux-476f848aaee466fd5d74f123fa652e757f2baeba.zip
libnvdimm, pmem: flush posted-write queues on shutdown
Commit writes to media on system shutdown or pmem driver unload. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/nvdimm/pmem.c')
-rw-r--r--drivers/nvdimm/pmem.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index 9d9c1beef020..8bfc6acc2e43 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -349,9 +349,16 @@ static int nd_pmem_remove(struct device *dev)
{
if (is_nd_btt(dev))
nvdimm_namespace_detach_btt(to_nd_btt(dev));
+ nvdimm_flush(to_nd_region(dev->parent));
+
return 0;
}
+static void nd_pmem_shutdown(struct device *dev)
+{
+ nvdimm_flush(to_nd_region(dev->parent));
+}
+
static void nd_pmem_notify(struct device *dev, enum nvdimm_event event)
{
struct pmem_device *pmem = dev_get_drvdata(dev);
@@ -391,6 +398,7 @@ static struct nd_device_driver nd_pmem_driver = {
.probe = nd_pmem_probe,
.remove = nd_pmem_remove,
.notify = nd_pmem_notify,
+ .shutdown = nd_pmem_shutdown,
.drv = {
.name = "nd_pmem",
},