diff options
author | Ross Zwisler <ross.zwisler@linux.intel.com> | 2015-09-16 16:52:21 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2015-09-17 11:49:28 -0400 |
commit | ba8fe0f85e15d047686caf8a42463b592c63c98c (patch) | |
tree | 0bf1aaad533b1960f6aea534e879f74043e70cf0 | |
parent | 4ca8b57a0af145f4e791f21dbca6ad789da9ee8b (diff) |
pmem: add proper fencing to pmem_rw_page()
pmem_rw_page() needs to call wmb_pmem() on writes to make sure that the
newly written data is durable. This flow was added to pmem_rw_bytes()
and pmem_make_request() with this commit:
commit 61031952f4c8 ("arch, x86: pmem api for ensuring durability of
persistent memory updates")
...the pmem_rw_page() path was missed.
Cc: <stable@vger.kernel.org>
Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r-- | drivers/nvdimm/pmem.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index b9525385c0dc..0ba6a978f227 100644 --- a/drivers/nvdimm/pmem.c +++ b/drivers/nvdimm/pmem.c | |||
@@ -92,6 +92,8 @@ static int pmem_rw_page(struct block_device *bdev, sector_t sector, | |||
92 | struct pmem_device *pmem = bdev->bd_disk->private_data; | 92 | struct pmem_device *pmem = bdev->bd_disk->private_data; |
93 | 93 | ||
94 | pmem_do_bvec(pmem, page, PAGE_CACHE_SIZE, 0, rw, sector); | 94 | pmem_do_bvec(pmem, page, PAGE_CACHE_SIZE, 0, rw, sector); |
95 | if (rw & WRITE) | ||
96 | wmb_pmem(); | ||
95 | page_endio(page, rw & WRITE, 0); | 97 | page_endio(page, rw & WRITE, 0); |
96 | 98 | ||
97 | return 0; | 99 | return 0; |