aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Johnston <[email protected]>2024-11-14 17:12:57 -0500
committerGitHub <[email protected]>2024-11-14 14:12:57 -0800
commit8dc452d90783a63b4041ad615fac21a1aae3b087 (patch)
tree82a9de470b16b7cd01a02f361b4a08bcd17493ca
parent46c4f2ce0baafe161c726a72a38573354228fe10 (diff)
Fix some nits in zfs_getpages()
- If we don't want dmu_read_pages() to perform extra readahead/behind, pass a pointer to 0 instead of a null pointer, as dum_read_pages() expects rahead and rbehind to be non-null. - Avoid unneeded iterations in a loop. Sponsored-by: Klara, Inc. Reported-by: Alexander Motin <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Brian Atkinson <[email protected]> Reviewed-by: Alexander Motin <[email protected]> Signed-off-by: Mark Johnston <[email protected]> Closes #16758
-rw-r--r--module/os/freebsd/zfs/zfs_vnops_os.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/module/os/freebsd/zfs/zfs_vnops_os.c b/module/os/freebsd/zfs/zfs_vnops_os.c
index 576b4800e..e5acd684e 100644
--- a/module/os/freebsd/zfs/zfs_vnops_os.c
+++ b/module/os/freebsd/zfs/zfs_vnops_os.c
@@ -4005,7 +4005,7 @@ zfs_getpages(struct vnode *vp, vm_page_t *ma, int count, int *rbehind,
* allocated block.
*/
for (int i = 0; i < count; i++) {
- int count1, j, last_size;
+ int dummypgsin, count1, j, last_size;
if (vm_page_any_valid(ma[i])) {
ASSERT(vm_page_all_valid(ma[i]));
@@ -4018,13 +4018,16 @@ zfs_getpages(struct vnode *vp, vm_page_t *ma, int count, int *rbehind,
}
}
count1 = j - i;
+ dummypgsin = 0;
last_size = j == count ?
MIN(end, obj_size) - (end - PAGE_SIZE) : PAGE_SIZE;
error = dmu_read_pages(zfsvfs->z_os, zp->z_id, &ma[i], count1,
- i == 0 ? &pgsin_b : NULL, j == count ? &pgsin_a : NULL,
+ i == 0 ? &pgsin_b : &dummypgsin,
+ j == count ? &pgsin_a : &dummypgsin,
last_size);
if (error != 0)
break;
+ i += count1 - 1;
}
zfs_rangelock_exit(lr);