| From 3bdda649512eecec9f972709a9f6570a07ce8eea Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 6 Nov 2021 00:18:56 +0100 |
| Subject: gfs2: Fix length of holes reported at end-of-file |
| |
| From: Andreas Gruenbacher <agruenba@redhat.com> |
| |
| [ Upstream commit f3506eee81d1f700d9ee2d2f4a88fddb669ec032 ] |
| |
| Fix the length of holes reported at the end of a file: the length is |
| relative to the beginning of the extent, not the seek position which is |
| rounded down to the filesystem block size. |
| |
| This bug went unnoticed for some time, but is now caught by the |
| following assertion in iomap_iter_done(): |
| |
| WARN_ON_ONCE(iter->iomap.offset + iter->iomap.length <= iter->pos) |
| |
| Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/gfs2/bmap.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c |
| index a1f9dde33058f..b34c02985d9d2 100644 |
| --- a/fs/gfs2/bmap.c |
| +++ b/fs/gfs2/bmap.c |
| @@ -940,7 +940,7 @@ static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length, |
| else if (height == ip->i_height) |
| ret = gfs2_hole_size(inode, lblock, len, mp, iomap); |
| else |
| - iomap->length = size - pos; |
| + iomap->length = size - iomap->offset; |
| } else if (flags & IOMAP_WRITE) { |
| u64 alloc_size; |
| |
| -- |
| 2.33.0 |
| |