Message ID | 20191226161114.53606-1-ebiggers@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | ext4: re-enable extent zeroout optimization on encrypted files | expand |
On Thu, Dec 26, 2019 at 10:11:14AM -0600, Eric Biggers wrote: > From: Eric Biggers <ebiggers@google.com> > > For encrypted files, commit 36086d43f657 ("ext4 crypto: fix bugs in > ext4_encrypted_zeroout()") disabled the optimization where when a write > occurs to the middle of an unwritten extent, the head and/or tail of the > extent (when they aren't too large) are zeroed out, turned into an > initialized extent, and merged with the part being written to. This > optimization helps prevent fragmentation of the extent tree. > > However, disabling this optimization also made fscrypt_zeroout_range() > nearly impossible to test, as now it's only reachable via the very rare > case in ext4_split_extent_at() where allocating a new extent tree block > fails due to ENOSPC. 'gce-xfstests -c ext4/encrypt -g auto' doesn't > even hit this at all. > > It's preferable to avoid really rare cases that are hard to test. > > That commit also cited data corruption in xfstest generic/127 as a > reason to disable the extent zeroout optimization, but that's no longer > reproducible anymore. It also cited fscrypt_zeroout_range() having poor > performance, but I've written a patch to fix that. > > Therefore, re-enable the extent zeroout optimization on encrypted files. > > Signed-off-by: Eric Biggers <ebiggers@google.com> Thanks, applied. - Ted
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index dae66e8f0c3a..fee19c9f5fe3 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3718,9 +3718,6 @@ static int ext4_ext_convert_to_initialized(handle_t *handle, max_zeroout = sbi->s_extent_max_zeroout_kb >> (inode->i_sb->s_blocksize_bits - 10); - if (IS_ENCRYPTED(inode)) - max_zeroout = 0; - /* * five cases: * 1. split the extent into three extents.