From f343d7e87946c1d9d255385e09e9d55ef6816cd3 Mon Sep 17 00:00:00 2001 From: Jan Kara Date: Tue, 27 Sep 2016 16:35:45 +0200 Subject: [PATCH] ext2: Unmap metadata when zeroing blocks When zeroing blocks for DAX allocations, we also have to unmap aliases in the block device mappings. Otherwise writeback can overwrite zeros with stale data from block device page cache. Signed-off-by: Jan Kara --- fs/ext2/inode.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index d5c7d09919f31..303ae2bb269a2 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -733,6 +733,16 @@ static int ext2_get_blocks(struct inode *inode, } if (IS_DAX(inode)) { + int i; + + /* + * We must unmap blocks before zeroing so that writeback cannot + * overwrite zeros with stale data from block device page cache. + */ + for (i = 0; i < count; i++) { + unmap_underlying_metadata(inode->i_sb->s_bdev, + le32_to_cpu(chain[depth-1].key) + i); + } /* * block must be initialised before we put it in the tree * so that it's not found by another thread before it's -- 2.39.5