diff options
Diffstat (limited to 'mm/truncate.c')
| -rw-r--r-- | mm/truncate.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/mm/truncate.c b/mm/truncate.c index 97a5cf0d735c..c2d7deae28bb 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -682,6 +682,17 @@ int invalidate_inode_pages2_range(struct address_space *mapping, cond_resched(); index++; } + /* + * For DAX we invalidate page tables after invalidating radix tree. We + * could invalidate page tables while invalidating each entry however + * that would be expensive. And doing range unmapping before doesn't + * work as we have no cheap way to find whether radix tree entry didn't + * get remapped later. + */ + if (dax_mapping(mapping)) { + unmap_mapping_range(mapping, (loff_t)start << PAGE_SHIFT, + (loff_t)(end - start + 1) << PAGE_SHIFT, 0); + } cleancache_invalidate_inode(mapping); return ret; } |
