Lines Matching defs:fli

159 	struct fstrans_lwp_info *fli = obj;
161 memset(fli, 0, sizeof(*fli));
164 LIST_INSERT_HEAD(&fstrans_fli_head, fli, fli_list);
176 struct fstrans_lwp_info *fli = obj;
179 LIST_REMOVE(fli, fli_list);
189 struct fstrans_lwp_info *fli, *fli_next;
195 for (fli = l->l_fstrans; fli; fli = fli_next) {
196 KASSERT(fli->fli_trans_cnt == 0);
197 KASSERT(fli->fli_cow_cnt == 0);
198 KASSERT(fli->fli_self == l);
199 if (fli->fli_mount != NULL)
200 fstrans_mount_dtor(fli->fli_mountinfo);
201 fli_next = fli->fli_succ;
202 fli->fli_alias_cnt = 0;
203 fli->fli_mount = NULL;
204 fli->fli_alias = NULL;
205 fli->fli_mountinfo = NULL;
206 fli->fli_self = NULL;
210 for (fli = l->l_fstrans; fli; fli = fli_next) {
211 fli_next = fli->fli_succ;
212 pool_cache_put(fstrans_lwp_cache, fli);
352 struct fstrans_lwp_info **p, *fli, *tofree = NULL;
359 fli = *p;
360 if (fli->fli_mount != NULL &&
361 fli->fli_mountinfo->fmi_gone &&
362 fli->fli_trans_cnt == 0 &&
363 fli->fli_cow_cnt == 0 &&
364 fli->fli_alias_cnt == 0) {
366 fstrans_mount_dtor(fli->fli_mountinfo);
367 if (fli->fli_alias) {
368 KASSERT(fli->fli_alias->fli_alias_cnt > 0);
369 fli->fli_alias->fli_alias_cnt--;
371 fli->fli_mount = NULL;
372 fli->fli_alias = NULL;
373 fli->fli_mountinfo = NULL;
374 fli->fli_self = NULL;
376 fli->fli_succ = tofree;
377 tofree = fli;
383 for (fli = curlwp->l_fstrans; fli; fli = fli->fli_succ)
384 if (fli->fli_alias != NULL)
385 KASSERT(fli->fli_alias->fli_self == curlwp);
390 fli = tofree;
391 tofree = fli->fli_succ;
392 pool_cache_put(fstrans_lwp_cache, fli);
402 struct fstrans_lwp_info *fli, *fli_lower;
405 for (fli = curlwp->l_fstrans; fli; fli = fli->fli_succ) {
406 if (fli->fli_mount == mp)
407 return fli;
439 fli = pool_cache_get(fstrans_lwp_cache, PR_WAITOK);
440 KASSERT(fli->fli_trans_cnt == 0);
441 KASSERT(fli->fli_cow_cnt == 0);
442 KASSERT(fli->fli_alias_cnt == 0);
443 KASSERT(fli->fli_mount == NULL);
444 KASSERT(fli->fli_alias == NULL);
445 KASSERT(fli->fli_mountinfo == NULL);
446 KASSERT(fli->fli_self == NULL);
452 fli->fli_self = curlwp;
453 fli->fli_mount = mp;
454 fli->fli_mountinfo = fmi;
456 fli->fli_succ = curlwp->l_fstrans;
457 curlwp->l_fstrans = fli;
460 fli->fli_alias = fli_lower;
461 fli->fli_alias->fli_alias_cnt++;
462 fli = fli->fli_alias;
465 return fli;
474 struct fstrans_lwp_info *fli;
479 for (fli = curlwp->l_fstrans; fli; fli = fli->fli_succ) {
480 if (fli->fli_mount == mp) {
482 fli->fli_alias != NULL);
483 if (fli->fli_alias != NULL)
484 fli = fli->fli_alias;
490 if (__predict_false(fli == NULL))
491 fli = fstrans_alloc_lwp_info(mp);
494 return fli;
523 struct fstrans_lwp_info *fli;
528 fli = fstrans_get_lwp_info(mp, true);
529 if (fli == NULL)
531 fmi = fli->fli_mountinfo;
533 if (fli->fli_trans_cnt > 0) {
534 fli->fli_trans_cnt += 1;
541 fli->fli_trans_cnt = 1;
542 fli->fli_lock_type = lock_type;
555 fli->fli_trans_cnt = 1;
556 fli->fli_lock_type = lock_type;
594 struct fstrans_lwp_info *fli;
597 fli = fstrans_get_lwp_info(mp, false);
598 if (fli == NULL)
600 fmi = fli->fli_mountinfo;
601 KASSERT(fli->fli_trans_cnt > 0);
603 if (fli->fli_trans_cnt > 1) {
604 fli->fli_trans_cnt -= 1;
614 fli->fli_trans_cnt = 0;
622 fli->fli_trans_cnt = 0;
633 struct fstrans_lwp_info *fli;
638 fli = fstrans_get_lwp_info(mp, false);
639 if (fli == NULL)
641 fmi = fli->fli_mountinfo;
643 return (fli->fli_trans_cnt > 0 || fmi->fmi_owner == curlwp);
652 struct fstrans_lwp_info *fli;
657 fli = fstrans_get_lwp_info(mp, false);
658 if (fli == NULL)
660 fmi = fli->fli_mountinfo;
671 struct fstrans_lwp_info *fli;
675 LIST_FOREACH(fli, &fstrans_fli_head, fli_list) {
676 if (fli->fli_mountinfo != fmi)
678 if (fli->fli_trans_cnt == 0)
680 if (fli->fli_self == curlwp)
682 if (grant_lock(fmi, fli->fli_lock_type))
699 struct fstrans_lwp_info *fli;
704 fli = fstrans_get_lwp_info(mp, true);
705 if (fli == NULL)
707 fmi = fli->fli_mountinfo;
750 struct fstrans_lwp_info *fli;
755 fli = fstrans_get_lwp_info(mp, true);
756 KASSERT(fli != NULL);
757 fmi = fli->fli_mountinfo;
768 struct fstrans_lwp_info *fli;
774 fli = fstrans_get_lwp_info(mp, true);
775 if (fli == NULL)
784 if ((error = VFS_SUSPENDCTL(fli->fli_mount, SUSPEND_SUSPEND)) != 0) {
803 struct fstrans_lwp_info *fli;
807 fli = fstrans_get_lwp_info(mp, false);
808 mp = fli->fli_mount;
820 struct fstrans_lwp_info *fli;
825 LIST_FOREACH(fli, &fstrans_fli_head, fli_list) {
826 if (fli->fli_mount != fmi->fmi_mount)
828 if (fli->fli_cow_cnt == 0)
948 struct fstrans_lwp_info *fli;
970 fli = fstrans_get_lwp_info(mp, true);
971 KASSERT(fli != NULL);
972 fmi = fli->fli_mountinfo;
978 if (fli->fli_cow_cnt == 0) {
985 fli->fli_cow_cnt = 1;
988 fli->fli_cow_cnt = 1;
992 fli->fli_cow_cnt += 1;
1007 if (fli->fli_cow_cnt > 1) {
1008 fli->fli_cow_cnt -= 1;
1014 fli->fli_cow_cnt = 0;
1018 fli->fli_cow_cnt = 0;
1033 struct fstrans_lwp_info *fli;
1036 LIST_FOREACH(fli, &fstrans_fli_head, fli_list) {
1037 if (fli->fli_self != l)
1039 if (fli->fli_trans_cnt == 0 && fli->fli_cow_cnt == 0) {
1045 printf(" @%p", fli);
1046 if (fli->fli_mount == dead_rootmount)
1048 else if (fli->fli_mount != NULL)
1049 printf(" (%s)", fli->fli_mount->mnt_stat.f_mntonname);
1052 if (fli->fli_alias != NULL) {
1053 struct mount *amp = fli->fli_alias->fli_mount;
1057 printf(" @%p", fli->fli_alias);
1063 if (fli->fli_mountinfo && fli->fli_mountinfo->fmi_gone)
1065 if (fli->fli_trans_cnt == 0) {
1068 switch (fli->fli_lock_type) {
1076 printf(" %#x", fli->fli_lock_type);
1081 fli->fli_trans_cnt, fli->fli_cow_cnt, fli->fli_alias_cnt);