Index: sys/fs/fuse/fuse_vnops.c =================================================================== --- sys/fs/fuse/fuse_vnops.c +++ sys/fs/fuse/fuse_vnops.c @@ -660,14 +660,6 @@ td = ap->a_fsizetd; pid = td->td_proc->p_pid; - err = fuse_filehandle_getrw(invp, FREAD, &infufh, incred, pid); - if (err) - return (err); - - err = fuse_filehandle_getrw(outvp, FWRITE, &outfufh, outcred, pid); - if (err) - return (err); - /* Lock both vnodes, avoiding risk of deadlock. */ do { err = vn_lock(outvp, LK_EXCLUSIVE); @@ -686,6 +678,14 @@ if (err != 0) return (err); + err = fuse_filehandle_getrw(invp, FREAD, &infufh, incred, pid); + if (err) + goto unlock; + + err = fuse_filehandle_getrw(outvp, FWRITE, &outfufh, outcred, pid); + if (err) + goto unlock; + if (ap->a_fsizetd) { io.uio_offset = *ap->a_outoffp; io.uio_resid = *ap->a_lenp;