Lines Matching refs:host

624 	struct nlm_host *host = af->af_host;  in nlm_cancel_async_lock()  local
627 mtx_assert(&host->nh_lock, MA_OWNED); in nlm_cancel_async_lock()
629 mtx_unlock(&host->nh_lock); in nlm_cancel_async_lock()
642 mtx_lock(&host->nh_lock); in nlm_cancel_async_lock()
646 "cancelled\n", af, host->nh_caller_name, host->nh_sysid); in nlm_cancel_async_lock()
652 TAILQ_REMOVE(&host->nh_pending, af, af_link); in nlm_cancel_async_lock()
653 mtx_unlock(&host->nh_lock); in nlm_cancel_async_lock()
655 mtx_lock(&host->nh_lock); in nlm_cancel_async_lock()
662 nlm_check_expired_locks(struct nlm_host *host) in nlm_check_expired_locks() argument
667 mtx_lock(&host->nh_lock); in nlm_check_expired_locks()
668 while ((af = TAILQ_FIRST(&host->nh_granted)) != NULL in nlm_check_expired_locks()
674 TAILQ_REMOVE(&host->nh_granted, af, af_link); in nlm_check_expired_locks()
675 mtx_unlock(&host->nh_lock); in nlm_check_expired_locks()
677 mtx_lock(&host->nh_lock); in nlm_check_expired_locks()
679 while ((af = TAILQ_FIRST(&host->nh_finished)) != NULL) { in nlm_check_expired_locks()
680 TAILQ_REMOVE(&host->nh_finished, af, af_link); in nlm_check_expired_locks()
681 mtx_unlock(&host->nh_lock); in nlm_check_expired_locks()
683 mtx_lock(&host->nh_lock); in nlm_check_expired_locks()
685 mtx_unlock(&host->nh_lock); in nlm_check_expired_locks()
693 nlm_host_destroy(struct nlm_host *host) in nlm_host_destroy() argument
697 TAILQ_REMOVE(&nlm_hosts, host, nh_link); in nlm_host_destroy()
700 if (host->nh_srvrpc.nr_client) in nlm_host_destroy()
701 CLNT_RELEASE(host->nh_srvrpc.nr_client); in nlm_host_destroy()
702 if (host->nh_clntrpc.nr_client) in nlm_host_destroy()
703 CLNT_RELEASE(host->nh_clntrpc.nr_client); in nlm_host_destroy()
704 mtx_destroy(&host->nh_lock); in nlm_host_destroy()
705 sysctl_ctx_free(&host->nh_sysctl); in nlm_host_destroy()
706 free(host, M_NLM); in nlm_host_destroy()
715 struct nlm_host *host = (struct nlm_host *) arg; in nlm_client_recovery_start() local
718 host->nh_caller_name); in nlm_client_recovery_start()
720 nlm_client_recovery(host); in nlm_client_recovery_start()
723 host->nh_caller_name); in nlm_client_recovery_start()
725 host->nh_monstate = NLM_MONITORED; in nlm_client_recovery_start()
726 nlm_host_release(host); in nlm_client_recovery_start()
739 nlm_host_notify(struct nlm_host *host, int newstate) in nlm_host_notify() argument
745 "state is %d\n", host->nh_caller_name, in nlm_host_notify()
746 host->nh_sysid, newstate); in nlm_host_notify()
752 mtx_lock(&host->nh_lock); in nlm_host_notify()
753 while ((af = TAILQ_FIRST(&host->nh_pending)) != NULL) { in nlm_host_notify()
760 mtx_unlock(&host->nh_lock); in nlm_host_notify()
761 nlm_check_expired_locks(host); in nlm_host_notify()
766 lf_clearremotesys(host->nh_sysid); in nlm_host_notify()
767 host->nh_state = newstate; in nlm_host_notify()
775 && host->nh_monstate != NLM_RECOVERING in nlm_host_notify()
776 && lf_countlocks(NLM_SYSID_CLIENT | host->nh_sysid) > 0) { in nlm_host_notify()
778 host->nh_monstate = NLM_RECOVERING; in nlm_host_notify()
779 refcount_acquire(&host->nh_refs); in nlm_host_notify()
780 kthread_add(nlm_client_recovery_start, host, curproc, &td, 0, 0, in nlm_host_notify()
781 "NFS lock recovery for %s", host->nh_caller_name); in nlm_host_notify()
791 struct nlm_host *host; in nlm_host_lock_count_sysctl() local
794 host = oidp->oid_arg1; in nlm_host_lock_count_sysctl()
795 count = lf_countlocks(host->nh_sysid); in nlm_host_lock_count_sysctl()
805 struct nlm_host *host; in nlm_host_client_lock_count_sysctl() local
808 host = oidp->oid_arg1; in nlm_host_client_lock_count_sysctl()
809 count = lf_countlocks(NLM_SYSID_CLIENT | host->nh_sysid); in nlm_host_client_lock_count_sysctl()
819 struct nlm_host *host; in nlm_create_host() local
826 host = malloc(sizeof(struct nlm_host), M_NLM, M_NOWAIT|M_ZERO); in nlm_create_host()
827 if (!host) in nlm_create_host()
829 mtx_init(&host->nh_lock, "nh_lock", NULL, MTX_DEF); in nlm_create_host()
830 refcount_init(&host->nh_refs, 1); in nlm_create_host()
831 strlcpy(host->nh_caller_name, caller_name, MAXNAMELEN); in nlm_create_host()
832 host->nh_sysid = nlm_next_sysid++; in nlm_create_host()
833 snprintf(host->nh_sysid_string, sizeof(host->nh_sysid_string), in nlm_create_host()
834 "%d", host->nh_sysid); in nlm_create_host()
835 host->nh_vers = 0; in nlm_create_host()
836 host->nh_state = 0; in nlm_create_host()
837 host->nh_monstate = NLM_UNMONITORED; in nlm_create_host()
838 host->nh_grantcookie = 1; in nlm_create_host()
839 TAILQ_INIT(&host->nh_pending); in nlm_create_host()
840 TAILQ_INIT(&host->nh_granted); in nlm_create_host()
841 TAILQ_INIT(&host->nh_finished); in nlm_create_host()
842 TAILQ_INSERT_TAIL(&nlm_hosts, host, nh_link); in nlm_create_host()
846 sysctl_ctx_init(&host->nh_sysctl); in nlm_create_host()
847 oid = SYSCTL_ADD_NODE(&host->nh_sysctl, in nlm_create_host()
849 OID_AUTO, host->nh_sysid_string, CTLFLAG_RD | CTLFLAG_MPSAFE, in nlm_create_host()
851 SYSCTL_ADD_STRING(&host->nh_sysctl, SYSCTL_CHILDREN(oid), OID_AUTO, in nlm_create_host()
852 "hostname", CTLFLAG_RD, host->nh_caller_name, 0, ""); in nlm_create_host()
853 SYSCTL_ADD_UINT(&host->nh_sysctl, SYSCTL_CHILDREN(oid), OID_AUTO, in nlm_create_host()
854 "version", CTLFLAG_RD, &host->nh_vers, 0, ""); in nlm_create_host()
855 SYSCTL_ADD_UINT(&host->nh_sysctl, SYSCTL_CHILDREN(oid), OID_AUTO, in nlm_create_host()
856 "monitored", CTLFLAG_RD, &host->nh_monstate, 0, ""); in nlm_create_host()
857 SYSCTL_ADD_PROC(&host->nh_sysctl, SYSCTL_CHILDREN(oid), OID_AUTO, in nlm_create_host()
858 "lock_count", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, host, in nlm_create_host()
860 SYSCTL_ADD_PROC(&host->nh_sysctl, SYSCTL_CHILDREN(oid), OID_AUTO, in nlm_create_host()
862 host, 0, nlm_host_client_lock_count_sysctl, "I", ""); in nlm_create_host()
866 return (host); in nlm_create_host()
925 struct nlm_host *host; in nlm_check_idle() local
934 TAILQ_FOREACH(host, &nlm_hosts, nh_link) { in nlm_check_idle()
935 if (host->nh_monstate == NLM_MONITORED in nlm_check_idle()
936 && time_uptime > host->nh_idle_timeout) { in nlm_check_idle()
938 if (lf_countlocks(host->nh_sysid) > 0 in nlm_check_idle()
940 + host->nh_sysid)) { in nlm_check_idle()
941 host->nh_idle_timeout = in nlm_check_idle()
946 nlm_host_unmonitor(host); in nlm_check_idle()
964 struct nlm_host *host; in nlm_find_host_by_name() local
971 TAILQ_FOREACH(host, &nlm_hosts, nh_link) { in nlm_find_host_by_name()
972 if (!strcmp(host->nh_caller_name, name)) in nlm_find_host_by_name()
976 if (!host) { in nlm_find_host_by_name()
977 host = nlm_create_host(name); in nlm_find_host_by_name()
978 if (!host) { in nlm_find_host_by_name()
983 refcount_acquire(&host->nh_refs); in nlm_find_host_by_name()
985 host->nh_idle_timeout = time_uptime + NLM_IDLE_TIMEOUT; in nlm_find_host_by_name()
1001 if (host->nh_addr.ss_len && host->nh_srvrpc.nr_client) { in nlm_find_host_by_name()
1003 (struct sockaddr *) &host->nh_addr, in nlm_find_host_by_name()
1005 || host->nh_vers != vers) { in nlm_find_host_by_name()
1007 mtx_lock(&host->nh_lock); in nlm_find_host_by_name()
1008 client = host->nh_srvrpc.nr_client; in nlm_find_host_by_name()
1009 host->nh_srvrpc.nr_client = NULL; in nlm_find_host_by_name()
1010 mtx_unlock(&host->nh_lock); in nlm_find_host_by_name()
1016 memcpy(&host->nh_addr, addr, addr->sa_len); in nlm_find_host_by_name()
1017 host->nh_vers = vers; in nlm_find_host_by_name()
1024 return (host); in nlm_find_host_by_name()
1041 struct nlm_host *host; in nlm_find_host_by_addr() local
1065 TAILQ_FOREACH(host, &nlm_hosts, nh_link) { in nlm_find_host_by_addr()
1067 (const struct sockaddr *) &host->nh_addr)) in nlm_find_host_by_addr()
1071 if (!host) { in nlm_find_host_by_addr()
1072 host = nlm_create_host(tmp); in nlm_find_host_by_addr()
1073 if (!host) { in nlm_find_host_by_addr()
1077 memcpy(&host->nh_addr, addr, addr->sa_len); in nlm_find_host_by_addr()
1078 host->nh_vers = vers; in nlm_find_host_by_addr()
1080 refcount_acquire(&host->nh_refs); in nlm_find_host_by_addr()
1082 host->nh_idle_timeout = time_uptime + NLM_IDLE_TIMEOUT; in nlm_find_host_by_addr()
1088 return (host); in nlm_find_host_by_addr()
1098 struct nlm_host *host; in nlm_find_host_by_sysid() local
1100 TAILQ_FOREACH(host, &nlm_hosts, nh_link) { in nlm_find_host_by_sysid()
1101 if (host->nh_sysid == sysid) { in nlm_find_host_by_sysid()
1102 refcount_acquire(&host->nh_refs); in nlm_find_host_by_sysid()
1103 return (host); in nlm_find_host_by_sysid()
1110 void nlm_host_release(struct nlm_host *host) in nlm_host_release() argument
1112 if (refcount_release(&host->nh_refs)) { in nlm_host_release()
1116 nlm_host_destroy(host); in nlm_host_release()
1124 nlm_host_unmonitor(struct nlm_host *host) in nlm_host_unmonitor() argument
1132 host->nh_caller_name, host->nh_sysid); in nlm_host_unmonitor()
1139 smmonid.mon_name = host->nh_caller_name; in nlm_host_unmonitor()
1157 host->nh_caller_name); in nlm_host_unmonitor()
1161 host->nh_monstate = NLM_UNMONITORED; in nlm_host_unmonitor()
1169 nlm_host_monitor(struct nlm_host *host, int state) in nlm_host_monitor() argument
1176 if (state && !host->nh_state) { in nlm_host_monitor()
1182 host->nh_state = state; in nlm_host_monitor()
1184 host->nh_caller_name, host->nh_sysid, state); in nlm_host_monitor()
1187 mtx_lock(&host->nh_lock); in nlm_host_monitor()
1188 if (host->nh_monstate != NLM_UNMONITORED) { in nlm_host_monitor()
1189 mtx_unlock(&host->nh_lock); in nlm_host_monitor()
1192 host->nh_monstate = NLM_MONITORED; in nlm_host_monitor()
1193 mtx_unlock(&host->nh_lock); in nlm_host_monitor()
1196 host->nh_caller_name, host->nh_sysid); in nlm_host_monitor()
1203 smmon.mon_id.mon_name = host->nh_caller_name; in nlm_host_monitor()
1208 memcpy(smmon.priv, &host->nh_sysid, sizeof(host->nh_sysid)); in nlm_host_monitor()
1222 host->nh_caller_name); in nlm_host_monitor()
1223 mtx_lock(&host->nh_lock); in nlm_host_monitor()
1224 host->nh_monstate = NLM_MONITOR_FAILED; in nlm_host_monitor()
1225 mtx_unlock(&host->nh_lock); in nlm_host_monitor()
1229 host->nh_monstate = NLM_MONITORED; in nlm_host_monitor()
1237 nlm_host_get_rpc(struct nlm_host *host, bool_t isserver) in nlm_host_get_rpc() argument
1242 mtx_lock(&host->nh_lock); in nlm_host_get_rpc()
1245 rpc = &host->nh_srvrpc; in nlm_host_get_rpc()
1247 rpc = &host->nh_clntrpc; in nlm_host_get_rpc()
1260 mtx_unlock(&host->nh_lock); in nlm_host_get_rpc()
1262 mtx_lock(&host->nh_lock); in nlm_host_get_rpc()
1266 mtx_unlock(&host->nh_lock); in nlm_host_get_rpc()
1267 client = nlm_get_rpc((struct sockaddr *)&host->nh_addr, in nlm_host_get_rpc()
1268 NLM_PROG, host->nh_vers); in nlm_host_get_rpc()
1269 mtx_lock(&host->nh_lock); in nlm_host_get_rpc()
1273 mtx_unlock(&host->nh_lock); in nlm_host_get_rpc()
1275 mtx_lock(&host->nh_lock); in nlm_host_get_rpc()
1286 mtx_unlock(&host->nh_lock); in nlm_host_get_rpc()
1292 int nlm_host_get_sysid(struct nlm_host *host) in nlm_host_get_sysid() argument
1295 return (host->nh_sysid); in nlm_host_get_sysid()
1299 nlm_host_get_state(struct nlm_host *host) in nlm_host_get_state() argument
1302 return (host->nh_state); in nlm_host_get_state()
1518 struct nlm_host *host, *nhost; in nlm_server_main() local
1665 TAILQ_FOREACH_SAFE(host, &nlm_hosts, nh_link, nhost) { in nlm_server_main()
1667 nlm_host_notify(host, 0); in nlm_server_main()
1668 nlm_host_release(host); in nlm_server_main()
1704 struct nlm_host *host; in nlm_sm_notify() local
1708 host = nlm_find_host_by_sysid(sysid); in nlm_sm_notify()
1709 if (host) { in nlm_sm_notify()
1710 nlm_host_notify(host, argp->state); in nlm_sm_notify()
1711 nlm_host_release(host); in nlm_sm_notify()
1728 nlm_get_vfs_state(struct nlm_host *host, struct svc_req *rqstp, in nlm_get_vfs_state() argument
1745 (struct sockaddr *)&host->nh_addr, &exflags, &credanon, in nlm_get_vfs_state()
1832 struct nlm_host *host, *bhost; in nlm_do_test() local
1840 host = nlm_find_host_by_name(argp->alock.caller_name, in nlm_do_test()
1842 if (!host) { in nlm_do_test()
1848 host->nh_caller_name, host->nh_sysid); in nlm_do_test()
1850 nlm_check_expired_locks(host); in nlm_do_test()
1851 sysid = host->nh_sysid; in nlm_do_test()
1862 error = nlm_get_vfs_state(host, rqstp, &fh, &vs, accmode); in nlm_do_test()
1919 *rpcp = nlm_host_get_rpc(host, TRUE); in nlm_do_test()
1920 nlm_host_release(host); in nlm_do_test()
1930 struct nlm_host *host; in nlm_do_lock() local
1938 host = nlm_find_host_by_name(argp->alock.caller_name, in nlm_do_lock()
1940 if (!host) { in nlm_do_lock()
1946 host->nh_caller_name, host->nh_sysid); in nlm_do_lock()
1948 if (monitor && host->nh_state && argp->state in nlm_do_lock()
1949 && host->nh_state != argp->state) { in nlm_do_lock()
1954 nlm_host_notify(host, argp->state); in nlm_do_lock()
1957 nlm_check_expired_locks(host); in nlm_do_lock()
1958 sysid = host->nh_sysid; in nlm_do_lock()
1969 error = nlm_get_vfs_state(host, rqstp, &fh, &vs, accmode); in nlm_do_lock()
1992 client = nlm_host_get_rpc(host, TRUE); in nlm_do_lock()
2004 mtx_lock(&host->nh_lock); in nlm_do_lock()
2005 TAILQ_FOREACH(af, &host->nh_pending, af_link) { in nlm_do_lock()
2014 cookie.ng_sysid = host->nh_sysid; in nlm_do_lock()
2015 cookie.ng_cookie = host->nh_grantcookie++; in nlm_do_lock()
2017 mtx_unlock(&host->nh_lock); in nlm_do_lock()
2029 af->af_host = host; in nlm_do_lock()
2056 mtx_lock(&host->nh_lock); in nlm_do_lock()
2057 TAILQ_INSERT_TAIL(&host->nh_pending, af, af_link); in nlm_do_lock()
2058 mtx_unlock(&host->nh_lock); in nlm_do_lock()
2069 mtx_lock(&host->nh_lock); in nlm_do_lock()
2070 TAILQ_REMOVE(&host->nh_pending, af, af_link); in nlm_do_lock()
2071 mtx_unlock(&host->nh_lock); in nlm_do_lock()
2077 "(sysid %d)\n", af, host->nh_caller_name, sysid); in nlm_do_lock()
2101 nlm_host_monitor(host, argp->state); in nlm_do_lock()
2108 *rpcp = nlm_host_get_rpc(host, TRUE); in nlm_do_lock()
2109 nlm_host_release(host); in nlm_do_lock()
2119 struct nlm_host *host; in nlm_do_cancel() local
2127 host = nlm_find_host_by_name(argp->alock.caller_name, in nlm_do_cancel()
2129 if (!host) { in nlm_do_cancel()
2135 host->nh_caller_name, host->nh_sysid); in nlm_do_cancel()
2137 nlm_check_expired_locks(host); in nlm_do_cancel()
2138 sysid = host->nh_sysid; in nlm_do_cancel()
2148 error = nlm_get_vfs_state(host, rqstp, &fh, &vs, (accmode_t)0); in nlm_do_cancel()
2168 mtx_lock(&host->nh_lock); in nlm_do_cancel()
2170 TAILQ_FOREACH(af, &host->nh_pending, af_link) { in nlm_do_cancel()
2180 mtx_unlock(&host->nh_lock); in nlm_do_cancel()
2193 mtx_unlock(&host->nh_lock); in nlm_do_cancel()
2198 *rpcp = nlm_host_get_rpc(host, TRUE); in nlm_do_cancel()
2199 nlm_host_release(host); in nlm_do_cancel()
2209 struct nlm_host *host; in nlm_do_unlock() local
2216 host = nlm_find_host_by_name(argp->alock.caller_name, in nlm_do_unlock()
2218 if (!host) { in nlm_do_unlock()
2224 host->nh_caller_name, host->nh_sysid); in nlm_do_unlock()
2226 nlm_check_expired_locks(host); in nlm_do_unlock()
2227 sysid = host->nh_sysid; in nlm_do_unlock()
2237 error = nlm_get_vfs_state(host, rqstp, &fh, &vs, (accmode_t)0); in nlm_do_unlock()
2260 *rpcp = nlm_host_get_rpc(host, TRUE); in nlm_do_unlock()
2261 nlm_host_release(host); in nlm_do_unlock()
2270 struct nlm_host *host; in nlm_do_granted() local
2275 host = nlm_find_host_by_addr(svc_getrpccaller(rqstp), rqstp->rq_vers); in nlm_do_granted()
2276 if (!host) { in nlm_do_granted()
2305 *rpcp = nlm_host_get_rpc(host, TRUE); in nlm_do_granted()
2306 nlm_host_release(host); in nlm_do_granted()
2313 struct nlm_host *host = NULL; in nlm_do_granted_res() local
2322 host = nlm_find_host_by_sysid(ng_sysid(&argp->cookie)); in nlm_do_granted_res()
2323 if (!host) { in nlm_do_granted_res()
2328 mtx_lock(&host->nh_lock); in nlm_do_granted_res()
2329 TAILQ_FOREACH(af, &host->nh_granted, af_link) in nlm_do_granted_res()
2334 TAILQ_REMOVE(&host->nh_granted, af, af_link); in nlm_do_granted_res()
2335 mtx_unlock(&host->nh_lock); in nlm_do_granted_res()
2339 "with unrecognized cookie %d:%d", host->nh_caller_name, in nlm_do_granted_res()
2340 host->nh_sysid, ng_sysid(&argp->cookie), in nlm_do_granted_res()
2350 "and we failed to unlock (%d)", host->nh_caller_name, in nlm_do_granted_res()
2351 host->nh_sysid, error); in nlm_do_granted_res()
2356 af, host->nh_caller_name, host->nh_sysid); in nlm_do_granted_res()
2359 af, host->nh_caller_name, host->nh_sysid); in nlm_do_granted_res()
2365 if (host) in nlm_do_granted_res()
2366 nlm_host_release(host); in nlm_do_granted_res()
2372 struct nlm_host *host, *thost; in nlm_do_free_all() local
2374 TAILQ_FOREACH_SAFE(host, &nlm_hosts, nh_link, thost) { in nlm_do_free_all()
2375 if (!strcmp(host->nh_caller_name, argp->name)) in nlm_do_free_all()
2376 nlm_host_notify(host, argp->state); in nlm_do_free_all()