svn commit: r358502 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Sun Mar 1 21:50:14 UTC 2020


Author: mjg
Date: Sun Mar  1 21:50:13 2020
New Revision: 358502
URL: https://svnweb.freebsd.org/changeset/base/358502

Log:
  fd: make fgetvp_rights work without the filedesc lock
  
  Reviewed by:	kib
  Differential Revision:	https://reviews.freebsd.org/D23883

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c	Sun Mar  1 21:49:16 2020	(r358501)
+++ head/sys/kern/kern_descrip.c	Sun Mar  1 21:50:13 2020	(r358502)
@@ -3028,13 +3028,11 @@ int
 fgetvp_rights(struct thread *td, int fd, cap_rights_t *needrightsp,
     struct filecaps *havecaps, struct vnode **vpp)
 {
-	struct filedesc *fdp;
 	struct filecaps caps;
 	struct file *fp;
 	int error;
 
-	fdp = td->td_proc->p_fd;
-	error = fget_cap_locked(fdp, fd, needrightsp, &fp, &caps);
+	error = fget_cap(td, fd, needrightsp, &fp, &caps);
 	if (error != 0)
 		return (error);
 	if (fp->f_ops == &badfileops) {
@@ -3049,10 +3047,12 @@ fgetvp_rights(struct thread *td, int fd, cap_rights_t 
 	*havecaps = caps;
 	*vpp = fp->f_vnode;
 	vrefact(*vpp);
+	fdrop(fp, td);
 
 	return (0);
 out:
 	filecaps_free(&caps);
+	fdrop(fp, td);
 	return (error);
 }
 


More information about the svn-src-head mailing list