Range lengths are usually expressed as bytes in the VFS, switch
fscrypt_zeroout_range to this convention.

Signed-off-by: Christoph Hellwig <[email protected]>
---
 fs/crypto/bio.c | 6 +++---
 fs/ext4/inode.c | 3 ++-
 fs/f2fs/file.c  | 2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/crypto/bio.c b/fs/crypto/bio.c
index 235dd1c3d443..4e9893664c0f 100644
--- a/fs/crypto/bio.c
+++ b/fs/crypto/bio.c
@@ -115,7 +115,7 @@ static int fscrypt_zeroout_range_inline_crypt(const struct 
inode *inode,
  * @inode: the file's inode
  * @pos: the first file logical offset (in bytes) to zero out
  * @pblk: the first filesystem physical block to zero out
- * @len: number of blocks to zero out
+ * @len: bytes to zero out
  *
  * Zero out filesystem blocks in an encrypted regular file on-disk, i.e. write
  * ciphertext blocks which decrypt to the all-zeroes block.  The blocks must be
@@ -136,7 +136,7 @@ int fscrypt_zeroout_range(const struct inode *inode, loff_t 
pos,
        const unsigned int du_per_page_bits = PAGE_SHIFT - du_bits;
        const unsigned int du_per_page = 1U << du_per_page_bits;
        u64 du_index = pos >> du_bits;
-       u64 du_remaining = (u64)len << (inode->i_blkbits - du_bits);
+       u64 du_remaining = len >> du_bits;
        loff_t pos = (loff_t)lblk << inode->i_blkbits;
        sector_t sector = pblk << (inode->i_blkbits - SECTOR_SHIFT);
        struct page *pages[16]; /* write up to 16 pages at a time */
@@ -151,7 +151,7 @@ int fscrypt_zeroout_range(const struct inode *inode, loff_t 
pos,
 
        if (fscrypt_inode_uses_inline_crypto(inode))
                return fscrypt_zeroout_range_inline_crypt(inode, pos, sector,
-                               len << inode->i_blkbits);
+                               len);
 
        BUILD_BUG_ON(ARRAY_SIZE(pages) > BIO_MAX_VECS);
        nr_pages = min_t(u64, ARRAY_SIZE(pages),
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 209d326b8be9..3743260b70d4 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -403,7 +403,8 @@ int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t 
lblk, ext4_fsblk_t pblk,
 
        if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
                return fscrypt_zeroout_range(inode,
-                               (loff_t)lblk << inode->i_blkbits, pblk, len);
+                               (loff_t)lblk << inode->i_blkbits, pblk,
+                               len << inode->i_blkbits);
 
        ret = sb_issue_zeroout(inode->i_sb, pblk, len, GFP_NOFS);
        if (ret > 0)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 150c3eb15f51..45ec6f83fcda 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -4144,7 +4144,7 @@ static int f2fs_secure_erase(struct block_device *bdev, 
struct inode *inode,
                if (IS_ENCRYPTED(inode))
                        ret = fscrypt_zeroout_range(inode,
                                        (loff_t)off << inode->i_blkbits, block,
-                                       len);
+                                       len << inode->i_blkbits);
                else
                        ret = blkdev_issue_zeroout(bdev, sector, nr_sects,
                                        GFP_NOFS, 0);
-- 
2.47.3


Reply via email to