Home | History | Annotate | Download | only in kern

Lines Matching defs:fdp

179 fd_isused(filedesc_t *fdp, unsigned fd)
183 KASSERT(fd < atomic_load_consume(&fdp->fd_dt)->dt_nfiles);
185 return (fdp->fd_lomap[off] & (1U << (fd & NDENTRYMASK))) != 0;
192 fd_checkmaps(filedesc_t *fdp)
198 KASSERT(fdp->fd_refcnt <= 1 || mutex_owned(&fdp->fd_lock));
200 dt = fdp->fd_dt;
201 if (fdp->fd_refcnt == -1) {
210 (fdfile_t *)fdp->fd_dfdfile[fd]);
213 KASSERT(!fd_isused(fdp, fd));
215 KASSERT(fd_isused(fdp, fd));
222 fd_next_zero(filedesc_t *fdp, uint32_t *bitmap, int want, u_int bits)
227 KASSERT(mutex_owned(&fdp->fd_lock));
229 fd_checkmaps(fdp);
287 fd_used(filedesc_t *fdp, unsigned fd)
292 ff = fdp->fd_dt->dt_ff[fd];
294 KASSERT(mutex_owned(&fdp->fd_lock));
295 KASSERT((fdp->fd_lomap[off] & (1U << (fd & NDENTRYMASK))) == 0);
301 fdp->fd_lomap[off] |= 1U << (fd & NDENTRYMASK);
302 if (__predict_false(fdp->fd_lomap[off] == ~0)) {
303 KASSERT((fdp->fd_himap[off >> NDENTRYSHIFT] &
305 fdp->fd_himap[off >> NDENTRYSHIFT] |= 1U << (off & NDENTRYMASK);
308 if ((int)fd > fdp->fd_lastfile) {
309 fdp->fd_lastfile = fd;
312 fd_checkmaps(fdp);
316 fd_unused(filedesc_t *fdp, unsigned fd)
321 ff = fdp->fd_dt->dt_ff[fd];
323 KASSERT(mutex_owned(&fdp->fd_lock));
328 if (fd < fdp->fd_freefile) {
329 fdp->fd_freefile = fd;
332 if (fdp->fd_lomap[off] == ~0) {
333 KASSERT((fdp->fd_himap[off >> NDENTRYSHIFT] &
335 fdp->fd_himap[off >> NDENTRYSHIFT] &=
338 KASSERT((fdp->fd_lomap[off] & (1U << (fd & NDENTRYMASK))) != 0);
339 fdp->fd_lomap[off] &= ~(1U << (fd & NDENTRYMASK));
342 KASSERT(fd <= fdp->fd_lastfile);
343 if (fd == fdp->fd_lastfile) {
344 fdp->fd_lastfile = fd_last_set(fdp, fd);
346 fd_checkmaps(fdp);
356 filedesc_t *fdp;
365 fdp = curlwp->l_fd;
366 dt = atomic_load_consume(&fdp->fd_dt);
371 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
377 if (fdp->fd_refcnt == 1) {
447 filedesc_t *fdp;
451 fdp = curlwp->l_fd;
452 KASSERT(fd < atomic_load_consume(&fdp->fd_dt)->dt_nfiles);
453 ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
457 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
459 if (fdp->fd_refcnt == 1) {
569 filedesc_t *fdp;
574 fdp = p->p_fd;
575 mutex_enter(&fdp->fd_lock);
576 dt = fdp->fd_dt;
578 mutex_exit(&fdp->fd_lock);
582 mutex_exit(&fdp->fd_lock);
586 mutex_exit(&fdp->fd_lock);
592 mutex_exit(&fdp->fd_lock);
607 filedesc_t *fdp;
616 fdp = l->l_fd;
617 ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
619 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
621 mutex_enter(&fdp->fd_lock);
633 mutex_exit(&fdp->fd_lock);
661 if (fdp->fd_refcnt == 1) {
684 mutex_exit(&fdp->fd_lock);
698 mutex_enter(&fdp->fd_lock);
709 cv_wait(&ff->ff_closing, &fdp->fd_lock);
731 mutex_exit(&fdp->fd_lock);
733 mutex_enter(&fdp->fd_lock);
737 fd_unused(fdp, fd);
738 mutex_exit(&fdp->fd_lock);
772 filedesc_t *fdp = curlwp->l_fd;
782 while (newfd >= atomic_load_consume(&fdp->fd_dt)->dt_nfiles) {
793 mutex_enter(&fdp->fd_lock);
794 while (fd_isused(fdp, newfd)) {
795 mutex_exit(&fdp->fd_lock);
806 mutex_enter(&fdp->fd_lock);
808 dt = fdp->fd_dt;
814 fd_used(fdp, newfd);
815 mutex_exit(&fdp->fd_lock);
891 filedesc_t *fdp = p->p_fd;
902 mutex_enter(&fdp->fd_lock);
903 fd_checkmaps(fdp);
904 dt = fdp->fd_dt;
905 KASSERT(dt->dt_ff[0] == (fdfile_t *)fdp->fd_dfdfile[0]);
910 if ((i = want) < fdp->fd_freefile)
911 i = fdp->fd_freefile;
913 hi = fd_next_zero(fdp, fdp->fd_himap, off,
917 i = fd_next_zero(fdp, &fdp->fd_lomap[hi],
937 fd_used(fdp, i);
938 if (want <= fdp->fd_freefile) {
939 fdp->fd_freefile = i;
943 dt->dt_ff[i] == (fdfile_t *)fdp->fd_dfdfile[i]);
944 fd_checkmaps(fdp);
945 mutex_exit(&fdp->fd_lock);
951 mutex_exit(&fdp->fd_lock);
1038 filedesc_t *fdp;
1045 fdp = p->p_fd;
1048 oldnfiles = atomic_load_consume(&fdp->fd_dt)->dt_nfiles;
1060 mutex_enter(&fdp->fd_lock);
1061 dt = fdp->fd_dt;
1062 KASSERT(dt->dt_ff[0] == (fdfile_t *)fdp->fd_dfdfile[0]);
1064 /* fdp changed; caller must retry */
1065 mutex_exit(&fdp->fd_lock);
1086 if (fdp->fd_refcnt > 1) {
1095 memcpy(newhimap, fdp->fd_himap, i);
1100 memcpy(newlomap, fdp->fd_lomap, i);
1105 fd_map_free(oldnfiles, fdp->fd_lomap, fdp->fd_himap);
1107 fdp->fd_himap = newhimap;
1108 fdp->fd_lomap = newlomap;
1115 atomic_store_release(&fdp->fd_dt, newdt);
1116 KASSERT(newdt->dt_ff[0] == (fdfile_t *)fdp->fd_dfdfile[0]);
1117 fd_checkmaps(fdp);
1118 mutex_exit(&fdp->fd_lock);
1180 filedesc_t *fdp;
1193 fdp = p->p_fd;
1194 dt = atomic_load_consume(&fdp->fd_dt);
1200 KASSERT(fd_isused(fdp, fd));
1201 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1213 filedesc_t *fdp;
1218 fdp = p->p_fd;
1219 ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
1223 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1225 mutex_enter(&fdp->fd_lock);
1226 KASSERT(fd_isused(fdp, fd));
1227 fd_unused(fdp, fd);
1228 mutex_exit(&fdp->fd_lock);
1317 fd_init(filedesc_t *fdp)
1323 if (__predict_true(fdp == NULL)) {
1324 fdp = pool_cache_get(filedesc_cache, PR_WAITOK);
1326 KASSERT(fdp == &filedesc0);
1327 filedesc_ctor(NULL, fdp, PR_WAITOK);
1331 KASSERT(fdp->fd_lastfile == -1);
1332 KASSERT(fdp->fd_lastkqfile == -1);
1333 KASSERT(fdp->fd_knhash == NULL);
1334 KASSERT(fdp->fd_freefile == 0);
1335 KASSERT(fdp->fd_exclose == false);
1336 KASSERT(fdp->fd_foclose == false);
1337 KASSERT(fdp->fd_dt == &fdp->fd_dtbuiltin);
1338 KASSERT(fdp->fd_dtbuiltin.dt_nfiles == NDFILE);
1340 KASSERT(fdp->fd_dtbuiltin.dt_ff[fd] ==
1341 (fdfile_t *)fdp->fd_dfdfile[fd]);
1344 KASSERT(fdp->fd_dtbuiltin.dt_ff[fd] == NULL);
1346 KASSERT(fdp->fd_himap == fdp->fd_dhimap);
1347 KASSERT(fdp->fd_lomap == fdp->fd_dlomap);
1350 fdp->fd_refcnt = 1;
1351 fd_checkmaps(fdp);
1353 return fdp;
1362 filedesc_t *fdp = obj;
1366 memset(fdp, 0, sizeof(*fdp));
1367 mutex_init(&fdp->fd_lock, MUTEX_DEFAULT, IPL_NONE);
1368 fdp->fd_lastfile = -1;
1369 fdp->fd_lastkqfile = -1;
1370 fdp->fd_dt = &fdp->fd_dtbuiltin;
1371 fdp->fd_dtbuiltin.dt_nfiles = NDFILE;
1372 fdp->fd_himap = fdp->fd_dhimap;
1373 fdp->fd_lomap = fdp->fd_dlomap;
1375 CTASSERT(sizeof(fdp->fd_dfdfile[0]) >= sizeof(fdfile_t));
1376 for (i = 0, ffp = fdp->fd_dt->dt_ff; i < NDFDFILE; i++, ffp++) {
1377 fdfile_ctor(*ffp = (fdfile_t *)fdp->fd_dfdfile[i]);
1386 filedesc_t *fdp = obj;
1390 fdfile_dtor((fdfile_t *)fdp->fd_dfdfile[i]);
1393 mutex_destroy(&fdp->fd_lock);
1402 filedesc_t *fdp;
1404 fdp = curlwp->l_fd;
1405 p->p_fd = fdp;
1406 atomic_inc_uint(&fdp->fd_refcnt);
1415 filedesc_t *fdp = l->l_fd;
1417 atomic_inc_uint(&fdp->fd_refcnt);
1426 filedesc_t *newfdp, *fdp;
1432 fdp = curproc->p_fd;
1454 mutex_enter(&fdp->fd_lock);
1455 fd_checkmaps(fdp);
1456 numfiles = fdp->fd_dt->dt_nfiles;
1457 lastfile = fdp->fd_lastfile;
1496 newfdp->fd_freefile = fdp->fd_freefile;
1497 newfdp->fd_exclose = fdp->fd_exclose;
1500 ffp = fdp->fd_dt->dt_ff;
1555 mutex_exit(&fdp->fd_lock);
1571 filedesc_t * const fdp = l->l_fd;
1574 KASSERT(atomic_load_consume(&fdp->fd_dt)->dt_ff[0] ==
1575 (fdfile_t *)fdp->fd_dfdfile[0]);
1576 KASSERT(fdp->fd_dtbuiltin.dt_nfiles == NDFILE);
1577 KASSERT(fdp->fd_dtbuiltin.dt_link == NULL);
1580 if (atomic_dec_uint_nv(&fdp->fd_refcnt) > 0)
1587 dt = fdp->fd_dt;
1588 fd_checkmaps(fdp);
1590 fdp->fd_refcnt = -1; /* see fd_checkmaps */
1595 ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1632 if (__predict_false(dt != &fdp->fd_dtbuiltin)) {
1633 fd_dtab_free(fdp->fd_dt);
1635 memset(&fdp->fd_dtbuiltin.dt_ff[NDFDFILE], 0,
1636 (NDFILE - NDFDFILE) * sizeof(fdp->fd_dtbuiltin.dt_ff[0]));
1637 fdp->fd_dt = &fdp->fd_dtbuiltin;
1640 KASSERT(fdp->fd_himap != fdp->fd_dhimap);
1641 KASSERT(fdp->fd_lomap != fdp->fd_dlomap);
1642 fd_map_free(nf, fdp->fd_lomap, fdp->fd_himap);
1644 if (__predict_false(fdp->fd_knhash != NULL)) {
1645 hashdone(fdp->fd_knhash, HASH_LIST, fdp->fd_knhashmask);
1646 fdp->fd_knhash = NULL;
1647 fdp->fd_knhashmask = 0;
1649 KASSERT(fdp->fd_knhashmask == 0);
1651 fdp->fd_dt = &fdp->fd_dtbuiltin;
1652 fdp->fd_lastkqfile = -1;
1653 fdp->fd_lastfile = -1;
1654 fdp->fd_freefile = 0;
1655 fdp->fd_exclose = false;
1656 fdp->fd_foclose = false;
1657 memset(&fdp->fd_startzero, 0, sizeof(*fdp) -
1659 fdp->fd_himap = fdp->fd_dhimap;
1660 fdp->fd_lomap = fdp->fd_dlomap;
1661 KASSERT(fdp->fd_dtbuiltin.dt_nfiles == NDFILE);
1662 KASSERT(fdp->fd_dtbuiltin.dt_link == NULL);
1663 KASSERT(fdp->fd_dt == &fdp->fd_dtbuiltin);
1665 fdp->fd_refcnt = 0; /* see fd_checkmaps */
1667 fd_checkmaps(fdp);
1668 pool_cache_put(filedesc_cache, fdp);
1718 filedesc_t *fdp;
1727 fdp = curlwp->l_fd;
1728 dt = atomic_load_consume(&fdp->fd_dt);
1777 filedesc_t *fdp;
1785 fdp = p->p_fd;
1787 if (fdp->fd_refcnt > 1) {
1791 fdp = fd_copy();
1793 p->p_fd = fdp;
1794 l->l_fd = fdp;
1800 if (!(fdp->fd_exclose || fdp->fd_foclose))
1803 fdp->fd_exclose = false; /* there will be none when done */
1804 fdp->fd_foclose = false;
1806 dt = atomic_load_consume(&fdp->fd_dt);
1808 for (fd = 0; fd <= fdp->fd_lastfile; fd++) {
1814 ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1879 filedesc_t *fdp = l->l_fd;
1880 fdfile_t *ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
1884 fdp->fd_exclose = true;
1890 filedesc_t *fdp = l->l_fd;
1891 fdfile_t *ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
1895 fdp->fd_foclose = true;