FreeBSD: Return Mach error codes from VOP_(GET|PUT)PAGES
FreeBSD's memory management system uses its own error numbers and gets confused when these VOPs return EIO. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Reported-by: Peter Holm <pho@FreeBSD.org> Signed-off-by: Mark Johnston <markj@FreeBSD.org> Closes #13311
This commit is contained in:
parent
e9084d0712
commit
7dcb8ed23d
module/os/freebsd/zfs
|
@ -4040,8 +4040,8 @@ zfs_getpages(struct vnode *vp, vm_page_t *ma, int count, int *rbehind,
|
|||
int pgsin_b, pgsin_a;
|
||||
int error;
|
||||
|
||||
ZFS_ENTER(zfsvfs);
|
||||
ZFS_VERIFY_ZP(zp);
|
||||
ZFS_ENTER_ERROR(zfsvfs, zfs_vm_pagerret_error);
|
||||
ZFS_VERIFY_ZP_ERROR(zp, zfs_vm_pagerret_error);
|
||||
|
||||
start = IDX_TO_OFF(ma[0]->pindex);
|
||||
end = IDX_TO_OFF(ma[count - 1]->pindex + 1);
|
||||
|
@ -4165,19 +4165,18 @@ zfs_putpages(struct vnode *vp, vm_page_t *ma, size_t len, int flags,
|
|||
int err;
|
||||
int i;
|
||||
|
||||
ZFS_ENTER(zfsvfs);
|
||||
ZFS_VERIFY_ZP(zp);
|
||||
|
||||
object = vp->v_object;
|
||||
pcount = btoc(len);
|
||||
ncount = pcount;
|
||||
|
||||
KASSERT(ma[0]->object == object, ("mismatching object"));
|
||||
KASSERT(len > 0 && (len & PAGE_MASK) == 0, ("unexpected length"));
|
||||
|
||||
pcount = btoc(len);
|
||||
ncount = pcount;
|
||||
for (i = 0; i < pcount; i++)
|
||||
rtvals[i] = zfs_vm_pagerret_error;
|
||||
|
||||
ZFS_ENTER_ERROR(zfsvfs, zfs_vm_pagerret_error);
|
||||
ZFS_VERIFY_ZP_ERROR(zp, zfs_vm_pagerret_error);
|
||||
|
||||
off = IDX_TO_OFF(ma[0]->pindex);
|
||||
blksz = zp->z_blksz;
|
||||
lo_off = rounddown(off, blksz);
|
||||
|
|
Loading…
Reference in New Issue