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