diff options
-rw-r--r-- | fs/ext4/crypto.c | 6 | ||||
-rw-r--r-- | fs/ext4/ext4.h | 5 | ||||
-rw-r--r-- | fs/ext4/extents.c | 12 | ||||
-rw-r--r-- | fs/ext4/inode.c | 15 |
4 files changed, 23 insertions, 15 deletions
diff --git a/fs/ext4/crypto.c b/fs/ext4/crypto.c index 1a0835073663..c8021208a7eb 100644 --- a/fs/ext4/crypto.c +++ b/fs/ext4/crypto.c | |||
@@ -384,14 +384,12 @@ int ext4_decrypt(struct page *page) | |||
384 | EXT4_DECRYPT, page->index, page, page); | 384 | EXT4_DECRYPT, page->index, page, page); |
385 | } | 385 | } |
386 | 386 | ||
387 | int ext4_encrypted_zeroout(struct inode *inode, struct ext4_extent *ex) | 387 | int ext4_encrypted_zeroout(struct inode *inode, ext4_lblk_t lblk, |
388 | ext4_fsblk_t pblk, ext4_lblk_t len) | ||
388 | { | 389 | { |
389 | struct ext4_crypto_ctx *ctx; | 390 | struct ext4_crypto_ctx *ctx; |
390 | struct page *ciphertext_page = NULL; | 391 | struct page *ciphertext_page = NULL; |
391 | struct bio *bio; | 392 | struct bio *bio; |
392 | ext4_lblk_t lblk = le32_to_cpu(ex->ee_block); | ||
393 | ext4_fsblk_t pblk = ext4_ext_pblock(ex); | ||
394 | unsigned int len = ext4_ext_get_actual_len(ex); | ||
395 | int ret, err = 0; | 393 | int ret, err = 0; |
396 | 394 | ||
397 | #if 0 | 395 | #if 0 |
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 1008caf3136d..ffc6ab000c78 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -2241,7 +2241,8 @@ void ext4_restore_control_page(struct page *data_page); | |||
2241 | struct page *ext4_encrypt(struct inode *inode, | 2241 | struct page *ext4_encrypt(struct inode *inode, |
2242 | struct page *plaintext_page); | 2242 | struct page *plaintext_page); |
2243 | int ext4_decrypt(struct page *page); | 2243 | int ext4_decrypt(struct page *page); |
2244 | int ext4_encrypted_zeroout(struct inode *inode, struct ext4_extent *ex); | 2244 | int ext4_encrypted_zeroout(struct inode *inode, ext4_lblk_t lblk, |
2245 | ext4_fsblk_t pblk, ext4_lblk_t len); | ||
2245 | 2246 | ||
2246 | #ifdef CONFIG_EXT4_FS_ENCRYPTION | 2247 | #ifdef CONFIG_EXT4_FS_ENCRYPTION |
2247 | int ext4_init_crypto(void); | 2248 | int ext4_init_crypto(void); |
@@ -2495,6 +2496,8 @@ extern int ext4_filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf); | |||
2495 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); | 2496 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); |
2496 | extern void ext4_da_update_reserve_space(struct inode *inode, | 2497 | extern void ext4_da_update_reserve_space(struct inode *inode, |
2497 | int used, int quota_claim); | 2498 | int used, int quota_claim); |
2499 | extern int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk, | ||
2500 | ext4_fsblk_t pblk, ext4_lblk_t len); | ||
2498 | 2501 | ||
2499 | /* indirect.c */ | 2502 | /* indirect.c */ |
2500 | extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, | 2503 | extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, |
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 3578b25fccfd..867e98b6bc6c 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c | |||
@@ -3119,19 +3119,11 @@ static int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex) | |||
3119 | { | 3119 | { |
3120 | ext4_fsblk_t ee_pblock; | 3120 | ext4_fsblk_t ee_pblock; |
3121 | unsigned int ee_len; | 3121 | unsigned int ee_len; |
3122 | int ret; | ||
3123 | 3122 | ||
3124 | ee_len = ext4_ext_get_actual_len(ex); | 3123 | ee_len = ext4_ext_get_actual_len(ex); |
3125 | ee_pblock = ext4_ext_pblock(ex); | 3124 | ee_pblock = ext4_ext_pblock(ex); |
3126 | 3125 | return ext4_issue_zeroout(inode, le32_to_cpu(ex->ee_block), ee_pblock, | |
3127 | if (ext4_encrypted_inode(inode)) | 3126 | ee_len); |
3128 | return ext4_encrypted_zeroout(inode, ex); | ||
3129 | |||
3130 | ret = sb_issue_zeroout(inode->i_sb, ee_pblock, ee_len, GFP_NOFS); | ||
3131 | if (ret > 0) | ||
3132 | ret = 0; | ||
3133 | |||
3134 | return ret; | ||
3135 | } | 3127 | } |
3136 | 3128 | ||
3137 | /* | 3129 | /* |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index f100c1780e03..0c9a5ee3e106 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -383,6 +383,21 @@ static int __check_block_validity(struct inode *inode, const char *func, | |||
383 | return 0; | 383 | return 0; |
384 | } | 384 | } |
385 | 385 | ||
386 | int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk, | ||
387 | ext4_lblk_t len) | ||
388 | { | ||
389 | int ret; | ||
390 | |||
391 | if (ext4_encrypted_inode(inode)) | ||
392 | return ext4_encrypted_zeroout(inode, lblk, pblk, len); | ||
393 | |||
394 | ret = sb_issue_zeroout(inode->i_sb, pblk, len, GFP_NOFS); | ||
395 | if (ret > 0) | ||
396 | ret = 0; | ||
397 | |||
398 | return ret; | ||
399 | } | ||
400 | |||
386 | #define check_block_validity(inode, map) \ | 401 | #define check_block_validity(inode, map) \ |
387 | __check_block_validity((inode), __func__, __LINE__, (map)) | 402 | __check_block_validity((inode), __func__, __LINE__, (map)) |
388 | 403 | ||