PERFORCE change 100240 for review

Kip Macy kmacy at FreeBSD.org
Wed Jun 28 23:53:14 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=100240

Change 100240 by kmacy at kmacy_storage:sun4v_work_sleepq on 2006/06/28 22:50:47

	fix an LOR with Giant in fcntl

Affected files ...

.. //depot/projects/kmacy_sun4v/src/sys/kern/kern_descrip.c#10 edit

Differences ...

==== //depot/projects/kmacy_sun4v/src/sys/kern/kern_descrip.c#10 (text+ko) ====

@@ -365,18 +365,24 @@
 	flg = F_POSIX;
 	p = td->td_proc;
 	fdp = p->p_fd;
+ retry:
 	FILEDESC_LOCK(fdp);
 	if ((unsigned)fd >= fdp->fd_nfiles ||
 	    (fp = fdp->fd_ofiles[fd]) == NULL) {
 		FILEDESC_UNLOCK(fdp);
+		if (giant_locked)
+			mtx_unlock(&Giant);
 		error = EBADF;
 		goto done2;
 	}
 	pop = &fdp->fd_ofileflags[fd];
 
-	if ((fp->f_ops->fo_flags & DFLAG_MPSAFE) == 0) {
+	if ((giant_locked == 0) &&  ((fp->f_ops->fo_flags & DFLAG_MPSAFE) == 0)) {
+		FILEDESC_UNLOCK(fdp);
 		mtx_lock(&Giant);
 		giant_locked = 1;
+		/* we may have lost a race */
+		goto retry;
 	} 
 	switch (cmd) {
 	case F_DUPFD:


More information about the p4-projects mailing list