autofs_softc
struct autofs_softc *autofs_softc;
KASSERT(autofs_softc == NULL,
("softc %p, should be NULL", autofs_softc));
autofs_softc = malloc(sizeof(*autofs_softc), M_AUTOFS,
TAILQ_INIT(&autofs_softc->sc_requests);
cv_init(&autofs_softc->sc_cv, "autofscv");
sx_init(&autofs_softc->sc_lock, "autofslk");
error = make_dev_p(MAKEDEV_CHECKNAME, &autofs_softc->sc_cdev,
free(autofs_softc, M_AUTOFS);
autofs_softc->sc_cdev->si_drv1 = autofs_softc;
sx_xlock(&autofs_softc->sc_lock);
if (autofs_softc->sc_dev_opened) {
sx_xunlock(&autofs_softc->sc_lock);
if (autofs_softc->sc_cdev != NULL)
destroy_dev(autofs_softc->sc_cdev);
sx_xunlock(&autofs_softc->sc_lock);
free(autofs_softc, M_AUTOFS);
if (autofs_softc->sc_dev_opened == false)
if (p->p_session->s_sid == autofs_softc->sc_dev_sid) {
sx_xlock(&autofs_softc->sc_lock);
cv_broadcast(&autofs_softc->sc_cv);
sx_xunlock(&autofs_softc->sc_lock);
sx_assert(&autofs_softc->sc_lock, SA_XLOCKED);
TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) {
atomic_fetchadd_int(&autofs_softc->sc_last_request_id, 1);
TAILQ_INSERT_TAIL(&autofs_softc->sc_requests, ar, ar_next);
cv_broadcast(&autofs_softc->sc_cv);
error = cv_wait_sig(&autofs_softc->sc_cv,
&autofs_softc->sc_lock);
cv_wait(&autofs_softc->sc_cv, &autofs_softc->sc_lock);
TAILQ_REMOVE(&autofs_softc->sc_requests, ar, ar_next);
sx_xunlock(&autofs_softc->sc_lock);
sx_xlock(&autofs_softc->sc_lock);
sx_xunlock(&autofs_softc->sc_lock);
sx_xlock(&autofs_softc->sc_lock);
sx_xlock(&autofs_softc->sc_lock);
TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) {
error = cv_wait_sig(&autofs_softc->sc_cv,
&autofs_softc->sc_lock);
sx_xunlock(&autofs_softc->sc_lock);
sx_xunlock(&autofs_softc->sc_lock);
autofs_softc->sc_dev_sid = curproc->p_session->s_sid;
sx_xlock(&autofs_softc->sc_lock);
TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) {
sx_xunlock(&autofs_softc->sc_lock);
cv_broadcast(&autofs_softc->sc_cv);
sx_xunlock(&autofs_softc->sc_lock);
sx_xlock(&autofs_softc->sc_lock);
TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) {
sx_xunlock(&autofs_softc->sc_lock);
cv_broadcast(&autofs_softc->sc_cv);
sx_xunlock(&autofs_softc->sc_lock);
sx_xlock(&autofs_softc->sc_lock);
if (autofs_softc->sc_dev_opened) {
sx_xunlock(&autofs_softc->sc_lock);
autofs_softc->sc_dev_opened = true;
sx_xunlock(&autofs_softc->sc_lock);
sx_xlock(&autofs_softc->sc_lock);
KASSERT(autofs_softc->sc_dev_opened, ("not opened?"));
autofs_softc->sc_dev_opened = false;
sx_xunlock(&autofs_softc->sc_lock);
KASSERT(autofs_softc->sc_dev_opened, ("not opened?"));
sx_xlock(&autofs_softc->sc_lock);
TAILQ_FOREACH(ar, &autofs_softc->sc_requests, ar_next) {
sx_xunlock(&autofs_softc->sc_lock);
cv_broadcast(&autofs_softc->sc_cv);
extern struct autofs_softc *autofs_softc;
sx_xlock(&autofs_softc->sc_lock);
sx_xunlock(&autofs_softc->sc_lock);
extern struct autofs_softc *autofs_softc;