Skip to content

Commit

Permalink
Fix some nits in zfs_getpages()
Browse files Browse the repository at this point in the history
- 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]>
Signed-off-by: Mark Johnston <[email protected]>
  • Loading branch information
markjdb committed Nov 14, 2024
1 parent 46c4f2c commit 40cc891
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions module/os/freebsd/zfs/zfs_vnops_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -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]));
Expand All @@ -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);
Expand Down

0 comments on commit 40cc891

Please sign in to comment.