]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fscrypt: pass a real sector_t to fscrypt_zeroout_range_inline_crypt
authorChristoph Hellwig <hch@lst.de>
Fri, 9 Jan 2026 06:07:41 +0000 (07:07 +0100)
committerJens Axboe <axboe@kernel.dk>
Sun, 11 Jan 2026 19:55:41 +0000 (12:55 -0700)
While the pblk argument to fscrypt_zeroout_range_inline_crypt is
declared as a sector_t it actually is interpreted as a logical block
size unit, which is highly unusual.  Switch to passing the 512 byte
units that sector_t is defined for.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Eric Biggers <ebiggers@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/crypto/bio.c

index 5f5599020e94a621334a18d5687c6fa9d0bb6fae..68b0424d879a5fda4b3d7a7e191b2a0e4013c1be 100644 (file)
@@ -48,7 +48,7 @@ bool fscrypt_decrypt_bio(struct bio *bio)
 EXPORT_SYMBOL(fscrypt_decrypt_bio);
 
 static int fscrypt_zeroout_range_inline_crypt(const struct inode *inode,
-                                             pgoff_t lblk, sector_t pblk,
+                                             pgoff_t lblk, sector_t sector,
                                              unsigned int len)
 {
        const unsigned int blockbits = inode->i_blkbits;
@@ -67,8 +67,7 @@ static int fscrypt_zeroout_range_inline_crypt(const struct inode *inode,
 
                if (num_pages == 0) {
                        fscrypt_set_bio_crypt_ctx(bio, inode, lblk, GFP_NOFS);
-                       bio->bi_iter.bi_sector =
-                                       pblk << (blockbits - SECTOR_SHIFT);
+                       bio->bi_iter.bi_sector = sector;
                }
                ret = bio_add_page(bio, ZERO_PAGE(0), bytes_this_page, 0);
                if (WARN_ON_ONCE(ret != bytes_this_page)) {
@@ -78,7 +77,7 @@ static int fscrypt_zeroout_range_inline_crypt(const struct inode *inode,
                num_pages++;
                len -= blocks_this_page;
                lblk += blocks_this_page;
-               pblk += blocks_this_page;
+               sector += (bytes_this_page >> SECTOR_SHIFT);
                if (num_pages == BIO_MAX_VECS || !len ||
                    !fscrypt_mergeable_bio(bio, inode, lblk)) {
                        err = submit_bio_wait(bio);
@@ -132,7 +131,7 @@ int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
                return 0;
 
        if (fscrypt_inode_uses_inline_crypto(inode))
-               return fscrypt_zeroout_range_inline_crypt(inode, lblk, pblk,
+               return fscrypt_zeroout_range_inline_crypt(inode, lblk, sector,
                                                          len);
 
        BUILD_BUG_ON(ARRAY_SIZE(pages) > BIO_MAX_VECS);