Lines Matching defs:fdp
150 fd_inuse(struct filedesc *fdp, int fd)
154 if (fdp->fd_lomap[off] & (1U << (fd & NDENTRYMASK)))
161 fd_used(struct filedesc *fdp, int fd)
165 fdp->fd_lomap[off] |= 1U << (fd & NDENTRYMASK);
166 if (fdp->fd_lomap[off] == ~0)
167 fdp->fd_himap[off >> NDENTRYSHIFT] |= 1U << (off & NDENTRYMASK);
169 if (fd > fdp->fd_lastfile)
170 fdp->fd_lastfile = fd;
171 fdp->fd_openfd++;
175 fd_unused(struct filedesc *fdp, int fd)
179 if (fd < fdp->fd_freefile)
180 fdp->fd_freefile = fd;
182 if (fdp->fd_lomap[off] == ~0)
183 fdp->fd_himap[off >> NDENTRYSHIFT] &= ~(1U << (off & NDENTRYMASK));
184 fdp->fd_lomap[off] &= ~(1U << (fd & NDENTRYMASK));
187 if (fd > fdp->fd_lastfile)
190 if (fd == fdp->fd_lastfile)
191 fdp->fd_lastfile = find_last_set(fdp, fd);
192 fdp->fd_openfd--;
226 fd_getfile(struct filedesc *fdp, int fd)
232 if ((u_int)fd >= fdp->fd_nfiles)
235 mtx_enter(&fdp->fd_fplock);
236 fp = fdp->fd_ofiles[fd];
239 mtx_leave(&fdp->fd_fplock);
245 fd_getfile_mode(struct filedesc *fdp, int fd, int mode)
251 fp = fd_getfile(fdp, fd);
264 fd_checkclosed(struct filedesc *fdp, int fd, struct file *fp)
268 mtx_enter(&fdp->fd_fplock);
269 KASSERT(fd < fdp->fd_nfiles);
270 closed = (fdp->fd_ofiles[fd] != fp);
271 mtx_leave(&fdp->fd_fplock);
288 struct filedesc *fdp = p->p_fd;
295 if ((fp = fd_getfile(fdp, old)) == NULL)
297 fdplock(fdp);
301 fdpunlock(fdp);
305 fdpunlock(fdp);
347 struct filedesc *fdp = p->p_fd;
352 if ((fp = fd_getfile(fdp, old)) == NULL)
369 fdplock(fdp);
370 if (new >= fdp->fd_nfiles) {
374 fdpunlock(fdp);
378 fdpunlock(fdp);
384 fd_unused(fdp, new);
407 struct filedesc *fdp = p->p_fd;
419 if ((fp = fd_getfile(fdp, fd)) == NULL)
431 fdplock(fdp);
435 fdpunlock(fdp);
439 fdpunlock(fdp);
453 fdplock(fdp);
454 *retval = fdp->fd_ofileflags[fd] & UF_EXCLOSE ? 1 : 0;
455 fdpunlock(fdp);
459 fdplock(fdp);
461 fdp->fd_ofileflags[fd] |= UF_EXCLOSE;
463 fdp->fd_ofileflags[fd] &= ~UF_EXCLOSE;
464 fdpunlock(fdp);
544 atomic_setbits_int(&fdp->fd_flags, FD_ADVLOCK);
545 error = VOP_ADVLOCK(vp, fdp, F_SETLK, &fl, flg);
553 atomic_setbits_int(&fdp->fd_flags, FD_ADVLOCK);
554 error = VOP_ADVLOCK(vp, fdp, F_SETLK, &fl, flg);
558 error = VOP_ADVLOCK(vp, fdp, F_UNLCK, &fl, F_POSIX);
566 if (fd_checkclosed(fdp, fd, fp)) {
575 VOP_ADVLOCK(vp, fdp, F_UNLCK, &fl, F_POSIX);
613 error = VOP_ADVLOCK(vp, fdp, F_GETLK, &fl, F_POSIX);
641 struct filedesc *fdp = p->p_fd;
644 fdpassertlocked(fdp);
652 oldfp = fd_getfile(fdp, new);
654 if (fd_inuse(fdp, new)) {
658 fd_used(fdp, new);
665 mtx_enter(&fdp->fd_fplock);
666 fdp->fd_ofiles[new] = fp;
667 mtx_leave(&fdp->fd_fplock);
669 fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] & ~UF_EXCLOSE;
671 fdp->fd_ofileflags[new] |= UF_EXCLOSE;
676 fdpunlock(fdp);
679 fdpunlock(fdp);
685 fdpunlock(fdp);
691 fdinsert(struct filedesc *fdp, int fd, int flags, struct file *fp)
695 fdpassertlocked(fdp);
700 if ((fq = fdp->fd_ofiles[0]) != NULL) {
708 mtx_enter(&fdp->fd_fplock);
709 KASSERT(fdp->fd_ofiles[fd] == NULL);
710 fdp->fd_ofiles[fd] = fp;
711 mtx_leave(&fdp->fd_fplock);
713 fdp->fd_ofileflags[fd] |= (flags & UF_EXCLOSE);
717 fdremove(struct filedesc *fdp, int fd)
719 fdpassertlocked(fdp);
725 mtx_enter(&fdp->fd_fplock);
726 fdp->fd_ofiles[fd] = NULL;
727 mtx_leave(&fdp->fd_fplock);
729 fdp->fd_ofileflags[fd] = 0;
731 fd_unused(fdp, fd);
737 struct filedesc *fdp = p->p_fd;
740 fdpassertlocked(fdp);
742 fp = fd_getfile(fdp, fd);
744 fdpunlock(fdp);
747 fdremove(fdp, fd);
749 fdpunlock(fdp);
763 struct filedesc *fdp = p->p_fd;
765 fdplock(fdp);
766 /* fdrelease unlocks fdp. */
783 struct filedesc *fdp = p->p_fd;
788 if ((fp = fd_getfile(fdp, fd)) == NULL)
820 struct filedesc *fdp = p->p_fd;
825 if ((fp = fd_getfile(fdp, fd)) == NULL)
859 struct filedesc *fdp = p->p_fd;
863 fdpassertlocked(fdp);
872 last = min(fdp->fd_nfiles, lim);
873 if ((i = want) < fdp->fd_freefile)
874 i = fdp->fd_freefile;
876 new = find_next_zero(fdp->fd_himap, off,
879 i = find_next_zero(&fdp->fd_lomap[new],
892 fd_used(fdp, i);
893 if (want <= fdp->fd_freefile)
894 fdp->fd_freefile = i;
896 fdp->fd_ofileflags[i] = 0;
898 fdp->fd_ofileflags[i] |= UF_PLEDGED;
902 if (fdp->fd_nfiles >= lim)
911 struct filedesc *fdp = p->p_fd;
918 fdpassertlocked(fdp);
920 oldnfiles = fdp->fd_nfiles;
921 oldofile = fdp->fd_ofiles;
926 if (fdp->fd_nfiles < NDEXTENT)
929 nfiles = 2 * fdp->fd_nfiles;
936 if (NDHISLOTS(nfiles) > NDHISLOTS(fdp->fd_nfiles)) {
948 copylen = sizeof(struct file *) * fdp->fd_nfiles;
949 memcpy(newofile, fdp->fd_ofiles, copylen);
952 copylen = sizeof(char) * fdp->fd_nfiles;
953 memcpy(newofileflags, fdp->fd_ofileflags, copylen);
956 if (NDHISLOTS(nfiles) > NDHISLOTS(fdp->fd_nfiles)) {
957 copylen = NDHISLOTS(fdp->fd_nfiles) * sizeof(u_int);
958 memcpy(newhimap, fdp->fd_himap, copylen);
962 copylen = NDLOSLOTS(fdp->fd_nfiles) * sizeof(u_int);
963 memcpy(newlomap, fdp->fd_lomap, copylen);
967 if (NDHISLOTS(fdp->fd_nfiles) > NDHISLOTS(NDFILE)) {
968 free(fdp->fd_himap, M_FILEDESC,
969 NDHISLOTS(fdp->fd_nfiles) * sizeof(u_int));
970 free(fdp->fd_lomap, M_FILEDESC,
971 NDLOSLOTS(fdp->fd_nfiles) * sizeof(u_int));
973 fdp->fd_himap = newhimap;
974 fdp->fd_lomap = newlomap;
977 mtx_enter(&fdp->fd_fplock);
978 fdp->fd_ofiles = newofile;
979 mtx_leave(&fdp->fd_fplock);
981 fdp->fd_ofileflags = newofileflags;
982 fdp->fd_nfiles = nfiles;
1094 struct filedesc *newfdp, *fdp = pr->ps_fd;
1099 fdplock(fdp);
1100 if (fdp->fd_cdir) {
1101 vref(fdp->fd_cdir);
1102 newfdp->fd_cdir = fdp->fd_cdir;
1104 if (fdp->fd_rdir) {
1105 vref(fdp->fd_rdir);
1106 newfdp->fd_rdir = fdp->fd_rdir;
1115 if (fdp->fd_lastfile >= NDFILE) {
1121 i = fdp->fd_nfiles;
1122 while (i >= 2 * NDEXTENT && i > fdp->fd_lastfile * 2)
1135 newfdp->fd_freefile = fdp->fd_freefile;
1136 newfdp->fd_flags = fdp->fd_flags;
1137 newfdp->fd_cmask = fdp->fd_cmask;
1139 for (i = 0; i <= fdp->fd_lastfile; i++) {
1140 struct file *fp = fdp->fd_ofiles[i];
1160 newfdp->fd_ofileflags[i] = fdp->fd_ofileflags[i];
1164 fdpunlock(fdp);
1175 struct filedesc *fdp = p->p_fd;
1179 if (--fdp->fd_refcnt > 0)
1181 for (fd = 0; fd <= fdp->fd_lastfile; fd++) {
1182 fp = fdp->fd_ofiles[fd];
1184 fdp->fd_ofiles[fd] = NULL;
1192 if (fdp->fd_nfiles > NDFILE)
1193 free(fdp->fd_ofiles, M_FILEDESC, fdp->fd_nfiles * OFILESIZE);
1194 if (NDHISLOTS(fdp->fd_nfiles) > NDHISLOTS(NDFILE)) {
1195 free(fdp->fd_himap, M_FILEDESC,
1196 NDHISLOTS(fdp->fd_nfiles) * sizeof(u_int));
1197 free(fdp->fd_lomap, M_FILEDESC,
1198 NDLOSLOTS(fdp->fd_nfiles) * sizeof(u_int));
1200 if (fdp->fd_cdir)
1201 vrele(fdp->fd_cdir);
1202 if (fdp->fd_rdir)
1203 vrele(fdp->fd_rdir);
1204 pool_put(&fdesc_pool, fdp);
1218 struct filedesc *fdp;
1236 if (p && ((fdp = p->p_fd) != NULL) &&
1237 (fdp->fd_flags & FD_ADVLOCK) &&
1246 (void) VOP_ADVLOCK(vp, fdp, F_UNLCK, &lf, F_POSIX);
1291 struct filedesc *fdp = p->p_fd;
1297 if ((fp = fd_getfile(fdp, fd)) == NULL)
1361 struct filedesc *fdp = p->p_fd;
1365 fdpassertlocked(fdp);
1385 if ((wfp = fd_getfile(fdp, dupfd)) == NULL)
1403 mtx_enter(&fdp->fd_fplock);
1404 KASSERT(fdp->fd_ofiles[indx] == NULL);
1405 fdp->fd_ofiles[indx] = wfp;
1406 mtx_leave(&fdp->fd_fplock);
1408 fdp->fd_ofileflags[indx] = (fdp->fd_ofileflags[indx] & UF_EXCLOSE) |
1409 (fdp->fd_ofileflags[dupfd] & ~UF_EXCLOSE);
1420 struct filedesc *fdp = p->p_fd;
1423 fdplock(fdp);
1424 for (fd = 0; fd <= fdp->fd_lastfile; fd++) {
1425 fdp->fd_ofileflags[fd] &= ~UF_PLEDGED;
1426 if (fdp->fd_ofileflags[fd] & UF_EXCLOSE) {
1427 /* fdrelease() unlocks fdp. */
1429 fdplock(fdp);
1432 fdpunlock(fdp);
1439 struct filedesc *fdp = p->p_fd;
1443 fdplock(fdp);
1445 if (startfd > fdp->fd_lastfile) {
1446 fdpunlock(fdp);
1450 for (i = startfd; i <= fdp->fd_lastfile; i++) {
1451 /* fdrelease() unlocks fdp. */
1453 fdplock(fdp);
1456 fdpunlock(fdp);