aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Gruenbacher <agruenba@redhat.com>2021-11-06 00:18:56 +0100
committerAndreas Gruenbacher <agruenba@redhat.com>2021-11-06 10:25:45 +0100
commitf3506eee81d1f700d9ee2d2f4a88fddb669ec032 (patch)
tree6edb05823f005e0581782b4c9a704817f950c13f
parentgfs2: release iopen glock early in evict (diff)
downloadlinux-dev-f3506eee81d1f700d9ee2d2f4a88fddb669ec032.tar.xz
linux-dev-f3506eee81d1f700d9ee2d2f4a88fddb669ec032.zip
gfs2: Fix length of holes reported at end-of-file
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>
-rw-r--r--fs/gfs2/bmap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 7235d539e969..d67108489148 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -940,7 +940,7 @@ do_alloc:
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;