ext4: decrypt only the needed block in __ext4_block_zero_page_range()

In __ext4_block_zero_page_range(), only decrypt the block that actually
needs to be decrypted, rather than assuming blocksize == PAGE_SIZE and
decrypting the whole page.

This is in preparation for allowing encryption on ext4 filesystems with
blocksize != PAGE_SIZE.

Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com>
(EB: rebase onto previous changes, improve the commit message, and use
 bh_offset())
Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
Chandan Rajendra 2019-05-20 09:29:51 -07:00 committed by Eric Biggers
parent 0b578f358a
commit ec39a36867
1 changed files with 1 additions and 2 deletions

View File

@ -4075,9 +4075,8 @@ static int __ext4_block_zero_page_range(handle_t *handle,
if (S_ISREG(inode->i_mode) && IS_ENCRYPTED(inode)) { if (S_ISREG(inode->i_mode) && IS_ENCRYPTED(inode)) {
/* We expect the key to be set. */ /* We expect the key to be set. */
BUG_ON(!fscrypt_has_encryption_key(inode)); BUG_ON(!fscrypt_has_encryption_key(inode));
BUG_ON(blocksize != PAGE_SIZE);
WARN_ON_ONCE(fscrypt_decrypt_pagecache_blocks( WARN_ON_ONCE(fscrypt_decrypt_pagecache_blocks(
page, PAGE_SIZE, 0)); page, blocksize, bh_offset(bh)));
} }
} }
if (ext4_should_journal_data(inode)) { if (ext4_should_journal_data(inode)) {