udf: Keep i_lenExtents consistent with the total length of extents
authorJan Kara <jack@suse.cz>
Wed, 21 Dec 2022 16:53:28 +0000 (17:53 +0100)
committerJan Kara <jack@suse.cz>
Mon, 9 Jan 2023 09:39:53 +0000 (10:39 +0100)
When rounding the last extent to blocksize in inode_getblk() we forgot
to update also i_lenExtents to match the new extent length. This
inconsistency can later confuse some assertion checks.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/inode.c

index 000ce37..31965c3 100644 (file)
@@ -677,6 +677,9 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
                        elen = EXT_RECORDED_ALLOCATED |
                                ((elen + inode->i_sb->s_blocksize - 1) &
                                 ~(inode->i_sb->s_blocksize - 1));
+                       iinfo->i_lenExtents =
+                               ALIGN(iinfo->i_lenExtents,
+                                     inode->i_sb->s_blocksize);
                        udf_write_aext(inode, &cur_epos, &eloc, elen, 1);
                }
                newblock = udf_get_lb_pblock(inode->i_sb, &eloc, offset);