Lines Matching +full:amp +full:- +full:pid +full:- +full:enable
1 /*-
29 /*-
123 &autofs_debug, 1, "Enable debug messages");
154 return (strcmp(a->an_name, b->an_name)); in autofs_node_cmp()
177 TAILQ_INIT(&autofs_softc->sc_requests); in autofs_init()
178 cv_init(&autofs_softc->sc_cv, "autofscv"); in autofs_init()
179 sx_init(&autofs_softc->sc_lock, "autofslk"); in autofs_init()
181 error = make_dev_p(MAKEDEV_CHECKNAME, &autofs_softc->sc_cdev, in autofs_init()
191 autofs_softc->sc_cdev->si_drv1 = autofs_softc; in autofs_init()
200 sx_xlock(&autofs_softc->sc_lock); in autofs_uninit()
201 if (autofs_softc->sc_dev_opened) { in autofs_uninit()
202 sx_xunlock(&autofs_softc->sc_lock); in autofs_uninit()
205 if (autofs_softc->sc_cdev != NULL) in autofs_uninit()
206 destroy_dev(autofs_softc->sc_cdev); in autofs_uninit()
211 sx_xunlock(&autofs_softc->sc_lock); in autofs_uninit()
225 p = td->td_proc; in autofs_ignore_thread()
227 if (autofs_softc->sc_dev_opened == false) in autofs_ignore_thread()
231 if (p->p_session->s_sid == autofs_softc->sc_dev_sid) { in autofs_ignore_thread()
243 struct autofs_mount *amp; in autofs_path() local
246 amp = anp->an_mount; in autofs_path()
249 for (; anp->an_parent != NULL; anp = anp->an_parent) { in autofs_path()
250 tmp = malloc(strlen(anp->an_name) + strlen(path) + 2, in autofs_path()
252 strcpy(tmp, anp->an_name); in autofs_path()
259 tmp = malloc(strlen(amp->am_mountpoint) + strlen(path) + 2, in autofs_path()
261 strcpy(tmp, amp->am_mountpoint); in autofs_path()
277 sx_xlock(&autofs_softc->sc_lock); in autofs_task()
279 ar->ar_id, ar->ar_path, autofs_timeout); in autofs_task()
283 ar->ar_error = ETIMEDOUT; in autofs_task()
284 ar->ar_wildcards = true; in autofs_task()
285 ar->ar_done = true; in autofs_task()
286 ar->ar_in_progress = false; in autofs_task()
287 cv_broadcast(&autofs_softc->sc_cv); in autofs_task()
288 sx_xunlock(&autofs_softc->sc_lock); in autofs_task()
295 struct autofs_mount *amp; in autofs_cached() local
297 amp = anp->an_mount; in autofs_cached()
299 AUTOFS_ASSERT_UNLOCKED(amp); in autofs_cached()
303 * if the node is marked as cached, but the requested top-level in autofs_cached()
308 if (anp->an_parent == NULL && componentlen != 0 && anp->an_wildcards) { in autofs_cached()
309 AUTOFS_SLOCK(amp); in autofs_cached()
311 AUTOFS_SUNLOCK(amp); in autofs_cached()
316 return (anp->an_cached); in autofs_cached()
325 anp->an_cached = false; in autofs_cache_callout()
329 autofs_flush(struct autofs_mount *amp) in autofs_flush() argument
336 amp->am_root->an_cached = false; in autofs_flush()
337 AUTOFS_DEBUG("%s flushed", amp->am_mountpoint); in autofs_flush()
353 mtx_lock(&curproc->p_sigacts->ps_mtx); in autofs_set_sigmask()
361 if (!SIGISMEMBER(curthread->td_sigmask, autofs_sig_set[i]) && in autofs_set_sigmask()
362 !SIGISMEMBER(curproc->p_sigacts->ps_sigignore, in autofs_set_sigmask()
367 mtx_unlock(&curproc->p_sigacts->ps_mtx); in autofs_set_sigmask()
385 struct autofs_mount *amp; in autofs_trigger_one() local
392 amp = anp->an_mount; in autofs_trigger_one()
394 sx_assert(&autofs_softc->sc_lock, SA_XLOCKED); in autofs_trigger_one()
396 if (anp->an_parent == NULL) { in autofs_trigger_one()
399 for (firstanp = anp; firstanp->an_parent->an_parent != NULL; in autofs_trigger_one()
400 firstanp = firstanp->an_parent) in autofs_trigger_one()
402 key = strdup(firstanp->an_name, M_AUTOFS); in autofs_trigger_one()
407 TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) { in autofs_trigger_one()
408 if (strcmp(ar->ar_path, path) != 0) in autofs_trigger_one()
410 if (strcmp(ar->ar_key, key) != 0) in autofs_trigger_one()
413 KASSERT(strcmp(ar->ar_from, amp->am_from) == 0, in autofs_trigger_one()
414 ("from changed; %s != %s", ar->ar_from, amp->am_from)); in autofs_trigger_one()
415 KASSERT(strcmp(ar->ar_prefix, amp->am_prefix) == 0, in autofs_trigger_one()
417 ar->ar_prefix, amp->am_prefix)); in autofs_trigger_one()
418 KASSERT(strcmp(ar->ar_options, amp->am_options) == 0, in autofs_trigger_one()
420 ar->ar_options, amp->am_options)); in autofs_trigger_one()
426 refcount_acquire(&ar->ar_refcount); in autofs_trigger_one()
429 ar->ar_mount = amp; in autofs_trigger_one()
431 ar->ar_id = in autofs_trigger_one()
432 atomic_fetchadd_int(&autofs_softc->sc_last_request_id, 1); in autofs_trigger_one()
433 strlcpy(ar->ar_from, amp->am_from, sizeof(ar->ar_from)); in autofs_trigger_one()
434 strlcpy(ar->ar_path, path, sizeof(ar->ar_path)); in autofs_trigger_one()
435 strlcpy(ar->ar_prefix, amp->am_prefix, sizeof(ar->ar_prefix)); in autofs_trigger_one()
436 strlcpy(ar->ar_key, key, sizeof(ar->ar_key)); in autofs_trigger_one()
437 strlcpy(ar->ar_options, in autofs_trigger_one()
438 amp->am_options, sizeof(ar->ar_options)); in autofs_trigger_one()
440 TIMEOUT_TASK_INIT(taskqueue_thread, &ar->ar_task, 0, in autofs_trigger_one()
442 taskqueue_enqueue_timeout(taskqueue_thread, &ar->ar_task, in autofs_trigger_one()
444 refcount_init(&ar->ar_refcount, 1); in autofs_trigger_one()
445 TAILQ_INSERT_TAIL(&autofs_softc->sc_requests, ar, ar_next); in autofs_trigger_one()
448 cv_broadcast(&autofs_softc->sc_cv); in autofs_trigger_one()
449 while (ar->ar_done == false) { in autofs_trigger_one()
452 error = cv_wait_sig(&autofs_softc->sc_cv, in autofs_trigger_one()
453 &autofs_softc->sc_lock); in autofs_trigger_one()
457 "with error %d", ar->ar_path, error); in autofs_trigger_one()
461 cv_wait(&autofs_softc->sc_cv, &autofs_softc->sc_lock); in autofs_trigger_one()
465 request_error = ar->ar_error; in autofs_trigger_one()
468 "pid %d (%s)", ar->ar_path, request_error, in autofs_trigger_one()
469 curproc->p_pid, curproc->p_comm); in autofs_trigger_one()
472 wildcards = ar->ar_wildcards; in autofs_trigger_one()
474 last = refcount_release(&ar->ar_refcount); in autofs_trigger_one()
476 TAILQ_REMOVE(&autofs_softc->sc_requests, ar, ar_next); in autofs_trigger_one()
480 sx_xunlock(&autofs_softc->sc_lock); in autofs_trigger_one()
481 taskqueue_cancel_timeout(taskqueue_thread, &ar->ar_task, NULL); in autofs_trigger_one()
482 taskqueue_drain_timeout(taskqueue_thread, &ar->ar_task); in autofs_trigger_one()
484 sx_xlock(&autofs_softc->sc_lock); in autofs_trigger_one()
493 anp->an_cached = true; in autofs_trigger_one()
494 anp->an_wildcards = wildcards; in autofs_trigger_one()
495 callout_reset(&anp->an_callout, autofs_cache * hz, in autofs_trigger_one()
519 anp->an_retries = 0; in autofs_trigger()
525 anp->an_retries = 0; in autofs_trigger()
528 anp->an_retries++; in autofs_trigger()
529 if (anp->an_retries >= autofs_retry_attempts) { in autofs_trigger()
531 "error %d", anp->an_retries, error); in autofs_trigger()
532 anp->an_retries = 0; in autofs_trigger()
537 autofs_retry_attempts - anp->an_retries); in autofs_trigger()
538 sx_xunlock(&autofs_softc->sc_lock); in autofs_trigger()
540 sx_xlock(&autofs_softc->sc_lock); in autofs_trigger()
550 sx_xlock(&autofs_softc->sc_lock); in autofs_ioctl_request()
552 TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) { in autofs_ioctl_request()
553 if (ar->ar_done) in autofs_ioctl_request()
555 if (ar->ar_in_progress) in autofs_ioctl_request()
564 error = cv_wait_sig(&autofs_softc->sc_cv, in autofs_ioctl_request()
565 &autofs_softc->sc_lock); in autofs_ioctl_request()
567 sx_xunlock(&autofs_softc->sc_lock); in autofs_ioctl_request()
572 ar->ar_in_progress = true; in autofs_ioctl_request()
573 sx_xunlock(&autofs_softc->sc_lock); in autofs_ioctl_request()
575 adr->adr_id = ar->ar_id; in autofs_ioctl_request()
576 strlcpy(adr->adr_from, ar->ar_from, sizeof(adr->adr_from)); in autofs_ioctl_request()
577 strlcpy(adr->adr_path, ar->ar_path, sizeof(adr->adr_path)); in autofs_ioctl_request()
578 strlcpy(adr->adr_prefix, ar->ar_prefix, sizeof(adr->adr_prefix)); in autofs_ioctl_request()
579 strlcpy(adr->adr_key, ar->ar_key, sizeof(adr->adr_key)); in autofs_ioctl_request()
580 strlcpy(adr->adr_options, ar->ar_options, sizeof(adr->adr_options)); in autofs_ioctl_request()
583 autofs_softc->sc_dev_sid = curproc->p_session->s_sid; in autofs_ioctl_request()
594 sx_xlock(&autofs_softc->sc_lock); in autofs_ioctl_done_101()
595 TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) { in autofs_ioctl_done_101()
596 if (ar->ar_id == add->add_id) in autofs_ioctl_done_101()
601 sx_xunlock(&autofs_softc->sc_lock); in autofs_ioctl_done_101()
602 AUTOFS_DEBUG("id %d not found", add->add_id); in autofs_ioctl_done_101()
606 ar->ar_error = add->add_error; in autofs_ioctl_done_101()
607 ar->ar_wildcards = true; in autofs_ioctl_done_101()
608 ar->ar_done = true; in autofs_ioctl_done_101()
609 ar->ar_in_progress = false; in autofs_ioctl_done_101()
610 cv_broadcast(&autofs_softc->sc_cv); in autofs_ioctl_done_101()
612 sx_xunlock(&autofs_softc->sc_lock); in autofs_ioctl_done_101()
622 sx_xlock(&autofs_softc->sc_lock); in autofs_ioctl_done()
623 TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) { in autofs_ioctl_done()
624 if (ar->ar_id == add->add_id) in autofs_ioctl_done()
629 sx_xunlock(&autofs_softc->sc_lock); in autofs_ioctl_done()
630 AUTOFS_DEBUG("id %d not found", add->add_id); in autofs_ioctl_done()
634 ar->ar_error = add->add_error; in autofs_ioctl_done()
635 ar->ar_wildcards = add->add_wildcards; in autofs_ioctl_done()
636 ar->ar_done = true; in autofs_ioctl_done()
637 ar->ar_in_progress = false; in autofs_ioctl_done()
638 cv_broadcast(&autofs_softc->sc_cv); in autofs_ioctl_done()
640 sx_xunlock(&autofs_softc->sc_lock); in autofs_ioctl_done()
649 sx_xlock(&autofs_softc->sc_lock); in autofs_open()
658 if (autofs_softc->sc_dev_opened) { in autofs_open()
659 sx_xunlock(&autofs_softc->sc_lock); in autofs_open()
663 autofs_softc->sc_dev_opened = true; in autofs_open()
664 sx_xunlock(&autofs_softc->sc_lock); in autofs_open()
673 sx_xlock(&autofs_softc->sc_lock); in autofs_close()
674 KASSERT(autofs_softc->sc_dev_opened, ("not opened?")); in autofs_close()
675 autofs_softc->sc_dev_opened = false; in autofs_close()
676 sx_xunlock(&autofs_softc->sc_lock); in autofs_close()
686 KASSERT(autofs_softc->sc_dev_opened, ("not opened?")); in autofs_ioctl()