git: 82817f26f8ec - main - ffs: fix vn_io_fault_pgmove() offset for PAGE_SIZE > block size
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 22 Jun 2022 00:56:00 UTC
The branch main has been updated by chs:
URL: https://cgit.FreeBSD.org/src/commit/?id=82817f26f8ecf5a3c43a8ad51737731a9b9764de
commit 82817f26f8ecf5a3c43a8ad51737731a9b9764de
Author: Chuck Silvers <chs@FreeBSD.org>
AuthorDate: 2022-06-22 00:54:18 +0000
Commit: Chuck Silvers <chs@FreeBSD.org>
CommitDate: 2022-06-22 00:54:18 +0000
ffs: fix vn_io_fault_pgmove() offset for PAGE_SIZE > block size
The "offset" argument to vn_io_fault_pgmove() is supposed to be
the offset within the page, but for ffs we currently use the offset
within the block. When the block size is at least as large as the
page size then these values are the same, but when the page size is
larger than the block size then we need to add the offset of
the block within the page as well.
Sponsored by: Netflix
Reviewed by: mckusick, kib, markj
Differential Revision: https://reviews.freebsd.org/D34835
---
sys/ufs/ffs/ffs_vnops.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
index b57e9a3a71b0..c3f63bbfc44f 100644
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -795,7 +795,8 @@ ffs_read(ap)
error = vn_io_fault_uiomove((char *)bp->b_data +
blkoffset, (int)xfersize, uio);
} else {
- error = vn_io_fault_pgmove(bp->b_pages, blkoffset,
+ error = vn_io_fault_pgmove(bp->b_pages,
+ blkoffset + (bp->b_offset & PAGE_MASK),
(int)xfersize, uio);
}
if (error)
@@ -947,7 +948,8 @@ ffs_write(ap)
error = vn_io_fault_uiomove((char *)bp->b_data +
blkoffset, (int)xfersize, uio);
} else {
- error = vn_io_fault_pgmove(bp->b_pages, blkoffset,
+ error = vn_io_fault_pgmove(bp->b_pages,
+ blkoffset + (bp->b_offset & PAGE_MASK),
(int)xfersize, uio);
}
/*