I'd like to ease reviews of the FREF()/FRELE() dances by keeping their number small. In the case of sys_fstatfs() it's easy to have a single FRELE() for the corresponding getvnode(). Ok?
Index: kern/vfs_syscalls.c =================================================================== RCS file: /cvs/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.277 diff -u -p -r1.277 vfs_syscalls.c --- kern/vfs_syscalls.c 28 Mar 2018 09:47:52 -0000 1.277 +++ kern/vfs_syscalls.c 2 Apr 2018 10:46:35 -0000 @@ -653,18 +653,18 @@ sys_fstatfs(struct proc *p, void *v, reg if ((error = getvnode(p, SCARG(uap, fd), &fp)) != 0) return (error); mp = ((struct vnode *)fp->f_data)->v_mount; - if (!mp) { - FRELE(fp, p); - return (ENOENT); + if (mp == NULL) { + error = ENOENT; + } else { + sp = &mp->mnt_stat; + error = VFS_STATFS(mp, sp, p); + if (error == 0) { + sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; + error = copyout_statfs(sp, SCARG(uap, buf), p); + } } - sp = &mp->mnt_stat; - error = VFS_STATFS(mp, sp, p); FRELE(fp, p); - if (error) - return (error); - sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; - - return (copyout_statfs(sp, SCARG(uap, buf), p)); + return (error); } /*