mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-23 19:28:36 +00:00
vn_copy_file_range(): provide ENOSYS fallback to vn_generic_copy_file_range()
Reviewed by: markj, Olivier Certner <olce.freebsd@certner.fr> Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D42603
This commit is contained in:
parent
a9bc863769
commit
c5405d1c85
|
@ -6321,9 +6321,7 @@ zfs_freebsd_copy_file_range(struct vop_copy_file_range_args *ap)
|
|||
bad_write_fallback:
|
||||
if (mp != NULL)
|
||||
vn_finished_write(mp);
|
||||
error = vn_generic_copy_file_range(ap->a_invp, ap->a_inoffp,
|
||||
ap->a_outvp, ap->a_outoffp, ap->a_lenp, ap->a_flags,
|
||||
ap->a_incred, ap->a_outcred, ap->a_fsizetd);
|
||||
error = ENOSYS;
|
||||
return (error);
|
||||
}
|
||||
|
||||
|
|
|
@ -860,6 +860,7 @@ fuse_vnop_copy_file_range(struct vop_copy_file_range_args *ap)
|
|||
pid_t pid;
|
||||
int err;
|
||||
|
||||
err = ENOSYS;
|
||||
if (mp == NULL || mp != vnode_mount(outvp))
|
||||
goto fallback;
|
||||
|
||||
|
@ -942,13 +943,9 @@ fuse_vnop_copy_file_range(struct vop_copy_file_range_args *ap)
|
|||
VOP_UNLOCK(invp);
|
||||
VOP_UNLOCK(outvp);
|
||||
|
||||
if (err == ENOSYS) {
|
||||
if (err == ENOSYS)
|
||||
fsess_set_notimpl(mp, FUSE_COPY_FILE_RANGE);
|
||||
fallback:
|
||||
err = vn_generic_copy_file_range(ap->a_invp, ap->a_inoffp,
|
||||
ap->a_outvp, ap->a_outoffp, ap->a_lenp, ap->a_flags,
|
||||
ap->a_incred, ap->a_outcred, ap->a_fsizetd);
|
||||
}
|
||||
|
||||
/*
|
||||
* No need to call vn_rlimit_fsizex_res before return, since the uio is
|
||||
|
|
|
@ -3888,9 +3888,7 @@ nfs_copy_file_range(struct vop_copy_file_range_args *ap)
|
|||
*/
|
||||
if (invp == outvp || invp->v_mount != outvp->v_mount) {
|
||||
generic_copy:
|
||||
return (vn_generic_copy_file_range(invp, ap->a_inoffp,
|
||||
outvp, ap->a_outoffp, ap->a_lenp, ap->a_flags,
|
||||
ap->a_incred, ap->a_outcred, ap->a_fsizetd));
|
||||
return (ENOSYS);
|
||||
}
|
||||
|
||||
/* Lock both vnodes, avoiding risk of deadlock. */
|
||||
|
|
|
@ -3142,6 +3142,8 @@ vn_copy_file_range(struct vnode *invp, off_t *inoffp, struct vnode *outvp,
|
|||
error = VOP_COPY_FILE_RANGE(invpl, inoffp, outvpl, outoffp,
|
||||
lenp, flags, incred, outcred, fsize_td);
|
||||
else
|
||||
error = ENOSYS;
|
||||
if (error == ENOSYS)
|
||||
error = vn_generic_copy_file_range(invpl, inoffp, outvpl,
|
||||
outoffp, lenp, flags, incred, outcred, fsize_td);
|
||||
vfs_unbusy(outmp);
|
||||
|
|
Loading…
Reference in a new issue