On Tue, Apr 10, 2018 at 01:05:57PM +0200, Martin Pieuchot wrote: > Document that we're using the current reference instead of incrementing > then decrementing the refcount in finishdup().
Could finishdup() kassert that (fp->f_count > 0) ? > Ok? OK bluhm@ > Index: kern/kern_descrip.c > =================================================================== > RCS file: /cvs/src/sys/kern/kern_descrip.c,v > retrieving revision 1.147 > diff -u -p -r1.147 kern_descrip.c > --- kern/kern_descrip.c 9 Apr 2018 13:59:03 -0000 1.147 > +++ kern/kern_descrip.c 10 Apr 2018 11:01:45 -0000 > @@ -241,6 +241,7 @@ restart: > } > goto out; > } > + /* No need for FRELE(), finishdup() uses current ref. */ > error = finishdup(p, fp, old, new, retval, 0); > > out: > @@ -320,7 +321,7 @@ restart: > panic("dup2: fdalloc"); > fd_unused(fdp, new); > } > - /* finishdup() does FRELE */ > + /* No need for FRELE(), finishdup() uses current ref. */ > error = finishdup(p, fp, old, new, retval, 1); > if (!error && flags & O_CLOEXEC) > fdp->fd_ofileflags[new] |= UF_EXCLOSE; > @@ -376,7 +377,7 @@ restart: > goto restart; > } > } else { > - /* finishdup will FRELE for us. */ > + /* No need for FRELE(), finishdup() uses current ref. */ > error = finishdup(p, fp, fd, i, retval, 0); > > if (!error && SCARG(uap, cmd) == F_DUPFD_CLOEXEC) > @@ -616,8 +617,6 @@ finishdup(struct proc *p, struct file *f > > fdp->fd_ofiles[new] = fp; > fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] & ~UF_EXCLOSE; > - fp->f_count++; > - FRELE(fp, p); > if (dup2 && oldfp == NULL) > fd_used(fdp, new); > *retval = new;