Lines Matching refs:fnp

100 	fnnode_t *fnp,  in auto_unblock_others()  argument
104 fnp->fn_flags &= ~operation; in auto_unblock_others()
105 if (fnp->fn_flags & MF_WAITING) { in auto_unblock_others()
106 fnp->fn_flags &= ~MF_WAITING; in auto_unblock_others()
107 cv_broadcast(&fnp->fn_cv_mount); in auto_unblock_others()
112 auto_wait4mount(fnnode_t *fnp) in auto_wait4mount() argument
117 AUTOFS_DPRINT((4, "auto_wait4mount: fnp=%p\n", (void *)fnp)); in auto_wait4mount()
119 mutex_enter(&fnp->fn_lock); in auto_wait4mount()
120 while (fnp->fn_flags & (MF_INPROG | MF_LOOKUP)) { in auto_wait4mount()
124 fnp->fn_flags |= MF_WAITING; in auto_wait4mount()
126 if (!cv_wait_sig(&fnp->fn_cv_mount, &fnp->fn_lock)) { in auto_wait4mount()
132 mutex_exit(&fnp->fn_lock); in auto_wait4mount()
137 error = fnp->fn_error; in auto_wait4mount()
146 mutex_exit(&fnp->fn_lock); in auto_wait4mount()
148 AUTOFS_DPRINT((5, "auto_wait4mount: fnp=%p error=%d\n", (void *)fnp, in auto_wait4mount()
154 auto_lookup_aux(fnnode_t *fnp, char *name, cred_t *cred) in auto_lookup_aux() argument
161 fnip = vfstofni(fntovn(fnp)->v_vfsp); in auto_lookup_aux()
171 error = auto_perform_link(fnp, &link, cred); in auto_lookup_aux()
179 mutex_enter(&fnp->fn_lock); in auto_lookup_aux()
180 AUTOFS_BLOCK_OTHERS(fnp, MF_INPROG); in auto_lookup_aux()
181 fnp->fn_error = 0; in auto_lookup_aux()
194 AUTOFS_UNBLOCK_OTHERS(fnp, MF_LOOKUP); in auto_lookup_aux()
195 mutex_exit(&fnp->fn_lock); in auto_lookup_aux()
200 auto_new_mount_thread(fnp, name, cred); in auto_lookup_aux()
206 error = auto_wait4mount(fnp); in auto_lookup_aux()
216 mutex_enter(&fnp->fn_lock); in auto_lookup_aux()
217 fnp->fn_error = error; in auto_lookup_aux()
224 AUTOFS_UNBLOCK_OTHERS(fnp, MF_INPROG); in auto_lookup_aux()
226 AUTOFS_UNBLOCK_OTHERS(fnp, MF_LOOKUP); in auto_lookup_aux()
228 mutex_exit(&fnp->fn_lock); in auto_lookup_aux()
248 fnnode_t *fnp; in auto_mount_thread() local
262 fnp = argsp->fnc_fnp; in auto_mount_thread()
263 vp = fntovn(fnp); in auto_mount_thread()
271 error = auto_perform_actions(fnip, fnp, alp, cred); in auto_mount_thread()
272 mutex_enter(&fnp->fn_lock); in auto_mount_thread()
273 fnp->fn_error = error; in auto_mount_thread()
279 AUTOFS_UNBLOCK_OTHERS(fnp, MF_INPROG); in auto_mount_thread()
280 mutex_exit(&fnp->fn_lock); in auto_mount_thread()
302 auto_new_mount_thread(fnnode_t *fnp, char *name, cred_t *cred) in auto_new_mount_thread() argument
307 VN_HOLD(fntovn(fnp)); in auto_new_mount_thread()
308 argsp->fnc_fnp = fnp; in auto_new_mount_thread()
830 auto_perform_link(fnnode_t *fnp, struct linka *linkp, cred_t *cred) in auto_perform_link() argument
837 (void *)fnp, linkp->dir, linkp->link)); in auto_perform_link()
842 mutex_enter(&fnp->fn_lock); in auto_perform_link()
843 fnp->fn_symlink = tmp; in auto_perform_link()
844 fnp->fn_symlinklen = (uint_t)len; in auto_perform_link()
845 fnp->fn_flags |= MF_THISUID_MATCH_RQD; in auto_perform_link()
847 fnp->fn_cred = cred; in auto_perform_link()
848 mutex_exit(&fnp->fn_lock); in auto_perform_link()
850 vp = fntovn(fnp); in auto_perform_link()
1384 fnnode_t *fnp; in auto_makefnnode() local
1397 fnp = kmem_zalloc(sizeof (*fnp), KM_SLEEP); in auto_makefnnode()
1398 fnp->fn_vnode = vn_alloc(KM_SLEEP); in auto_makefnnode()
1400 vp = fntovn(fnp); in auto_makefnnode()
1403 fnp->fn_name = &tmpname[0]; in auto_makefnnode()
1404 fnp->fn_namelen = (int)strlen(tmpname) + 1; /* include '\0' */ in auto_makefnnode()
1405 fnp->fn_uid = crgetuid(cred); in auto_makefnnode()
1406 fnp->fn_gid = crgetgid(cred); in auto_makefnnode()
1415 fnp->fn_mode = AUTOFS_MODE; in auto_makefnnode()
1417 fnp->fn_atime = fnp->fn_mtime = fnp->fn_ctime = now; in auto_makefnnode()
1418 fnp->fn_ref_time = now.tv_sec; in auto_makefnnode()
1420 fnp->fn_nodeid = nodeid; in auto_makefnnode()
1422 fnp->fn_globals = fngp; in auto_makefnnode()
1427 vp->v_data = (void *)fnp; in auto_makefnnode()
1429 mutex_init(&fnp->fn_lock, NULL, MUTEX_DEFAULT, NULL); in auto_makefnnode()
1430 rw_init(&fnp->fn_rwlock, NULL, RW_DEFAULT, NULL); in auto_makefnnode()
1431 cv_init(&fnp->fn_cv_mount, NULL, CV_DEFAULT, NULL); in auto_makefnnode()
1433 return (fnp); in auto_makefnnode()
1438 auto_freefnnode(fnnode_t *fnp) in auto_freefnnode() argument
1440 vnode_t *vp = fntovn(fnp); in auto_freefnnode()
1442 AUTOFS_DPRINT((4, "auto_freefnnode: fnp=%p\n", (void *)fnp)); in auto_freefnnode()
1444 ASSERT(fnp->fn_linkcnt == 0); in auto_freefnnode()
1446 ASSERT(fnp->fn_dirents == NULL); in auto_freefnnode()
1447 ASSERT(fnp->fn_parent == NULL); in auto_freefnnode()
1450 kmem_free(fnp->fn_name, fnp->fn_namelen); in auto_freefnnode()
1451 if (fnp->fn_symlink) { in auto_freefnnode()
1452 ASSERT(fnp->fn_flags & MF_THISUID_MATCH_RQD); in auto_freefnnode()
1453 kmem_free(fnp->fn_symlink, fnp->fn_symlinklen); in auto_freefnnode()
1455 if (fnp->fn_cred) in auto_freefnnode()
1456 crfree(fnp->fn_cred); in auto_freefnnode()
1457 mutex_destroy(&fnp->fn_lock); in auto_freefnnode()
1458 rw_destroy(&fnp->fn_rwlock); in auto_freefnnode()
1459 cv_destroy(&fnp->fn_cv_mount); in auto_freefnnode()
1463 fnp->fn_globals->fng_fnnode_count--; in auto_freefnnode()
1465 kmem_free(fnp, sizeof (*fnp)); in auto_freefnnode()
1471 fnnode_t *fnp) in auto_disconnect() argument
1474 vnode_t *vp = fntovn(fnp); in auto_disconnect()
1479 (void *)dfnp, (void *)fnp, fnp->fn_linkcnt, vp->v_count)); in auto_disconnect()
1482 ASSERT(fnp->fn_linkcnt == 1); in auto_disconnect()
1492 fnp->fn_linkcnt--; in auto_disconnect()
1493 fnp->fn_size--; in auto_disconnect()
1498 fnp->fn_parent = NULL; in auto_disconnect()
1506 (void *)fnp, (void *)dfnp); in auto_disconnect()
1508 if (tmp == fnp) { in auto_disconnect()
1519 mutex_enter(&fnp->fn_lock); in auto_disconnect()
1521 fnp->fn_atime = fnp->fn_mtime = now; in auto_disconnect()
1522 mutex_exit(&fnp->fn_lock); in auto_disconnect()
1785 unmount_triggers(fnnode_t *fnp, action_list **alp) in unmount_triggers() argument
1792 AUTOFS_DPRINT((4, "unmount_triggers: fnp=%p\n", (void *)fnp)); in unmount_triggers()
1793 ASSERT(RW_WRITE_HELD(&fnp->fn_rwlock)); in unmount_triggers()
1795 *alp = fnp->fn_alp; in unmount_triggers()
1796 next = fnp->fn_trigger; in unmount_triggers()
1809 rw_exit(&fnp->fn_rwlock); in unmount_triggers()
1826 rw_enter(&fnp->fn_rwlock, RW_WRITER); in unmount_triggers()
1832 VN_RELE(fntovn(fnp)); in unmount_triggers()
1833 fnp->fn_trigger = NULL; in unmount_triggers()
1834 fnp->fn_alp = NULL; in unmount_triggers()
1844 triggers_busy(fnnode_t *fnp) in triggers_busy() argument
1851 ASSERT(RW_WRITE_HELD(&fnp->fn_rwlock)); in triggers_busy()
1853 for (tp = fnp->fn_trigger; tp != NULL; tp = tp->fn_next) { in triggers_busy()
1879 for (done = 0, t1p = fnp->fn_trigger; !done; in triggers_busy()
2004 fnnode_t *fnp; in check_auto_node() local
2013 fnp = vntofn(vp); in check_auto_node()
2016 if (fnp->fn_flags & MF_TRIGGER) { in check_auto_node()
2022 if (fnp->fn_trigger != NULL) { in check_auto_node()
2059 fnnode_t *fnp, *rootfnp, *nfnp; in unmount_autofs() local
2068 for (fnp = rootfnp->fn_dirents; fnp != NULL; fnp = nfnp) { in unmount_autofs()
2069 ASSERT(fntovn(fnp)->v_count == 0); in unmount_autofs()
2070 ASSERT(fnp->fn_dirents == NULL); in unmount_autofs()
2071 ASSERT(fnp->fn_linkcnt == 2); in unmount_autofs()
2072 fnp->fn_linkcnt--; in unmount_autofs()
2073 auto_disconnect(rootfnp, fnp); in unmount_autofs()
2074 nfnp = fnp->fn_next; in unmount_autofs()
2075 auto_freefnnode(fnp); in unmount_autofs()
2089 try_unmount_node(fnnode_t *fnp, boolean_t force) in try_unmount_node() argument
2100 (void *)fnp)); in try_unmount_node()
2102 ASSERT(MUTEX_HELD(&fnp->fn_lock)); in try_unmount_node()
2104 fngp = fnp->fn_globals; in try_unmount_node()
2105 vp = fntovn(fnp); in try_unmount_node()
2112 if (fnp->fn_flags & (MF_INPROG | MF_LOOKUP)) { in try_unmount_node()
2113 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2134 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2143 fnp->fn_ref_time + fnip->fi_mount_to > gethrestime_sec()) { in try_unmount_node()
2144 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2149 AUTOFS_BLOCK_OTHERS(fnp, MF_INPROG); in try_unmount_node()
2150 fnp->fn_error = 0; in try_unmount_node()
2151 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2154 rw_enter(&fnp->fn_rwlock, RW_WRITER); in try_unmount_node()
2155 if (fnp->fn_trigger != NULL) { in try_unmount_node()
2158 if (triggers_busy(fnp)) { in try_unmount_node()
2159 rw_exit(&fnp->fn_rwlock); in try_unmount_node()
2160 mutex_enter(&fnp->fn_lock); in try_unmount_node()
2161 AUTOFS_UNBLOCK_OTHERS(fnp, MF_INPROG); in try_unmount_node()
2162 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2175 unmount_triggers(fnp, &alp); in try_unmount_node()
2177 rw_exit(&fnp->fn_rwlock); in try_unmount_node()
2207 ? "" : fnp->fn_name); in try_unmount_node()
2222 ASSERT((fnp->fn_flags & MF_THISUID_MATCH_RQD) == 0); in try_unmount_node()
2227 ret = auto_perform_actions(fnip, fnp, alp, CRED()); in try_unmount_node()
2231 "fnp=%p error=%d", (void *)fnp, ret); in try_unmount_node()
2234 mutex_enter(&fnp->fn_lock); in try_unmount_node()
2235 AUTOFS_UNBLOCK_OTHERS(fnp, MF_INPROG); in try_unmount_node()
2236 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2247 mutex_enter(&fnp->fn_lock); in try_unmount_node()
2248 fnp->fn_flags &= ~MF_IK_MOUNT; in try_unmount_node()
2249 if (fnp->fn_flags & MF_WAITING) in try_unmount_node()
2250 fnp->fn_error = EAGAIN; in try_unmount_node()
2251 AUTOFS_UNBLOCK_OTHERS(fnp, MF_INPROG); in try_unmount_node()
2252 mutex_exit(&fnp->fn_lock); in try_unmount_node()
2461 fnnode_t *root, *fnp, *next; in unmount_tree() local
2491 for (fnp = root->fn_dirents; fnp != NULL; fnp = next) { in unmount_tree()
2492 VN_HOLD(fntovn(fnp)); in unmount_tree()
2494 (void) unmount_subtree(fnp, force); in unmount_tree()
2496 next = fnp->fn_next; in unmount_tree()
2497 VN_RELE(fntovn(fnp)); in unmount_tree()