summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorMatthew Wilcox2018-11-27 22:16:33 +0100
committerGreg Kroah-Hartman2018-12-17 09:24:41 +0100
commit384f18115267c0e52748137d6720c81b1cf220e1 (patch)
treee53a5f6da9edd113e80328e544e7e064f8e6bbf2 /fs
parentflexfiles: enforce per-mirror stateid only for v4 DSes (diff)
downloadkernel-qcow2-linux-384f18115267c0e52748137d6720c81b1cf220e1.tar.gz
kernel-qcow2-linux-384f18115267c0e52748137d6720c81b1cf220e1.tar.xz
kernel-qcow2-linux-384f18115267c0e52748137d6720c81b1cf220e1.zip
dax: Check page->mapping isn't NULL
commit c93db7bb6ef3251e0ea48ade311d3e9942748e1c upstream. If we race with inode destroy, it's possible for page->mapping to be NULL before we even enter this routine, as well as after having slept waiting for the dax entry to become unlocked. Fixes: c2a7d2a11552 ("filesystem-dax: Introduce dax_lock_mapping_entry()") Cc: <stable@vger.kernel.org> Reported-by: Jan Kara <jack@suse.cz> Signed-off-by: Matthew Wilcox <willy@infradead.org> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/dax.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/dax.c b/fs/dax.c
index b0cd1364c68f..3a2682a6c832 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -423,7 +423,7 @@ bool dax_lock_mapping_entry(struct page *page)
for (;;) {
mapping = READ_ONCE(page->mapping);
- if (!dax_mapping(mapping))
+ if (!mapping || !dax_mapping(mapping))
break;
/*