From: Darrick J. Wong <djwong@xxxxxxxxxx> Use the blk64_t variants of the io channel read/write methods when we have to do partial block zeroing for hole punching because otherwise we corrupt large 64-bit filesystems on 32-bit fuse2fs due to integer truncation. Cc: <linux-ext4@xxxxxxxxxxxxxxx> # v1.43 Fixes: 81cbf1ef4f5dab ("misc: add fuse2fs, a FUSE server for e2fsprogs") Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --- misc/fuse2fs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index c6b1684f53e2e4..4d42a634bf377b 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -4168,13 +4168,13 @@ static errcode_t clean_block_middle(struct fuse2fs *ff, ext2_ino_t ino, if (!blk || (retflags & BMAP_RET_UNINIT)) return 0; - err = io_channel_read_blk(fs->io, blk, 1, *buf); + err = io_channel_read_blk64(fs->io, blk, 1, *buf); if (err) return err; memset(*buf + residue, 0, len); - return io_channel_write_blk(fs->io, blk, 1, *buf); + return io_channel_write_blk64(fs->io, blk, 1, *buf); } static errcode_t clean_block_edge(struct fuse2fs *ff, ext2_ino_t ino, @@ -4202,7 +4202,7 @@ static errcode_t clean_block_edge(struct fuse2fs *ff, ext2_ino_t ino, if (err) return err; - err = io_channel_read_blk(fs->io, blk, 1, *buf); + err = io_channel_read_blk64(fs->io, blk, 1, *buf); if (err) return err; if (!blk || (retflags & BMAP_RET_UNINIT)) @@ -4213,7 +4213,7 @@ static errcode_t clean_block_edge(struct fuse2fs *ff, ext2_ino_t ino, else memset(*buf + residue, 0, fs->blocksize - residue); - return io_channel_write_blk(fs->io, blk, 1, *buf); + return io_channel_write_blk64(fs->io, blk, 1, *buf); } static int punch_helper(struct fuse_file_info *fp, int mode, off_t offset,