diff options
author | Matthew Wilcox <willy@infradead.org> | 2018-11-06 13:11:57 -0500 |
---|---|---|
committer | Matthew Wilcox <willy@infradead.org> | 2018-11-16 16:38:49 -0500 |
commit | 6d7cd8c1373746a93dc868ee9d38a82df78b38aa (patch) | |
tree | 9093681b9b452e62a95805b3e00c2c46eef3d50f /fs/dax.c | |
parent | 5404a7f1c21cfda061712bedf2d06cc0f6c755e9 (diff) | |
download | linux-6d7cd8c1373746a93dc868ee9d38a82df78b38aa.tar.gz linux-6d7cd8c1373746a93dc868ee9d38a82df78b38aa.tar.bz2 linux-6d7cd8c1373746a93dc868ee9d38a82df78b38aa.zip |
dax: Remove optimisation from dax_lock_mapping_entry
Skipping some of the revalidation after we sleep can lead to returning
a mapping which has already been freed. Just drop this optimisation.
Reported-by: Dan Williams <dan.j.williams@intel.com>
Fixes: 9f32d221301c ("dax: Convert dax_lock_mapping_entry to XArray")
Signed-off-by: Matthew Wilcox <willy@infradead.org>
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 7 |
1 files changed, 2 insertions, 5 deletions
@@ -383,11 +383,8 @@ bool dax_lock_mapping_entry(struct page *page) entry = xas_load(&xas); if (dax_is_locked(entry)) { entry = get_unlocked_entry(&xas); - /* Did the page move while we slept? */ - if (dax_to_pfn(entry) != page_to_pfn(page)) { - xas_unlock_irq(&xas); - continue; - } + xas_unlock_irq(&xas); + continue; } dax_lock_entry(&xas, entry); xas_unlock_irq(&xas); |