Home | History | Annotate | Download | only in kern

Lines Matching defs:ff

260 	fdfile_t **ff = fd->fd_dt->dt_ff;
280 while (i > 0 && (ff[i] == NULL || !ff[i]->ff_allocated))
290 fdfile_t *ff;
292 ff = fdp->fd_dt->dt_ff[fd];
296 KASSERT(ff != NULL);
297 KASSERT(ff->ff_file == NULL);
298 KASSERT(!ff->ff_allocated);
300 ff->ff_allocated = true;
319 fdfile_t *ff;
321 ff = fdp->fd_dt->dt_ff[fd];
324 KASSERT(ff != NULL);
325 KASSERT(ff->ff_file == NULL);
326 KASSERT(ff->ff_allocated);
340 ff->ff_allocated = false;
357 fdfile_t *ff;
370 ff = dt->dt_ff[fd];
371 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
372 if (__predict_false(ff == NULL)) {
383 ff->ff_refcnt++;
393 * A. fd_close store ff->ff_file = NULL
394 * B. fd_close refcnt = atomic_dec_uint_nv(&ff->ff_refcnt)
395 * C. fd_getfile atomic_inc_uint(&ff->ff_refcnt)
396 * D. fd_getfile load fp = ff->ff_file
400 * 1. D: fp = ff->ff_file
401 * 2. A: ff->ff_file = NULL
402 * 3. B: refcnt = atomic_dec_uint_nv(&ff->ff_refcnt)
403 * 4. C: atomic_inc_uint(&ff->ff_refcnt)
425 atomic_inc_uint(&ff->ff_refcnt);
433 fp = atomic_load_consume(&ff->ff_file);
448 fdfile_t *ff;
453 ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
455 KASSERT(ff != NULL);
456 KASSERT((ff->ff_refcnt & FR_MASK) > 0);
457 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
465 if (__predict_false((ff->ff_refcnt & FR_CLOSING) != 0)) {
469 ff->ff_refcnt--;
487 for (u = ff->ff_refcnt & FR_MASK;; u = v) {
488 v = atomic_cas_uint(&ff->ff_refcnt, u, u - 1);
570 fdfile_t *ff;
581 if ((ff = dt->dt_ff[fd]) == NULL) {
585 if ((fp = atomic_load_consume(&ff->ff_file)) == NULL) {
608 fdfile_t *ff;
617 ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
619 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
622 KASSERT((ff->ff_refcnt & FR_MASK) > 0);
623 fp = atomic_load_consume(&ff->ff_file);
631 atomic_dec_uint(&ff->ff_refcnt);
632 cv_broadcast(&ff->ff_closing);
642 KASSERT((ff->ff_refcnt & FR_CLOSING) == 0);
650 atomic_store_relaxed(&ff->ff_file, NULL);
651 ff->ff_exclose = false;
652 ff->ff_foclose = false;
663 refcnt = --(ff->ff_refcnt);
667 refcnt = atomic_dec_uint_nv(&ff->ff_refcnt);
678 atomic_or_uint(&ff->ff_refcnt, FR_CLOSING);
685 if (!SLIST_EMPTY(&ff->ff_knlist)) {
708 while ((ff->ff_refcnt & FR_MASK) != 0) {
709 cv_wait(&ff->ff_closing, &fdp->fd_lock);
711 atomic_and_uint(&ff->ff_refcnt, ~FR_CLOSING);
714 KASSERT(SLIST_EMPTY(&ff->ff_knlist));
773 fdfile_t *ff;
785 ff = kmem_alloc(sizeof(*ff), KM_SLEEP);
786 fdfile_ctor(ff);
811 dt->dt_ff[newfd] = ff;
812 ff = NULL;
822 if (ff != NULL) {
823 cv_destroy(&ff->ff_closing);
824 kmem_free(ff, sizeof(*ff));
1179 fdfile_t *ff;
1195 ff = dt->dt_ff[fd];
1197 KASSERT(ff != NULL);
1198 KASSERT(ff->ff_file == NULL);
1199 KASSERT(ff->ff_allocated);
1201 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1204 atomic_store_release(&ff->ff_file, fp);
1214 fdfile_t *ff;
1219 ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
1220 ff->ff_exclose = false;
1221 ff->ff_foclose = false;
1223 KASSERT(fd >= NDFDFILE || ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1281 fdfile_ctor(fdfile_t *ff)
1284 memset(ff, 0, sizeof(*ff));
1285 cv_init(&ff->ff_closing, "fdclose");
1289 fdfile_dtor(fdfile_t *ff)
1292 cv_destroy(&ff->ff_closing);
1427 fdfile_t *ff, **ffp, **nffp, *ff2;
1506 ff = *ffp;
1507 if (ff == NULL ||
1508 (fp = atomic_load_consume(&ff->ff_file)) == NULL) {
1513 if (__predict_false(ff->ff_foclose ||
1536 ff2->ff_exclose = ff->ff_exclose;
1566 fdfile_t *ff;
1593 ff = dt->dt_ff[fd];
1595 ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1596 if (ff == NULL)
1598 if ((fp = atomic_load_consume(&ff->ff_file)) != NULL) {
1604 if (__predict_true(ff->ff_refcnt == 0) &&
1606 ff->ff_file = NULL;
1607 ff->ff_exclose = false;
1608 ff->ff_foclose = false;
1609 ff->ff_allocated = false;
1612 ff->ff_refcnt++;
1616 KASSERT(ff->ff_refcnt == 0);
1617 KASSERT(ff->ff_file == NULL);
1618 KASSERT(!ff->ff_exclose);
1619 KASSERT(!ff->ff_foclose);
1620 KASSERT(!ff->ff_allocated);
1622 cv_destroy(&ff->ff_closing);
1623 kmem_free(ff, sizeof(*ff));
1719 fdfile_t *ff;
1729 ff = dt->dt_ff[old];
1752 error = fd_dup(fp, 0, newp, ff->ff_exclose, ff->ff_foclose);
1755 error = fd_dup(fp, 0, newp, ff->ff_exclose, ff->ff_foclose);
1778 fdfile_t *ff;
1809 if ((ff = dt->dt_ff[fd]) == NULL) {
1814 ff == (fdfile_t *)fdp->fd_dfdfile[fd]);
1815 if (ff->ff_file == NULL)
1817 if (ff->ff_exclose) {
1823 KASSERT((ff->ff_refcnt & FR_CLOSING) == 0);
1824 ff->ff_refcnt++;
1826 } else if (ff->ff_foclose) {
1832 ff->ff_foclose = false;
1880 fdfile_t *ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
1882 ff->ff_exclose = exclose;
1891 fdfile_t *ff = atomic_load_consume(&fdp->fd_dt)->dt_ff[fd];
1893 ff->ff_foclose = foclose;
2067 fdfile_t *ff;
2069 if ((ff = dt->dt_ff[i]) == NULL) {
2072 if ((fp = atomic_load_consume(&ff->ff_file)) == NULL) {
2169 fdfile_t *ff;
2171 if ((ff = dt->dt_ff[i]) == NULL) {
2174 if ((fp = atomic_load_consume(&ff->ff_file)) == NULL) {
2246 fdfile_t *ff;
2326 if ((ff = dt->dt_ff[i]) == NULL) {
2329 if ((fp = atomic_load_consume(&ff->ff_file)) ==
2340 fill_file2(&kf, fp, ff, i, p->p_pid);
2413 fill_file2(struct kinfo_file *kp, const file_t *fp, const fdfile_t *ff,
2447 if (ff != NULL) {
2450 kp->ki_ofileflags = (ff->ff_exclose ? FD_CLOEXEC : 0) |
2451 (ff->ff_foclose ? FD_CLOFORK : 0);
2452 kp->ki_usecount = ff->ff_refcnt;