summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ext4/crypto.c6
-rw-r--r--fs/ext4/ext4.h5
-rw-r--r--fs/ext4/extents.c12
-rw-r--r--fs/ext4/inode.c15
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
387int ext4_encrypted_zeroout(struct inode *inode, struct ext4_extent *ex) 387int 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);
2241struct page *ext4_encrypt(struct inode *inode, 2241struct page *ext4_encrypt(struct inode *inode,
2242 struct page *plaintext_page); 2242 struct page *plaintext_page);
2243int ext4_decrypt(struct page *page); 2243int ext4_decrypt(struct page *page);
2244int ext4_encrypted_zeroout(struct inode *inode, struct ext4_extent *ex); 2244int 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
2247int ext4_init_crypto(void); 2248int ext4_init_crypto(void);
@@ -2495,6 +2496,8 @@ extern int ext4_filemap_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
2495extern qsize_t *ext4_get_reserved_space(struct inode *inode); 2496extern qsize_t *ext4_get_reserved_space(struct inode *inode);
2496extern void ext4_da_update_reserve_space(struct inode *inode, 2497extern void ext4_da_update_reserve_space(struct inode *inode,
2497 int used, int quota_claim); 2498 int used, int quota_claim);
2499extern 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 */
2500extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, 2503extern 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
386int 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