edit commit description
[ext4-patch-queue.git] / crypto-debugging-sb-page-zero-check
blob88bb3bbf9b0e7fc5dd7161928868780dc9a8566a
1 ext4 crypto: Debugging: SB zero check and zero page check
3 From: Michael Halcrow <mhalcrow@google.com>
5 ---
6  fs/ext4/crypto.c  | 14 ++++++++++++++
7  fs/ext4/extents.c |  2 ++
8  2 files changed, 16 insertions(+)
10 diff --git a/fs/ext4/crypto.c b/fs/ext4/crypto.c
11 index ead3111..e16170f 100644
12 --- a/fs/ext4/crypto.c
13 +++ b/fs/ext4/crypto.c
14 @@ -522,6 +522,19 @@ out:
15         return res;
16  }
18 +bool __ext4_debug_is_page_zero(struct page *page)
20 +       char *page_virt = kmap(page);
21 +       int is_not_zero = 0;
22 +       int i;
24 +       BUG_ON(!page_virt);
25 +       for (i = 0; i < PAGE_CACHE_SIZE; ++i)
26 +               is_not_zero |= page_virt[i];
27 +       kunmap(page);
28 +       return !is_not_zero;
31  /**
32   * ext4_decrypt() - Decrypts a page in-place
33   * @ctx:  The encryption context.
34 @@ -538,6 +551,7 @@ int ext4_decrypt(struct ext4_crypto_ctx *ctx, struct page *page)
35         int res = 0;
37         BUG_ON(!PageLocked(page));
38 +       BUG_ON(__ext4_debug_is_page_zero(page));
39         switch (ctx->mode) {
40         case EXT4_ENCRYPTION_MODE_AES_256_XTS:
41                 res = ext4_xts_decrypt(ctx, page);
42 diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
43 index 9ab757f..6c74a25 100644
44 --- a/fs/ext4/extents.c
45 +++ b/fs/ext4/extents.c
46 @@ -3099,6 +3099,8 @@ static int ext4_ext_zeroout(struct inode *inode, struct ext4_extent *ex)
47         ee_len    = ext4_ext_get_actual_len(ex);
48         ee_pblock = ext4_ext_pblock(ex);
50 +       printk_ratelimited(KERN_ERR "%s: Calling sb_issue_zeroout(ee_pblock = [%lld], ee_len = [%d])\n", __func__, ee_pblock, ee_len);
52         ret = sb_issue_zeroout(inode->i_sb, ee_pblock, ee_len, GFP_NOFS);
53         if (ret > 0)
54                 ret = 0;
55 -- 
56 2.1.0.rc2.206.gedb03e5