Lines Matching refs:nmp

542 	struct nfsmount *nmp,  in nfs_socket_create()  argument
620 nso->nso_nfs_min_vers = PVER2MAJOR(nmp->nm_min_vers); in nfs_socket_create()
621 nso->nso_nfs_max_vers = PVER2MAJOR(nmp->nm_max_vers); in nfs_socket_create()
653 vfs_statfs(nmp->nm_mountp)->f_mntfromname, error, nso, naddr, sotype, in nfs_socket_create()
658 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, naddr, in nfs_socket_create()
698 nfs_socket_options(struct nfsmount *nmp, struct nfs_socket *nso) in nfs_socket_options() argument
711 timeo.tv_sec = (NMFLAG(nmp, SOFT) || nfs_can_squish(nmp)) ? 5 : 60; in nfs_socket_options()
725 …reserve = (nso->nso_sotype == SOCK_DGRAM) ? NFS_UDPSOCKBUF : MAX(nfs_tcp_sockbuf, nmp->nm_wsize * … in nfs_socket_options()
731 …reserve = (nso->nso_sotype == SOCK_DGRAM) ? NFS_UDPSOCKBUF : MAX(nfs_tcp_sockbuf, nmp->nm_rsize * … in nfs_socket_options()
742 if (!NMFLAG(nmp, INTR)) { in nfs_socket_options()
824 nfs_connect_search_new_socket(struct nfsmount *nmp, struct nfs_socket_search *nss, struct timeval *… in nfs_connect_search_new_socket() argument
835 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nss->nss_addrcnt); in nfs_connect_search_new_socket()
846 if (nmp->nm_sockflags & NMSOCK_UNMOUNT) { in nfs_connect_search_new_socket()
850 fsl = nmp->nm_locations.nl_locations[nss->nss_nextloc.nli_loc]; in nfs_connect_search_new_socket()
862 addrstr = nmp->nm_nfs_localport; in nfs_connect_search_new_socket()
871 nfs_location_next(&nmp->nm_locations, &nss->nss_nextloc); in nfs_connect_search_new_socket()
877 if (nmp->nm_sofamily && (ss.ss_family != nmp->nm_sofamily)) { in nfs_connect_search_new_socket()
878 … NFS_SOCK_DBG("Skipping socket family %d, want mount family %d\n", ss.ss_family, nmp->nm_sofamily); in nfs_connect_search_new_socket()
879 nfs_location_next(&nmp->nm_locations, &nss->nss_nextloc); in nfs_connect_search_new_socket()
886 error = nfs_socket_create(nmp, (struct sockaddr*)&ss, nss->nss_sotype, in nfs_connect_search_new_socket()
888 ((nss->nss_protocol == NFS_PROG) && NMFLAG(nmp, RESVPORT)), &nso); in nfs_connect_search_new_socket()
906 nfs_location_next(&nmp->nm_locations, &nss->nss_nextloc); in nfs_connect_search_new_socket()
926 nfs_connect_search_socket_connect(struct nfsmount *nmp, struct nfs_socket *nso, int verbose) in nfs_connect_search_socket_connect() argument
930 if ((nso->nso_sotype != SOCK_STREAM) && NMFLAG(nmp, NOCONNECT)) { in nfs_connect_search_socket_connect()
933 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso); in nfs_connect_search_socket_connect()
935 nfs_socket_options(nmp, nso); in nfs_connect_search_socket_connect()
942 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, in nfs_connect_search_socket_connect()
947 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, error); in nfs_connect_search_socket_connect()
960 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso); in nfs_connect_search_socket_connect()
963 nfs_socket_options(nmp, nso); in nfs_connect_search_socket_connect()
971 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, error); in nfs_connect_search_socket_connect()
974 error, vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_connect_search_socket_connect()
990 nfs_connect_search_ping(struct nfsmount *nmp, struct nfs_socket *nso, struct timeval *now) in nfs_connect_search_ping() argument
1004 vers = PVER2MAJOR(nmp->nm_max_vers); in nfs_connect_search_ping()
1009 error = nfsm_rpchead2(nmp, nso->nso_sotype, nso->nso_protocol, vers, 0, RPCAUTH_SYS, in nfs_connect_search_ping()
1028 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, error); in nfs_connect_search_ping()
1048 nfs_connect_search_socket_found(struct nfsmount *nmp, struct nfs_socket_search *nss, struct nfs_soc… in nfs_connect_search_socket_found() argument
1051 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso); in nfs_connect_search_socket_found()
1058 nso->nso_version = PVER2MAJOR(nmp->nm_max_vers); in nfs_connect_search_socket_found()
1071 nfs_connect_search_socket_reap(struct nfsmount *nmp __unused, struct nfs_socket_search *nss, struct… in nfs_connect_search_socket_reap()
1080 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso); in nfs_connect_search_socket_reap()
1090 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, nso->nso_error, nso->nso_flags); in nfs_connect_search_socket_reap()
1106 nfs_connect_search_check(struct nfsmount *nmp, struct nfs_socket_search *nss, struct timeval *now) in nfs_connect_search_check() argument
1112 …printf("nfs_connect: socket connect taking a while for %s\n", vfs_statfs(nmp->nm_mountp)->f_mntfro… in nfs_connect_search_check()
1115 if (nmp->nm_sockflags & NMSOCK_UNMOUNT) { in nfs_connect_search_check()
1118 if ((error = nfs_sigintr(nmp, NULL, current_thread(), 0))) { in nfs_connect_search_check()
1135 nfs_connect_search_loop(struct nfsmount *nmp, struct nfs_socket_search *nss) in nfs_connect_search_loop() argument
1144 NFS_SOCK_DBG("nfs connect %s search %ld\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname, now.tv_sec); in nfs_connect_search_loop()
1147 error = nfs_connect_search_new_socket(nmp, nss, &now); in nfs_connect_search_loop()
1159 if (!nfs_connect_search_socket_connect(nmp, nso, verbose)) { in nfs_connect_search_loop()
1168 if (!nfs_connect_search_ping(nmp, nso, &now)) { in nfs_connect_search_loop()
1177 nfs_connect_search_socket_found(nmp, nss, nso); in nfs_connect_search_loop()
1185 nfs_connect_search_socket_reap(nmp, nss, &now); in nfs_connect_search_loop()
1193 error = nfs_connect_search_check(nmp, nss, &now); in nfs_connect_search_loop()
1199 NFS_SOCK_DBG("nfs connect %s returning %d\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname, error); in nfs_connect_search_loop()
1220 nfs_connect(struct nfsmount *nmp, int verbose, int timeo) in nfs_connect() argument
1233 uint8_t sotype = nmp->nm_sotype ? nmp->nm_sotype : SOCK_STREAM; in nfs_connect()
1241 for (loc = 0; loc < nmp->nm_locations.nl_numlocs; loc++) { in nfs_connect()
1242 for (serv = 0; serv < nmp->nm_locations.nl_locations[loc]->nl_servcount; serv++) { in nfs_connect()
1243 addrtotal += nmp->nm_locations.nl_locations[loc]->nl_servers[serv]->ns_addrcount; in nfs_connect()
1244 if (nmp->nm_locations.nl_locations[loc]->nl_servers[serv]->ns_addrcount == 0) { in nfs_connect()
1246 vfs_statfs(nmp->nm_mountp)->f_mntfromname, in nfs_connect()
1247 nmp->nm_locations.nl_locations[loc]->nl_servers[serv]->ns_name); in nfs_connect()
1254 vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_connect()
1258 vfs_statfs(nmp->nm_mountp)->f_mntfromname, addrtotal); in nfs_connect()
1261 lck_mtx_lock(&nmp->nm_lock); in nfs_connect()
1262 nmp->nm_sockflags |= NMSOCK_CONNECTING; in nfs_connect()
1263 nmp->nm_nss = &nss; in nfs_connect()
1264 lck_mtx_unlock(&nmp->nm_lock); in nfs_connect()
1275 nss.nss_startloc = nmp->nm_locations.nl_current; in nfs_connect()
1283 if (!(nmp->nm_sockflags & NMSOCK_HASCONNECTED)) { in nfs_connect()
1284 NFS_SOCK_DBG("so_family = %d\n", nmp->nm_sofamily); in nfs_connect()
1285 …NFS_SOCK_DBG("nfs port = %d local: <%s>\n", nmp->nm_nfsport, nmp->nm_nfs_localport ? nmp->nm_nfs_l… in nfs_connect()
1286 …NFS_SOCK_DBG("mount port = %d local: <%s>\n", nmp->nm_mountport, nmp->nm_mount_localport ? nmp->nm… in nfs_connect()
1287 if (!nmp->nm_vers) { in nfs_connect()
1289 if (!nmp->nm_nfsport || (!NM_OMATTR_GIVEN(nmp, FH) && !nmp->nm_mountport)) { in nfs_connect()
1291 if (PVER2MAJOR(nmp->nm_max_vers) >= NFS_VER4 && tryv4) { in nfs_connect()
1307 nss.nss_port = nmp->nm_nfsport; in nfs_connect()
1312 } else if (nmp->nm_vers >= NFS_VER4) { in nfs_connect()
1315 nss.nss_port = nmp->nm_nfsport ? nmp->nm_nfsport : NFS_PORT; in nfs_connect()
1323 if (!nmp->nm_nfsport) { in nfs_connect()
1334 if (!nmp->nm_nfsport || (!NM_OMATTR_GIVEN(nmp, FH) && !nmp->nm_mountport)) { in nfs_connect()
1341 nss.nss_port = nmp->nm_nfsport; in nfs_connect()
1343 nss.nss_version = nmp->nm_vers; in nfs_connect()
1347 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nss.nss_sotype, nss.nss_port, in nfs_connect()
1351 if (!nmp->nm_nfsport) { in nfs_connect()
1357 nss.nss_port = nmp->nm_nfsport; in nfs_connect()
1359 nss.nss_version = nmp->nm_vers; in nfs_connect()
1362 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nss.nss_sotype, nss.nss_port, in nfs_connect()
1369 …if ((nss.nss_nextloc.nli_serv >= nmp->nm_locations.nl_locations[nss.nss_nextloc.nli_loc]->nl_servc… in nfs_connect()
1370 …(nss.nss_nextloc.nli_addr >= nmp->nm_locations.nl_locations[nss.nss_nextloc.nli_loc]->nl_servers[n… in nfs_connect()
1371 nfs_location_next(&nmp->nm_locations, &nss.nss_nextloc); in nfs_connect()
1374 vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_connect()
1382 error = nfs_connect_search_loop(nmp, &nss); in nfs_connect()
1389 vfs_statfs(nmp->nm_mountp)->f_mntfromname, error, nss.nss_error); in nfs_connect()
1393 if (!error && (nss.nss_sotype == SOCK_STREAM) && !nmp->nm_sotype && (nmp->nm_vers < NFS_VER4)) { in nfs_connect()
1399 vfs_statfs(nmp->nm_mountp)->f_mntfromname, error, nss.nss_error); in nfs_connect()
1403 vfs_statfs(nmp->nm_mountp)->f_mntfromname, error, nss.nss_error); in nfs_connect()
1409 lck_mtx_lock(&nmp->nm_lock); in nfs_connect()
1410 nmp->nm_sockflags &= ~NMSOCK_CONNECTING; in nfs_connect()
1411 nmp->nm_nss = NULL; in nfs_connect()
1412 lck_mtx_unlock(&nmp->nm_lock); in nfs_connect()
1415 vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_connect()
1424 vfs_statfs(nmp->nm_mountp)->f_mntfromname, error); in nfs_connect()
1446 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso); in nfs_connect()
1455 nfsvers = nmp->nm_vers ? nmp->nm_vers : PVER2MAJOR(nmp->nm_max_vers); in nfs_connect()
1456 if (!(port = nmp->nm_nfsport)) { in nfs_connect()
1466 for (; nfsvers >= (int)PVER2MAJOR(nmp->nm_min_vers); nfsvers--) { in nfs_connect()
1467 if (nmp->nm_vers && nmp->nm_vers != nfsvers) { in nfs_connect()
1475 if (ss.ss_family == AF_LOCAL && nmp->nm_nfs_localport) { in nfs_connect()
1477 NFS_SOCK_DBG("Using supplied local address %s for NFS_PROG\n", nmp->nm_nfs_localport); in nfs_connect()
1478 strlcpy(sun->sun_path, nmp->nm_nfs_localport, sizeof(sun->sun_path)); in nfs_connect()
1482 error = nfs_portmap_lookup(nmp, vfs_context_current(), (struct sockaddr*)&ss, in nfs_connect()
1506 if (nfsvers < (int)PVER2MAJOR(nmp->nm_min_vers) && error == 0) { in nfs_connect()
1515 } else if (nmp->nm_nfs_localport) { in nfs_connect()
1516 …strlcpy(((struct sockaddr_un*)&ss)->sun_path, nmp->nm_nfs_localport, sizeof(((struct sockaddr_un*)… in nfs_connect()
1517 NFS_SOCK_DBG("Using supplied nfs_local_port %s for NFS_PROG\n", nmp->nm_nfs_localport); in nfs_connect()
1525 error = nfs_socket_create(nmp, (struct sockaddr*)&ss, nso->nso_sotype, port, in nfs_connect()
1526 NFS_PROG, nfsvers, NMFLAG(nmp, RESVPORT), &nsonfs); in nfs_connect()
1545 …if ((nfsvers < NFS_VER4) && !(nmp->nm_sockflags & NMSOCK_HASCONNECTED) && !NM_OMATTR_GIVEN(nmp, FH… in nfs_connect()
1549 port = nmp->nm_mountport; in nfs_connect()
1555 } else if (ss.ss_family == AF_LOCAL && nmp->nm_mount_localport) { in nfs_connect()
1556 …NFS_SOCK_DBG("Setting mount address to %s port = %d\n", nmp->nm_mount_localport, nmp->nm_mountport… in nfs_connect()
1557 …strlcpy(((struct sockaddr_un*)&ss)->sun_path, nmp->nm_mount_localport, sizeof(((struct sockaddr_un… in nfs_connect()
1563 …int mntproto = (NM_OMFLAG(nmp, MNTUDP) || (nso->nso_sotype == SOCK_DGRAM)) ? IPPROTO_UDP : IPPROTO… in nfs_connect()
1565 error = nfs_portmap_lookup(nmp, vfs_context_current(), (struct sockaddr*)&ss, in nfs_connect()
1601 NFS_SOCK_DBG("nfs connect %s got NFS socket %p\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso); in nfs_connect()
1604 nfsvers = nmp->nm_vers ? nmp->nm_vers : (int)nso->nso_version; in nfs_connect()
1607 …if ((nfsvers < NFS_VER4) && !(nmp->nm_sockflags & NMSOCK_HASCONNECTED) && !NM_OMATTR_GIVEN(nmp, FH… in nfs_connect()
1612 …("Getting mount address mountport = %d, mount_localport = %s\n", nmp->nm_mountport, nmp->nm_mount_… in nfs_connect()
1614 port = nmp->nm_mountport; in nfs_connect()
1619 } else if (ss.ss_family == AF_LOCAL && nmp->nm_mount_localport) { in nfs_connect()
1620 …NFS_SOCK_DBG("Setting mount address to %s port = %d\n", nmp->nm_mount_localport, nmp->nm_mountport… in nfs_connect()
1621 …strlcpy(((struct sockaddr_un*)&ss)->sun_path, nmp->nm_mount_localport, sizeof(((struct sockaddr_un… in nfs_connect()
1626 int so_type = NM_OMFLAG(nmp, MNTUDP) ? SOCK_DGRAM : nso->nso_sotype; in nfs_connect()
1627 error = nfs_portmap_lookup(nmp, vfs_context_current(), (struct sockaddr*)&ss, in nfs_connect()
1644 error = nfs3_check_lockmode(nmp, saddr, nso->nso_sotype, timeo); in nfs_connect()
1671 nfs_location_mntfromname(&nmp->nm_locations, nso->nso_location, path, MAXPATHLEN, 1); in nfs_connect()
1672 error = nfs3_mount_rpc(nmp, saddr, nso->nso_sotype, nfsvers, in nfs_connect()
1673 path, vfs_context_current(), timeo, fh, &nmp->nm_servsec); in nfs_connect()
1675 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, error); in nfs_connect()
1681 if ((nfsvers == NFS_VER3) && !nmp->nm_servsec.count) { in nfs_connect()
1683 nmp->nm_servsec.count = 1; in nfs_connect()
1684 nmp->nm_servsec.flavors[0] = RPCAUTH_SYS; in nfs_connect()
1686 if (nmp->nm_sec.count) { in nfs_connect()
1688 if (!nmp->nm_servsec.count) { in nfs_connect()
1690 nmp->nm_auth = nmp->nm_sec.flavors[0]; in nfs_connect()
1693 for (o = 0; !found && (o < nmp->nm_sec.count); o++) { in nfs_connect()
1694 for (s = 0; !found && (s < nmp->nm_servsec.count); s++) { in nfs_connect()
1695 if (nmp->nm_sec.flavors[o] == nmp->nm_servsec.flavors[s]) { in nfs_connect()
1696 nmp->nm_auth = nmp->nm_sec.flavors[o]; in nfs_connect()
1703 if (!nmp->nm_servsec.count) { in nfs_connect()
1704 nmp->nm_auth = RPCAUTH_SYS; in nfs_connect()
1707 for (s = 0; s < nmp->nm_servsec.count; s++) { in nfs_connect()
1708 switch (nmp->nm_servsec.flavors[s]) { in nfs_connect()
1711 if (found && (nmp->nm_auth == RPCAUTH_NONE)) { in nfs_connect()
1720 nmp->nm_auth = nmp->nm_servsec.flavors[s]; in nfs_connect()
1736 if (nmp->nm_fh) { in nfs_connect()
1737 NFS_ZFREE(nfs_fhandle_zone, nmp->nm_fh); in nfs_connect()
1739 nmp->nm_fh = fh; in nfs_connect()
1741 NFS_BITMAP_SET(nmp->nm_flags, NFS_MFLAG_CALLUMNT); in nfs_connect()
1746 error = sock_setupcall(nso->nso_so, upcall, nmp); in nfs_connect()
1753 if (!(nmp->nm_sockflags & NMSOCK_HASCONNECTED)) { in nfs_connect()
1755 if (!NM_OMATTR_GIVEN(nmp, MNTFROM)) { in nfs_connect()
1756 nfs_location_mntfromname(&nmp->nm_locations, nso->nso_location, in nfs_connect()
1757 vfs_statfs(nmp->nm_mountp)->f_mntfromname, in nfs_connect()
1758 sizeof(vfs_statfs(nmp->nm_mountp)->f_mntfromname), 0); in nfs_connect()
1761 if (!nmp->nm_sotype) { in nfs_connect()
1762 nmp->nm_sotype = nso->nso_sotype; in nfs_connect()
1764 if (!nmp->nm_vers) { in nfs_connect()
1765 nmp->nm_vers = nfsvers; in nfs_connect()
1768 if ((nfsvers >= NFS_VER4) && !NFS_BITMAP_ISSET(nmp->nm_mattrs, NFS_MATTR_NFS_PORT)) { in nfs_connect()
1777 nmp->nm_nfsport = NFS_PORT; in nfs_connect()
1784 if (nmp->nm_vers >= NFS_VER4) { in nfs_connect()
1786 nmp->nm_mounttime = ((uint64_t)now.tv_sec << 32) | now.tv_usec; in nfs_connect()
1787 if (!NMFLAG(nmp, NOCALLBACK)) { in nfs_connect()
1788 nfs4_mount_callback_setup(nmp); in nfs_connect()
1795 lck_mtx_lock(&nmp->nm_lock); in nfs_connect()
1796 nmp->nm_srtt[0] = nmp->nm_srtt[1] = nmp->nm_srtt[2] = in nfs_connect()
1797 nmp->nm_srtt[3] = (NFS_TIMEO << 3); in nfs_connect()
1798 nmp->nm_sdrtt[0] = nmp->nm_sdrtt[1] = nmp->nm_sdrtt[2] = in nfs_connect()
1799 nmp->nm_sdrtt[3] = 0; in nfs_connect()
1801 nmp->nm_cwnd = NFS_MAXCWND / 2; /* Initial send window */ in nfs_connect()
1802 nmp->nm_sent = 0; in nfs_connect()
1804 nmp->nm_timeouts = 0; in nfs_connect()
1806 nmp->nm_sockflags &= ~NMSOCK_CONNECTING; in nfs_connect()
1807 nmp->nm_sockflags |= NMSOCK_SETUP; in nfs_connect()
1809 nmp->nm_nso = nso; in nfs_connect()
1810 oldsaddr = nmp->nm_saddr; in nfs_connect()
1811 nmp->nm_saddr = nso->nso_saddr; in nfs_connect()
1812 lck_mtx_unlock(&nmp->nm_lock); in nfs_connect()
1813 error = nfs_connect_setup(nmp); in nfs_connect()
1814 lck_mtx_lock(&nmp->nm_lock); in nfs_connect()
1815 nmp->nm_sockflags &= ~NMSOCK_SETUP; in nfs_connect()
1817 nmp->nm_sockflags |= NMSOCK_READY; in nfs_connect()
1818 wakeup(&nmp->nm_sockflags); in nfs_connect()
1822 vfs_statfs(nmp->nm_mountp)->f_mntfromname, nso, error); in nfs_connect()
1824 nmp->nm_saddr = oldsaddr; in nfs_connect()
1825 if (!(nmp->nm_sockflags & NMSOCK_HASCONNECTED)) { in nfs_connect()
1827 if (!NFS_BITMAP_ISSET(nmp->nm_mattrs, NFS_MATTR_SOCKET_TYPE)) { in nfs_connect()
1828 nmp->nm_sotype = 0; in nfs_connect()
1831 if (nmp->nm_vers >= NFS_VER4) { in nfs_connect()
1832 if (!NFS_BITMAP_ISSET(nmp->nm_mattrs, NFS_MATTR_NFS_PORT)) { in nfs_connect()
1833 nmp->nm_nfsport = 0; in nfs_connect()
1835 if (nmp->nm_cbid) { in nfs_connect()
1836 nfs4_mount_callback_shutdown(nmp); in nfs_connect()
1838 if (IS_VALID_CRED(nmp->nm_mcred)) { in nfs_connect()
1839 kauth_cred_unref(&nmp->nm_mcred); in nfs_connect()
1841 bzero(&nmp->nm_un, sizeof(nmp->nm_un)); in nfs_connect()
1844 nmp->nm_vers = 0; in nfs_connect()
1846 lck_mtx_unlock(&nmp->nm_lock); in nfs_connect()
1847 nmp->nm_nso = NULL; in nfs_connect()
1853 if ((nmp->nm_locations.nl_current.nli_flags & NLI_VALID) && in nfs_connect()
1854 (nmp->nm_locations.nl_current.nli_serv != nso->nso_location.nli_serv)) { in nfs_connect()
1858 nmp->nm_locations.nl_current = nso->nso_location; in nfs_connect()
1859 nmp->nm_locations.nl_current.nli_flags |= NLI_VALID; in nfs_connect()
1861 if (!(nmp->nm_sockflags & NMSOCK_HASCONNECTED)) { in nfs_connect()
1863 nmp->nm_sockflags |= NMSOCK_HASCONNECTED; in nfs_connect()
1866 lck_mtx_unlock(&nmp->nm_lock); in nfs_connect()
1872 vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_connect()
1875 nmp->nm_nss = NULL; in nfs_connect()
1883 NFS_SOCK_DBG("nfs connect %s success\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_connect()
1894 struct nfsmount *nmp) in nfs_connect_setup()
1898 if (nmp->nm_vers >= NFS_VER4) { in nfs_connect_setup()
1899 if (nmp->nm_state & NFSSTA_CLIENTID) { in nfs_connect_setup()
1901 error = nfs4_renew(nmp, R_SETUP); in nfs_connect_setup()
1907 lck_mtx_lock(&nmp->nm_lock); in nfs_connect_setup()
1908 nfs_need_recover(nmp, error); in nfs_connect_setup()
1909 lck_mtx_unlock(&nmp->nm_lock); in nfs_connect_setup()
1912 error = nfs4_setclientid(nmp); in nfs_connect_setup()
1927 nfs_reconnect(struct nfsmount *nmp) in nfs_reconnect() argument
1937 lastmsg = now.tv_sec - (nmp->nm_tprintf_delay - nmp->nm_tprintf_initial_delay); in nfs_reconnect()
1939 nfs_disconnect(nmp); in nfs_reconnect()
1942 lck_mtx_lock(&nmp->nm_lock); in nfs_reconnect()
1943 timeo = nfs_is_squishy(nmp) ? 8 : 30; in nfs_reconnect()
1944 lck_mtx_unlock(&nmp->nm_lock); in nfs_reconnect()
1946 while ((error = nfs_connect(nmp, verbose, timeo))) { in nfs_reconnect()
1948 nfs_disconnect(nmp); in nfs_reconnect()
1956 if ((lastmsg + nmp->nm_tprintf_delay) < now.tv_sec) { in nfs_reconnect()
1958 nfs_down(nmp, thd, error, NFSSTA_TIMEO, "can not connect", 0); in nfs_reconnect()
1961 lck_mtx_lock(&nmp->nm_lock); in nfs_reconnect()
1962 if (!(nmp->nm_state & NFSSTA_MOUNTED)) { in nfs_reconnect()
1965 lck_mtx_unlock(&nmp->nm_lock); in nfs_reconnect()
1970 if (nfs_mount_check_dead_timeout(nmp)) { in nfs_reconnect()
1971 nfs_mount_make_zombie(nmp); in nfs_reconnect()
1972 lck_mtx_unlock(&nmp->nm_lock); in nfs_reconnect()
1976 if ((error = nfs_sigintr(nmp, NULL, thd, 1))) { in nfs_reconnect()
1977 lck_mtx_unlock(&nmp->nm_lock); in nfs_reconnect()
1980 lck_mtx_unlock(&nmp->nm_lock); in nfs_reconnect()
1982 if ((error = nfs_sigintr(nmp, NULL, thd, 0))) { in nfs_reconnect()
1988 nfs_up(nmp, thd, NFSSTA_TIMEO, "connected"); in nfs_reconnect()
1998 if (rq->r_nmp == nmp) { in nfs_reconnect()
2019 nfs_disconnect(struct nfsmount *nmp) in nfs_disconnect() argument
2023 lck_mtx_lock(&nmp->nm_lock); in nfs_disconnect()
2025 if (nmp->nm_nso) { in nfs_disconnect()
2027 if (nmp->nm_state & NFSSTA_SENDING) { /* wait for sending to complete */ in nfs_disconnect()
2028 nmp->nm_state |= NFSSTA_WANTSND; in nfs_disconnect()
2029 msleep(&nmp->nm_state, &nmp->nm_lock, PZERO - 1, "nfswaitsending", &ts); in nfs_disconnect()
2032 if (nmp->nm_sockflags & NMSOCK_POKE) { /* wait for poking to complete */ in nfs_disconnect()
2033 msleep(&nmp->nm_sockflags, &nmp->nm_lock, PZERO - 1, "nfswaitpoke", &ts); in nfs_disconnect()
2036 nmp->nm_sockflags |= NMSOCK_DISCONNECTING; in nfs_disconnect()
2037 nmp->nm_sockflags &= ~NMSOCK_READY; in nfs_disconnect()
2038 nso = nmp->nm_nso; in nfs_disconnect()
2039 nmp->nm_nso = NULL; in nfs_disconnect()
2040 if (nso->nso_saddr == nmp->nm_saddr) { in nfs_disconnect()
2043 lck_mtx_unlock(&nmp->nm_lock); in nfs_disconnect()
2045 lck_mtx_lock(&nmp->nm_lock); in nfs_disconnect()
2046 nmp->nm_sockflags &= ~NMSOCK_DISCONNECTING; in nfs_disconnect()
2047 lck_mtx_unlock(&nmp->nm_lock); in nfs_disconnect()
2049 lck_mtx_unlock(&nmp->nm_lock); in nfs_disconnect()
2057 nfs_need_reconnect(struct nfsmount *nmp) in nfs_need_reconnect() argument
2061 lck_mtx_lock(&nmp->nm_lock); in nfs_need_reconnect()
2062 nmp->nm_sockflags &= ~(NMSOCK_READY | NMSOCK_SETUP); in nfs_need_reconnect()
2063 lck_mtx_unlock(&nmp->nm_lock); in nfs_need_reconnect()
2071 if (rq->r_nmp == nmp) { in nfs_need_reconnect()
2094 struct nfsmount *nmp = arg; in nfs_mount_sock_thread() local
2103 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2104 while (!(nmp->nm_sockflags & NMSOCK_READY) || in nfs_mount_sock_thread()
2105 !TAILQ_EMPTY(&nmp->nm_resendq) || in nfs_mount_sock_thread()
2106 !LIST_EMPTY(&nmp->nm_monlist) || in nfs_mount_sock_thread()
2107 nmp->nm_deadto_start || in nfs_mount_sock_thread()
2108 (nmp->nm_state & NFSSTA_RECOVER) || in nfs_mount_sock_thread()
2109 ((nmp->nm_vers >= NFS_VER4) && !TAILQ_EMPTY(&nmp->nm_dreturnq))) { in nfs_mount_sock_thread()
2110 if (nmp->nm_sockflags & NMSOCK_UNMOUNT) { in nfs_mount_sock_thread()
2114 if (!(nmp->nm_sockflags & NMSOCK_READY) && !(nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD))) { in nfs_mount_sock_thread()
2115 if (nmp->nm_reconnect_start <= 0) { in nfs_mount_sock_thread()
2117 nmp->nm_reconnect_start = now.tv_sec; in nfs_mount_sock_thread()
2119 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2120 NFS_SOCK_DBG("nfs reconnect %s\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname); in nfs_mount_sock_thread()
2129 error = nfs_reconnect(nmp); in nfs_mount_sock_thread()
2136 vfs_statfs(nmp->nm_mountp)->f_mntfromname, error); in nfs_mount_sock_thread()
2138 nmp->nm_reconnect_start = 0; in nfs_mount_sock_thread()
2141 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2143 if ((nmp->nm_sockflags & NMSOCK_READY) && in nfs_mount_sock_thread()
2144 (nmp->nm_state & NFSSTA_RECOVER) && in nfs_mount_sock_thread()
2145 !(nmp->nm_sockflags & NMSOCK_UNMOUNT) && in nfs_mount_sock_thread()
2146 !(nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD))) { in nfs_mount_sock_thread()
2148 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2149 nfs_recover(nmp); in nfs_mount_sock_thread()
2150 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2154 while ((nmp->nm_vers >= NFS_VER4) && !(nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD)) && in nfs_mount_sock_thread()
2155 (nmp->nm_sockflags & NMSOCK_READY) && !(nmp->nm_state & NFSSTA_RECOVER) && in nfs_mount_sock_thread()
2156 ((np = TAILQ_FIRST(&nmp->nm_dreturnq)))) { in nfs_mount_sock_thread()
2157 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2158 nfs4_delegation_return(np, R_RECOVER, thd, nmp->nm_mcred); in nfs_mount_sock_thread()
2159 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2163 while ((((nmp->nm_sockflags & NMSOCK_READY) && !(nmp->nm_state & NFSSTA_RECOVER)) || in nfs_mount_sock_thread()
2164 (nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD))) && in nfs_mount_sock_thread()
2165 ((req = TAILQ_FIRST(&nmp->nm_resendq)))) { in nfs_mount_sock_thread()
2169 …while (req && !(nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD)) && req->r_resendtime && (now.tv_sec … in nfs_mount_sock_thread()
2176 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2178 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2183 TAILQ_REMOVE(&nmp->nm_resendq, req, r_rchain); in nfs_mount_sock_thread()
2186 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2196 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2217 error = nfs_sigintr(nmp, req, req->r_thread, 0); in nfs_mount_sock_thread()
2235 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2241 error = nfs_sigintr(nmp, req, req->r_thread, 0); in nfs_mount_sock_thread()
2251 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2263 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2265 if (nfs_mount_check_dead_timeout(nmp)) { in nfs_mount_sock_thread()
2266 nfs_mount_make_zombie(nmp); in nfs_mount_sock_thread()
2270 if (nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD)) { in nfs_mount_sock_thread()
2274 if (!LIST_EMPTY(&nmp->nm_monlist)) { in nfs_mount_sock_thread()
2275 nmp->nm_state |= NFSSTA_MONITOR_SCAN; in nfs_mount_sock_thread()
2276 LIST_FOREACH(np, &nmp->nm_monlist, n_monlink) { in nfs_mount_sock_thread()
2277 if (!(nmp->nm_sockflags & NMSOCK_READY) || in nfs_mount_sock_thread()
2278 (nmp->nm_state & (NFSSTA_RECOVER | NFSSTA_UNMOUNTING | NFSSTA_FORCE | NFSSTA_DEAD))) { in nfs_mount_sock_thread()
2282 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2287 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2293 if (error || !(nmp->nm_sockflags & NMSOCK_READY) || in nfs_mount_sock_thread()
2294 (nmp->nm_state & (NFSSTA_RECOVER | NFSSTA_UNMOUNTING | NFSSTA_FORCE | NFSSTA_DEAD))) { in nfs_mount_sock_thread()
2298 nmp->nm_state &= ~NFSSTA_MONITOR_SCAN; in nfs_mount_sock_thread()
2299 if (nmp->nm_state & NFSSTA_UNMOUNTING) { in nfs_mount_sock_thread()
2300 wakeup(&nmp->nm_state); /* let unmounting thread know scan is done */ in nfs_mount_sock_thread()
2303 …if ((nmp->nm_sockflags & NMSOCK_READY) || (nmp->nm_state & (NFSSTA_RECOVER | NFSSTA_UNMOUNTING))) { in nfs_mount_sock_thread()
2304 if (nmp->nm_deadto_start || !TAILQ_EMPTY(&nmp->nm_resendq) || in nfs_mount_sock_thread()
2305 (nmp->nm_state & NFSSTA_RECOVER)) { in nfs_mount_sock_thread()
2310 msleep(&nmp->nm_sockthd, &nmp->nm_lock, PSOCK, "nfssockthread", &ts); in nfs_mount_sock_thread()
2315 if ((nmp->nm_sockflags & NMSOCK_UNMOUNT) && in nfs_mount_sock_thread()
2316 (nmp->nm_state & NFSSTA_MOUNTED) && NMFLAG(nmp, CALLUMNT) && in nfs_mount_sock_thread()
2317 (nmp->nm_vers < NFS_VER4) && !(nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD))) { in nfs_mount_sock_thread()
2318 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2319 nfs3_umount_rpc(nmp, vfs_context_kernel(), in nfs_mount_sock_thread()
2320 (nmp->nm_sockflags & NMSOCK_READY) ? 6 : 2); in nfs_mount_sock_thread()
2321 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_sock_thread()
2324 if (nmp->nm_sockthd == thd) { in nfs_mount_sock_thread()
2325 nmp->nm_sockthd = NULL; in nfs_mount_sock_thread()
2327 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_sock_thread()
2328 wakeup(&nmp->nm_sockthd); in nfs_mount_sock_thread()
2334 nfs_mount_sock_thread_wake(struct nfsmount *nmp) in nfs_mount_sock_thread_wake() argument
2336 if (nmp->nm_sockthd) { in nfs_mount_sock_thread_wake()
2337 wakeup(&nmp->nm_sockthd); in nfs_mount_sock_thread_wake()
2338 } else if (kernel_thread_start(nfs_mount_sock_thread, nmp, &nmp->nm_sockthd) == KERN_SUCCESS) { in nfs_mount_sock_thread_wake()
2339 thread_deallocate(nmp->nm_sockthd); in nfs_mount_sock_thread_wake()
2349 nfs_mount_check_dead_timeout(struct nfsmount *nmp) in nfs_mount_check_dead_timeout() argument
2353 if (nmp->nm_state & NFSSTA_DEAD) { in nfs_mount_check_dead_timeout()
2356 if (nmp->nm_deadto_start == 0) { in nfs_mount_check_dead_timeout()
2359 nfs_is_squishy(nmp); in nfs_mount_check_dead_timeout()
2360 if (nmp->nm_curdeadtimeout <= 0) { in nfs_mount_check_dead_timeout()
2364 if ((now.tv_sec - nmp->nm_deadto_start) < nmp->nm_curdeadtimeout) { in nfs_mount_check_dead_timeout()
2378 nfs_mount_make_zombie(struct nfsmount *nmp) in nfs_mount_make_zombie() argument
2382 if (!nmp) { in nfs_mount_make_zombie()
2386 if (nmp->nm_state & NFSSTA_DEAD) { in nfs_mount_make_zombie()
2390 printf("nfs server %s: %sdead\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname, in nfs_mount_make_zombie()
2391 (nmp->nm_curdeadtimeout != nmp->nm_deadtimeout) ? "squished " : ""); in nfs_mount_make_zombie()
2392 fsid = vfs_statfs(nmp->nm_mountp)->f_fsid; in nfs_mount_make_zombie()
2393 lck_mtx_unlock(&nmp->nm_lock); in nfs_mount_make_zombie()
2394 nfs_mount_zombie(nmp, NFSSTA_DEAD); in nfs_mount_make_zombie()
2396 lck_mtx_lock(&nmp->nm_lock); in nfs_mount_make_zombie()
2443 nfs4_mount_callback_setup(struct nfsmount *nmp) in nfs4_mount_callback_setup() argument
2459 nmp->nm_cbid = nfs4_cb_id++; in nfs4_mount_callback_setup()
2460 if (nmp->nm_cbid == 0) { in nfs4_mount_callback_setup()
2461 nmp->nm_cbid = nfs4_cb_id++; in nfs4_mount_callback_setup()
2464 TAILQ_INSERT_HEAD(&nfs4_cb_mounts, nmp, nm_cblink); in nfs4_mount_callback_setup()
2605 nfs4_mount_callback_shutdown(struct nfsmount *nmp) in nfs4_mount_callback_shutdown() argument
2613 if (nmp->nm_cbid == 0) { in nfs4_mount_callback_shutdown()
2617 TAILQ_REMOVE(&nfs4_cb_mounts, nmp, nm_cblink); in nfs4_mount_callback_shutdown()
2619 while (nmp->nm_cbrefs) { in nfs4_mount_callback_shutdown()
2620 msleep(&nmp->nm_cbrefs, &nfs_global_mutex, PSOCK, "cbshutwait", &ts); in nfs4_mount_callback_shutdown()
2622 nmp->nm_cbid = 0; in nfs4_mount_callback_shutdown()
2696 struct nfsmount *nmp; in nfs4_cb_accept() local
2751 TAILQ_FOREACH(nmp, &nfs4_cb_mounts, nm_cblink) { in nfs4_cb_accept()
2753 if (!nmp->nm_saddr) { in nfs4_cb_accept()
2756 if (nfs_sockaddr_cmp((struct sockaddr*)&ncbsp->ncbs_saddr, nmp->nm_saddr) == 0) { in nfs4_cb_accept()
2760 if (!nmp) { /* we don't want this socket, mark it dead */ in nfs4_cb_accept()
2769 !nmp ? 500 : (NFS4_CB_TIMER_PERIOD * 1000)); in nfs4_cb_accept()
2770 } else if (!nmp && (nfs4_callback_timer_on < 2)) { in nfs4_cb_accept()
2839 struct nfsmount *nmp; in nfs4_cb_handler() local
2929 TAILQ_FOREACH(nmp, &nfs4_cb_mounts, nm_cblink) { in nfs4_cb_handler()
2930 if (nmp->nm_cbid != cbid) { in nfs4_cb_handler()
2934 if (!nmp->nm_saddr) { in nfs4_cb_handler()
2937 if (nfs_sockaddr_cmp((struct sockaddr*)&ncbsp->ncbs_saddr, nmp->nm_saddr) == 0) { in nfs4_cb_handler()
2942 if (nmp) { in nfs4_cb_handler()
2943 nmp->nm_cbrefs++; in nfs4_cb_handler()
2946 if (!nmp) { in nfs4_cb_handler()
2973 …error = nfs_nget(nmp->nm_mountp, NULL, NULL, fh->fh_data, fh->fh_len, NULL, NULL, RPCAUTH_UNKNOWN,… in nfs4_cb_handler()
3037 …error = nfs_nget(nmp->nm_mountp, NULL, NULL, fh->fh_data, fh->fh_len, NULL, NULL, RPCAUTH_UNKNOWN,… in nfs4_cb_handler()
3092 nmp->nm_cbrefs--; in nfs4_cb_handler()
3093 if (!nmp->nm_cbid) { in nfs4_cb_handler()
3094 wakeup(&nmp->nm_cbrefs); in nfs4_cb_handler()
3345 struct nfsmount *nmp; in nfs_send() local
3373 nmp = req->r_nmp; in nfs_send()
3374 sotype = nmp->nm_sotype; in nfs_send()
3380 if (((req->r_flags & R_SETUP) && !(nmp->nm_sockflags & NMSOCK_SETUP)) || in nfs_send()
3381 ((req->r_flags & R_RECOVER) && !(nmp->nm_sockflags & NMSOCK_READY))) { in nfs_send()
3393 lck_mtx_lock(&nmp->nm_lock); in nfs_send()
3394 if (!(nmp->nm_sockflags & NMSOCK_READY) && in nfs_send()
3395 !((nmp->nm_sockflags & NMSOCK_SETUP) && (req->r_flags & R_SETUP))) { in nfs_send()
3396 if (NMFLAG(nmp, INTR) && !(req->r_flags & R_NOINTR)) { in nfs_send()
3399 lck_mtx_unlock(&nmp->nm_lock); in nfs_send()
3414 lck_mtx_lock(&nmp->nm_lock); in nfs_send()
3415 while (!(nmp->nm_sockflags & NMSOCK_READY)) { in nfs_send()
3417 if (nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD)) { in nfs_send()
3421 if ((NMFLAG(nmp, SOFT) || (req->r_flags & R_SOFT)) && (nmp->nm_reconnect_start > 0)) { in nfs_send()
3424 if ((now.tv_sec - nmp->nm_reconnect_start) >= 8) { in nfs_send()
3433 nfs_mount_sock_thread_wake(nmp); in nfs_send()
3437 msleep(req, &nmp->nm_lock, slpflag | PSOCK, "nfsconnectwait", &ts); in nfs_send()
3440 lck_mtx_unlock(&nmp->nm_lock); in nfs_send()
3450 nso = nmp->nm_nso; in nfs_send()
3452 nmp->nm_state |= NFSSTA_SENDING; /* will be cleared by nfs_sndunlock() */ in nfs_send()
3453 lck_mtx_unlock(&nmp->nm_lock); in nfs_send()
3468 lck_mtx_lock(&nmp->nm_lock); in nfs_send()
3469 if (!(req->r_flags & R_CWND) && (nmp->nm_sent >= nmp->nm_cwnd)) { in nfs_send()
3471 slpflag = (NMFLAG(nmp, INTR) && req->r_thread) ? PCATCH : 0; in nfs_send()
3472 lck_mtx_unlock(&nmp->nm_lock); in nfs_send()
3481 lck_mtx_lock(&nmp->nm_lock); in nfs_send()
3482 while (nmp->nm_sent >= nmp->nm_cwnd) { in nfs_send()
3486 TAILQ_INSERT_TAIL(&nmp->nm_cwndq, req, r_cchain); in nfs_send()
3487 msleep(req, &nmp->nm_lock, slpflag | (PZERO - 1), "nfswaitcwnd", &ts); in nfs_send()
3490 TAILQ_REMOVE(&nmp->nm_cwndq, req, r_cchain); in nfs_send()
3494 lck_mtx_unlock(&nmp->nm_lock); in nfs_send()
3504 nmp->nm_sent += NFS_CWNDSCALE; in nfs_send()
3511 nmp->nm_cwnd >>= 1; in nfs_send()
3512 if (nmp->nm_cwnd < NFS_CWNDSCALE) { in nfs_send()
3513 nmp->nm_cwnd = NFS_CWNDSCALE; in nfs_send()
3516 lck_mtx_unlock(&nmp->nm_lock); in nfs_send()
3538 if ((sotype != SOCK_STREAM) && !sock_isconnected(nso->nso_so) && ((sendnam = nmp->nm_saddr))) { in nfs_send()
3598 (error != EWOULDBLOCK) && (error != EIO) && (nso == nmp->nm_nso)) { in nfs_send()
3634 if (needrecon && (nso == nmp->nm_nso)) { /* mark socket as needing reconnect */ in nfs_send()
3636 nfs_need_reconnect(nmp); in nfs_send()
3641 if (nfs_is_dead(error, nmp)) { in nfs_send()
3699 struct nfsmount *nmp = arg; in nfs_udp_rcv() local
3700 struct nfs_socket *nso = nmp->nm_nso; in nfs_udp_rcv()
3705 if (nmp->nm_sockflags & NMSOCK_CONNECTING) { in nfs_udp_rcv()
3719 nfs_request_match_reply(nmp, m); in nfs_udp_rcv()
3726 nfs_need_reconnect(nmp); in nfs_udp_rcv()
3734 struct nfsmount *nmp = arg; in nfs_tcp_rcv() local
3735 struct nfs_socket *nso = nmp->nm_nso; in nfs_tcp_rcv()
3742 if (nmp->nm_sockflags & NMSOCK_CONNECTING) { in nfs_tcp_rcv()
3747 lck_mtx_lock(&nmp->nm_lock); in nfs_tcp_rcv()
3748 nso = nmp->nm_nso; in nfs_tcp_rcv()
3749 if (!nso || (nso->nso_so != so) || (nmp->nm_sockflags & (NMSOCK_DISCONNECTING))) { in nfs_tcp_rcv()
3750 lck_mtx_unlock(&nmp->nm_lock); in nfs_tcp_rcv()
3753 lck_mtx_unlock(&nmp->nm_lock); in nfs_tcp_rcv()
3769 nfs_request_match_reply(nmp, m); in nfs_tcp_rcv()
3794 nfs_need_reconnect(nmp); in nfs_tcp_rcv()
3802 nfs_sock_poke(struct nfsmount *nmp) in nfs_sock_poke() argument
3810 lck_mtx_lock(&nmp->nm_lock); in nfs_sock_poke()
3811 if ((nmp->nm_sockflags & NMSOCK_UNMOUNT) || in nfs_sock_poke()
3812 !(nmp->nm_sockflags & NMSOCK_READY) || !nmp->nm_nso || !nmp->nm_nso->nso_so) { in nfs_sock_poke()
3814 nmp->nm_sockflags &= ~NMSOCK_POKE; in nfs_sock_poke()
3815 wakeup(&nmp->nm_sockflags); in nfs_sock_poke()
3816 lck_mtx_unlock(&nmp->nm_lock); in nfs_sock_poke()
3819 lck_mtx_unlock(&nmp->nm_lock); in nfs_sock_poke()
3826 error = sock_send(nmp->nm_nso->nso_so, &msg, MSG_DONTWAIT, &len); in nfs_sock_poke()
3828 lck_mtx_lock(&nmp->nm_lock); in nfs_sock_poke()
3829 nmp->nm_sockflags &= ~NMSOCK_POKE; in nfs_sock_poke()
3830 wakeup(&nmp->nm_sockflags); in nfs_sock_poke()
3831 lck_mtx_unlock(&nmp->nm_lock); in nfs_sock_poke()
3832 nfs_is_dead(error, nmp); in nfs_sock_poke()
3839 nfs_request_match_reply(struct nfsmount *nmp, mbuf_t mrep) in nfs_request_match_reply() argument
3874 lck_mtx_lock(&nmp->nm_lock); in nfs_request_match_reply()
3875 if (nmp->nm_sotype == SOCK_DGRAM) { in nfs_request_match_reply()
3880 FSDBG(530, R_XID32(req->r_xid), req, nmp->nm_sent, nmp->nm_cwnd); in nfs_request_match_reply()
3881 if (nmp->nm_cwnd <= nmp->nm_sent) { in nfs_request_match_reply()
3882 nmp->nm_cwnd += in nfs_request_match_reply()
3884 (nmp->nm_cwnd >> 1)) / nmp->nm_cwnd; in nfs_request_match_reply()
3885 if (nmp->nm_cwnd > NFS_MAXCWND) { in nfs_request_match_reply()
3886 nmp->nm_cwnd = NFS_MAXCWND; in nfs_request_match_reply()
3890 nmp->nm_sent -= NFS_CWNDSCALE; in nfs_request_match_reply()
3893 if ((nmp->nm_sent < nmp->nm_cwnd) && !TAILQ_EMPTY(&nmp->nm_cwndq)) { in nfs_request_match_reply()
3895 struct nfsreq *req2 = TAILQ_FIRST(&nmp->nm_cwndq); in nfs_request_match_reply()
3896 TAILQ_REMOVE(&nmp->nm_cwndq, req2, r_cchain); in nfs_request_match_reply()
3926 nmp->nm_timeouts = 0; in nfs_request_match_reply()
3927 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_match_reply()
4054 struct nfsmount *nmp; in nfs_request_create() local
4067 nmp = VFSTONFS(np ? NFSTOMP(np) : mp); in nfs_request_create()
4068 if (nfs_mount_gone(nmp)) { in nfs_request_create()
4074 lck_mtx_lock(&nmp->nm_lock); in nfs_request_create()
4075 if ((nmp->nm_state & (NFSSTA_FORCE | NFSSTA_DEAD)) && in nfs_request_create()
4076 (nmp->nm_state & NFSSTA_TIMEO)) { in nfs_request_create()
4077 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_create()
4086 if ((nmp->nm_vers != NFS_VER4) && (procnum >= 0) && (procnum < NFS_NPROCS)) { in nfs_request_create()
4089 if (nmp->nm_vers == NFS_VER4) { in nfs_request_create()
4098 req->r_nmp = nmp; in nfs_request_create()
4099 nmp->nm_ref++; in nfs_request_create()
4125 req->r_auth = nmp->nm_auth; in nfs_request_create()
4128 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_create()
4148 struct nfsmount *nmp; in nfs_request_destroy() local
4158 nmp = req->r_nmp; in nfs_request_destroy()
4170 if (nmp && req->r_achain.tqe_next != NFSREQNOLIST) { in nfs_request_destroy()
4171 TAILQ_REMOVE(&nmp->nm_iodq, req, r_achain); in nfs_request_destroy()
4178 if (nmp) { in nfs_request_destroy()
4179 lck_mtx_lock(&nmp->nm_lock); in nfs_request_destroy()
4183 nmp->nm_sent -= NFS_CWNDSCALE; in nfs_request_destroy()
4184 if ((nmp->nm_sent < nmp->nm_cwnd) && !TAILQ_EMPTY(&nmp->nm_cwndq)) { in nfs_request_destroy()
4186 struct nfsreq *req2 = TAILQ_FIRST(&nmp->nm_cwndq); in nfs_request_destroy()
4187 TAILQ_REMOVE(&nmp->nm_cwndq, req2, r_cchain); in nfs_request_destroy()
4194 TAILQ_REMOVE(&nmp->nm_resendq, req, r_rchain); in nfs_request_destroy()
4199 TAILQ_REMOVE(&nmp->nm_cwndq, req, r_cchain); in nfs_request_destroy()
4204 nmp->nm_jbreqs--; in nfs_request_destroy()
4205 clearjbtimeo = (nmp->nm_jbreqs == 0) ? NFSSTA_JUKEBOXTIMEO : 0; in nfs_request_destroy()
4207 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_destroy()
4212 nfs_up(nmp, req->r_thread, clearjbtimeo, NULL); in nfs_request_destroy()
4238 if (nmp) { in nfs_request_destroy()
4239 nfs_mount_rele(nmp); in nfs_request_destroy()
4286 struct nfsmount *nmp; in nfs_request_add_header() local
4298 nmp = req->r_nmp; in nfs_request_add_header()
4299 if (nfs_mount_gone(nmp)) { in nfs_request_add_header()
4309 nmp = req->r_nmp; in nfs_request_add_header()
4310 if (nfs_mount_gone(nmp)) { in nfs_request_add_header()
4313 lck_mtx_lock(&nmp->nm_lock); in nfs_request_add_header()
4314 if (NMFLAG(nmp, SOFT) || (req->r_flags & R_SOFT)) { in nfs_request_add_header()
4315 req->r_retry = nmp->nm_retry; in nfs_request_add_header()
4319 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_add_header()
4331 struct nfsmount *nmp; in nfs_request_send() local
4340 nmp = req->r_nmp; in nfs_request_send()
4341 if (nfs_mount_gone(nmp)) { in nfs_request_send()
4350 ((nmp->nm_tprintf_delay) - (nmp->nm_tprintf_initial_delay)); in nfs_request_send()
4405 struct nfsmount *nmp; in nfs_request_finish() local
4427 nmp = req->r_nmp; in nfs_request_finish()
4429 if ((req->r_flags & R_CWND) && nmp) { in nfs_request_finish()
4434 lck_mtx_lock(&nmp->nm_lock); in nfs_request_finish()
4435 FSDBG(273, R_XID32(req->r_xid), req, nmp->nm_sent, nmp->nm_cwnd); in nfs_request_finish()
4436 nmp->nm_sent -= NFS_CWNDSCALE; in nfs_request_finish()
4437 if ((nmp->nm_sent < nmp->nm_cwnd) && !TAILQ_EMPTY(&nmp->nm_cwndq)) { in nfs_request_finish()
4439 struct nfsreq *req2 = TAILQ_FIRST(&nmp->nm_cwndq); in nfs_request_finish()
4440 TAILQ_REMOVE(&nmp->nm_cwndq, req2, r_cchain); in nfs_request_finish()
4444 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_finish()
4485 (nmp && (NMFLAG(nmp, SOFT) || (req->r_flags & R_SOFT)) && in nfs_request_finish()
4486 ((nmp->nm_state & (NFSSTA_TIMEO | NFSSTA_FORCE | NFSSTA_DEAD)) == NFSSTA_TIMEO))) { in nfs_request_finish()
4487 nfs_up(nmp, req->r_thread, NFSSTA_TIMEO, "is alive again"); in nfs_request_finish()
4489 nfs_up(nmp, req->r_thread, NFSSTA_TIMEO, NULL); in nfs_request_finish()
4492 if (!error && !nmp) { in nfs_request_finish()
4584 if ((nmp->nm_vers != NFS_VER2) && (*status == NFSERR_TRYLATER)) { in nfs_request_finish()
4588 int delay, slpflag = (NMFLAG(nmp, INTR) && !(req->r_flags & R_NOINTR)) ? PCATCH : 0; in nfs_request_finish()
4592 if ((req->r_delay >= 30) && !(nmp->nm_state & NFSSTA_MOUNTED)) { in nfs_request_finish()
4604 if (nmp->nm_tprintf_initial_delay && (req->r_delay >= nmp->nm_tprintf_initial_delay)) { in nfs_request_finish()
4607 lck_mtx_lock(&nmp->nm_lock); in nfs_request_finish()
4608 nmp->nm_jbreqs++; in nfs_request_finish()
4609 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_finish()
4614 if ((NMFLAG(nmp, SOFT) || (req->r_flags & R_SOFT)) && (req->r_delay == 30) && in nfs_request_finish()
4639 FSDBG(273, R_XID32(req->r_xid), nmp, req, NFSERR_TRYLATER); in nfs_request_finish()
4645 lck_mtx_lock(&nmp->nm_lock); in nfs_request_finish()
4646 nmp->nm_jbreqs--; in nfs_request_finish()
4647 clearjbtimeo = (nmp->nm_jbreqs == 0) ? NFSSTA_JUKEBOXTIMEO : 0; in nfs_request_finish()
4648 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_finish()
4649 nfs_up(nmp, req->r_thread, clearjbtimeo, "resource available again"); in nfs_request_finish()
4653 if ((nmp->nm_vers >= NFS_VER4) && (*status == NFSERR_WRONGSEC)) { in nfs_request_finish()
4666 nfs4_secinfo_rpc(nmp, &req->r_secinfo, req->r_cred, srvflavors, &srvcount); in nfs_request_finish()
4676 if (nmp->nm_sec.count) { /* use the mount's preferred list of flavors */ in nfs_request_finish()
4677 for (; i < nmp->nm_sec.count; i++) { in nfs_request_finish()
4678 req->r_wrongsec[i] = nmp->nm_sec.flavors[i]; in nfs_request_finish()
4733 FSDBG(273, R_XID32(req->r_xid), nmp, req, NFSERR_WRONGSEC); in nfs_request_finish()
4736 if ((nmp->nm_vers >= NFS_VER4) && req->r_wrongsec) { in nfs_request_finish()
4767 if (nmp->nm_vers == NFS_VER2) { in nfs_request_finish()
4795 lck_mtx_lock(&nmp->nm_lock); in nfs_request_finish()
4796 nmp->nm_jbreqs--; in nfs_request_finish()
4797 clearjbtimeo = (nmp->nm_jbreqs == 0) ? NFSSTA_JUKEBOXTIMEO : 0; in nfs_request_finish()
4798 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_finish()
4800 nfs_up(nmp, req->r_thread, clearjbtimeo, NULL); in nfs_request_finish()
4803 FSDBG(273, R_XID32(req->r_xid), nmp, req, in nfs_request_finish()
4991 struct nfsmount *nmp; in nfs_request_async() local
5021 nmp = req->r_nmp; in nfs_request_async()
5022 if ((req->r_flags & R_RESENDQ) && !nfs_mount_gone(nmp)) { in nfs_request_async()
5023 lck_mtx_lock(&nmp->nm_lock); in nfs_request_async()
5024 …if ((req->r_flags & R_RESENDQ) && (nmp->nm_state & NFSSTA_RECOVER) && (req->r_rchain.tqe_next != N… in nfs_request_async()
5030 TAILQ_REMOVE(&nmp->nm_resendq, req, r_rchain); in nfs_request_async()
5033 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_async()
5045 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_async()
5079 struct nfsmount *nmp; in nfs_request_async_finish() local
5088 if ((nmp = req->r_nmp)) { in nfs_request_async_finish()
5089 lck_mtx_lock(&nmp->nm_lock); in nfs_request_async_finish()
5090 …if ((req->r_flags & R_RESENDQ) && (nmp->nm_state & NFSSTA_RECOVER) && (req->r_rchain.tqe_next != N… in nfs_request_async_finish()
5096 TAILQ_REMOVE(&nmp->nm_resendq, req, r_rchain); in nfs_request_async_finish()
5102 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_async_finish()
5105 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_async_finish()
5172 struct nfsmount *nmp = req->r_nmp; in nfs_softterm() local
5175 if (!(req->r_flags & R_CWND) || nfs_mount_gone(nmp)) { in nfs_softterm()
5180 lck_mtx_lock(&nmp->nm_lock); in nfs_softterm()
5181 FSDBG(532, R_XID32(req->r_xid), req, nmp->nm_sent, nmp->nm_cwnd); in nfs_softterm()
5182 nmp->nm_sent -= NFS_CWNDSCALE; in nfs_softterm()
5183 if ((nmp->nm_sent < nmp->nm_cwnd) && !TAILQ_EMPTY(&nmp->nm_cwndq)) { in nfs_softterm()
5185 struct nfsreq *req2 = TAILQ_FIRST(&nmp->nm_cwndq); in nfs_softterm()
5186 TAILQ_REMOVE(&nmp->nm_cwndq, req2, r_cchain); in nfs_softterm()
5190 lck_mtx_unlock(&nmp->nm_lock); in nfs_softterm()
5266 struct nfsmount *nmp, *unmountp = param0; in nfs_request_timer() local
5285 nmp = req->r_nmp; in nfs_request_timer()
5286 if (nmp == NULL) { in nfs_request_timer()
5293 if (unmountp && unmountp != nmp) { in nfs_request_timer()
5302 if ((error = nfs_sigintr(nmp, req, req->r_thread, 0))) { in nfs_request_timer()
5324 if (nmp->nm_tprintf_initial_delay && in nfs_request_timer()
5326 ((req->r_lastmsg + nmp->nm_tprintf_delay) < now.tv_sec)) { in nfs_request_timer()
5331 lck_mtx_lock(&nmp->nm_lock); in nfs_request_timer()
5332 if (!(nmp->nm_state & NFSSTA_MOUNTED)) { in nfs_request_timer()
5333 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5346 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5353 if (!(NMFLAG(nmp, SOFT) || (req->r_flags & R_SOFT)) && !nfs_can_squish(nmp)) { in nfs_request_timer()
5356 ((nmp->nm_reconnect_start <= 0) || ((now.tv_sec - nmp->nm_reconnect_start) < 8))) { in nfs_request_timer()
5357 maxtime = (NFS_MAXTIMEO / (nmp->nm_timeouts + 1)) / 2; in nfs_request_timer()
5367 lck_mtx_lock(&nmp->nm_lock); in nfs_request_timer()
5374 } else if (NMFLAG(nmp, DUMBTIMER)) { in nfs_request_timer()
5375 timeo = nmp->nm_timeo; in nfs_request_timer()
5377 timeo = NFS_RTO(nmp, proct[req->r_procnum]); in nfs_request_timer()
5384 if (nmp->nm_timeouts > 0) { in nfs_request_timer()
5385 timeo *= nfs_backoff[nmp->nm_timeouts - 1]; in nfs_request_timer()
5394 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5401 req->r_xid, req->r_rtt, timeo, nmp->nm_timeouts, in nfs_request_timer()
5403 if (nmp->nm_timeouts < 8) { in nfs_request_timer()
5404 nmp->nm_timeouts++; in nfs_request_timer()
5406 if (nfs_mount_check_dead_timeout(nmp)) { in nfs_request_timer()
5416 if (nmp->nm_sockflags & NMSOCK_POKE) { in nfs_request_timer()
5417 nmp->nm_sockflags &= ~NMSOCK_POKE; in nfs_request_timer()
5418 TAILQ_REMOVE(&nfs_mount_poke_queue, nmp, nm_pokeq); in nfs_request_timer()
5435 nmp->nm_ref++; in nfs_request_timer()
5436 nfs_mount_make_zombie(nmp); in nfs_request_timer()
5437 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5438 nfs_mount_rele(nmp); in nfs_request_timer()
5449 if ((nmp->nm_sotype == SOCK_STREAM) && in nfs_request_timer()
5451 !(nmp->nm_sockflags & (NMSOCK_POKE | NMSOCK_UNMOUNT)) && in nfs_request_timer()
5452 (nmp->nm_sockflags & NMSOCK_READY)) { in nfs_request_timer()
5453 nmp->nm_sockflags |= NMSOCK_POKE; in nfs_request_timer()
5460 nmp->nm_ref++; in nfs_request_timer()
5461 TAILQ_INSERT_TAIL(&nfs_mount_poke_queue, nmp, nm_pokeq); in nfs_request_timer()
5463 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5467 if ((NMFLAG(nmp, SOFT) || (req->r_flags & (R_SETUP | R_RECOVER | R_SOFT))) && in nfs_request_timer()
5471 lck_mtx_lock(&nmp->nm_lock); in nfs_request_timer()
5472 if (!(nmp->nm_state & NFSSTA_TIMEO)) { in nfs_request_timer()
5473 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5481 lck_mtx_unlock(&nmp->nm_lock); in nfs_request_timer()
5502 if ((nmp->nm_sotype == SOCK_STREAM) && !(req->r_flags & R_MUSTRESEND)) { in nfs_request_timer()
5533 while ((nmp = TAILQ_FIRST(&nfs_mount_poke_queue))) { in nfs_request_timer()
5534 TAILQ_REMOVE(&nfs_mount_poke_queue, nmp, nm_pokeq); in nfs_request_timer()
5535 nfs_sock_poke(nmp); in nfs_request_timer()
5536 nfs_mount_rele(nmp); in nfs_request_timer()
5562 nfs_sigintr(struct nfsmount *nmp, struct nfsreq *req, thread_t thd, int nmplocked) in nfs_sigintr() argument
5567 if (!nmp) { in nfs_sigintr()
5576 if ((IOPMRootDomainGetWillShutdown() && (nmp->nm_state & NFSSTA_TIMEO)) || in nfs_sigintr()
5589 lck_mtx_lock(&nmp->nm_lock); in nfs_sigintr()
5591 if (nmp->nm_state & NFSSTA_FORCE) { in nfs_sigintr()
5594 } else if (vfs_isforce(nmp->nm_mountp)) { in nfs_sigintr()
5596 NFS_BITMAP_SET(nmp->nm_flags, NFS_MFLAG_SOFT); in nfs_sigintr()
5597 nmp->nm_state |= NFSSTA_FORCE; in nfs_sigintr()
5604 if (req && vfs_isunmount(nmp->nm_mountp) && in nfs_sigintr()
5605 (nmp->nm_state & NFSSTA_TIMEO) && !(req->r_flags & R_NOUMOUNTINTR)) { in nfs_sigintr()
5609 if (!error && (nmp->nm_state & NFSSTA_DEAD)) { in nfs_sigintr()
5618 !error && (nmp->nm_state & NFSSTA_TIMEO) && nfs_noremotehang(thd)) { in nfs_sigintr()
5623 lck_mtx_unlock(&nmp->nm_lock); in nfs_sigintr()
5644 if (NMFLAG(nmp, INTR) && ((p = get_bsdthreadtask_info(thd))) && in nfs_sigintr()
5660 struct nfsmount *nmp = req->r_nmp; in nfs_sndlock() local
5665 if (nfs_mount_gone(nmp)) { in nfs_sndlock()
5669 lck_mtx_lock(&nmp->nm_lock); in nfs_sndlock()
5670 statep = &nmp->nm_state; in nfs_sndlock()
5672 if (NMFLAG(nmp, INTR) && req->r_thread && !(req->r_flags & R_NOINTR)) { in nfs_sndlock()
5676 if ((error = nfs_sigintr(nmp, req, req->r_thread, 1))) { in nfs_sndlock()
5683 msleep(statep, &nmp->nm_lock, slpflag | (PZERO - 1), "nfsndlck", &ts); in nfs_sndlock()
5692 lck_mtx_unlock(&nmp->nm_lock); in nfs_sndlock()
5702 struct nfsmount *nmp = req->r_nmp; in nfs_sndunlock() local
5705 if (!nmp) { in nfs_sndunlock()
5708 lck_mtx_lock(&nmp->nm_lock); in nfs_sndunlock()
5709 statep = &nmp->nm_state; in nfs_sndunlock()
5718 lck_mtx_unlock(&nmp->nm_lock); in nfs_sndunlock()
5726 struct nfsmount *nmp, in nfs_aux_request() argument
5828 if ((error = nfs_sigintr(nmp, NULL, !try ? NULL : thd, 0))) { in nfs_aux_request()
5925 struct nfsmount *nmp, in nfs_portmap_lookup() argument
6011 error = nfsm_rpchead2(nmp, stype, pmprog, pmvers, pmproc, in nfs_portmap_lookup()
6017 error = nfs_aux_request(nmp, thd, saddr, so, in nfs_portmap_lookup()
6134 nfs_can_squish(struct nfsmount *nmp) in nfs_can_squish() argument
6136 uint64_t flags = vfs_flags(nmp->nm_mountp); in nfs_can_squish()
6137 int softsquish = ((nfs_squishy_flags & NFS_SQUISH_SOFT) & NMFLAG(nmp, SOFT)); in nfs_can_squish()
6182 nfs_is_squishy(struct nfsmount *nmp) in nfs_is_squishy() argument
6184 mount_t mp = nmp->nm_mountp; in nfs_is_squishy()
6189 vfs_statfs(mp)->f_mntfromname, nmp->nm_curdeadtimeout, nfs_is_mobile); in nfs_is_squishy()
6191 if (!nfs_can_squish(nmp)) { in nfs_is_squishy()
6195 timeo = (nmp->nm_deadtimeout > timeo) ? max(nmp->nm_deadtimeout / 8, timeo) : timeo; in nfs_is_squishy()
6196 …NFS_SOCK_DBG("nm_writers = %d nm_mappers = %d timeo = %d\n", nmp->nm_writers, nmp->nm_mappers, ti… in nfs_is_squishy()
6198 if (nmp->nm_writers == 0 && nmp->nm_mappers == 0) { in nfs_is_squishy()
6207 if (!(flags & MNT_RDONLY) && !(nmp->nm_state & NFSSTA_SQUISHY)) { in nfs_is_squishy()
6214 nmp->nm_state |= NFSSTA_SQUISHY; in nfs_is_squishy()
6216 nmp->nm_state &= ~NFSSTA_SQUISHY; in nfs_is_squishy()
6219 nmp->nm_curdeadtimeout = squishy ? timeo : nmp->nm_deadtimeout; in nfs_is_squishy()
6221 NFS_SOCK_DBG("nm_curdeadtimeout = %d\n", nmp->nm_curdeadtimeout); in nfs_is_squishy()
6232 nfs_is_dead(int error, struct nfsmount *nmp) in nfs_is_dead() argument
6236 lck_mtx_lock(&nmp->nm_lock); in nfs_is_dead()
6237 if (nmp->nm_state & NFSSTA_DEAD) { in nfs_is_dead()
6238 lck_mtx_unlock(&nmp->nm_lock); in nfs_is_dead()
6243 !(nmp->nm_locations.nl_numlocs == 1 && nmp->nm_locations.nl_locations[0]->nl_servcount == 1)) { in nfs_is_dead()
6244 lck_mtx_unlock(&nmp->nm_lock); in nfs_is_dead()
6248 if ((nfs_squishy_flags & NFS_SQUISH_QUICK) && nfs_is_squishy(nmp)) { in nfs_is_dead()
6249 …printf("nfs_is_dead: nfs server %s: unreachable. Squished dead\n", vfs_statfs(nmp->nm_mountp)->f_m… in nfs_is_dead()
6250 fsid = vfs_statfs(nmp->nm_mountp)->f_fsid; in nfs_is_dead()
6251 lck_mtx_unlock(&nmp->nm_lock); in nfs_is_dead()
6252 nfs_mount_zombie(nmp, NFSSTA_DEAD); in nfs_is_dead()
6256 lck_mtx_unlock(&nmp->nm_lock); in nfs_is_dead()
6266 nfs_use_cache(struct nfsmount *nmp) in nfs_use_cache() argument
6273 int cache_ok = (nfs_is_mobile || NMFLAG(nmp, SOFT) || in nfs_use_cache()
6274 nfs_can_squish(nmp) || nmp->nm_deadtimeout); in nfs_use_cache()
6283 return (nmp->nm_state & timeoutmask) && cache_ok; in nfs_use_cache()
6295 nfs_down(struct nfsmount *nmp, thread_t thd, int error, int flags, const char *msg, int holding_sta… in nfs_down() argument
6301 if (nfs_mount_gone(nmp)) { in nfs_down()
6305 lck_mtx_lock(&nmp->nm_lock); in nfs_down()
6308 if (NMFLAG(nmp, MUTEJUKEBOX)) { /* jukebox timeouts don't count as unresponsive if muted */ in nfs_down()
6311 wasunresponsive = (nmp->nm_state & timeoutmask); in nfs_down()
6314 softnobrowse = (NMFLAG(nmp, SOFT) && (vfs_flags(nmp->nm_mountp) & MNT_DONTBROWSE)); in nfs_down()
6316 if ((flags & NFSSTA_TIMEO) && !(nmp->nm_state & NFSSTA_TIMEO)) { in nfs_down()
6317 nmp->nm_state |= NFSSTA_TIMEO; in nfs_down()
6319 if ((flags & NFSSTA_LOCKTIMEO) && !(nmp->nm_state & NFSSTA_LOCKTIMEO)) { in nfs_down()
6320 nmp->nm_state |= NFSSTA_LOCKTIMEO; in nfs_down()
6322 if ((flags & NFSSTA_JUKEBOXTIMEO) && !(nmp->nm_state & NFSSTA_JUKEBOXTIMEO)) { in nfs_down()
6323 nmp->nm_state |= NFSSTA_JUKEBOXTIMEO; in nfs_down()
6326 unresponsive = (nmp->nm_state & timeoutmask); in nfs_down()
6328 nfs_is_squishy(nmp); in nfs_down()
6330 if (unresponsive && (nmp->nm_curdeadtimeout > 0)) { in nfs_down()
6333 nmp->nm_deadto_start = now.tv_sec; in nfs_down()
6334 nfs_mount_sock_thread_wake(nmp); in nfs_down()
6335 } else if ((now.tv_sec - nmp->nm_deadto_start) > nmp->nm_curdeadtimeout && !holding_state) { in nfs_down()
6336 if (!(nmp->nm_state & NFSSTA_DEAD)) { in nfs_down()
6337 printf("nfs server %s: %sdead\n", vfs_statfs(nmp->nm_mountp)->f_mntfromname, in nfs_down()
6338 (nmp->nm_curdeadtimeout != nmp->nm_deadtimeout) ? "squished " : ""); in nfs_down()
6343 lck_mtx_unlock(&nmp->nm_lock); in nfs_down()
6345 if (do_vfs_signal == VQ_DEAD && !(nmp->nm_state & NFSSTA_DEAD)) { in nfs_down()
6346 nfs_mount_zombie(nmp, NFSSTA_DEAD); in nfs_down()
6353 vfs_event_signal(&vfs_statfs(nmp->nm_mountp)->f_fsid, do_vfs_signal, 0); in nfs_down()
6356 nfs_msg(thd, vfs_statfs(nmp->nm_mountp)->f_mntfromname, msg, error); in nfs_down()
6360 nfs_up(struct nfsmount *nmp, thread_t thd, int flags, const char *msg) in nfs_up() argument
6365 if (nfs_mount_gone(nmp)) { in nfs_up()
6370 nfs_msg(thd, vfs_statfs(nmp->nm_mountp)->f_mntfromname, msg, 0); in nfs_up()
6373 lck_mtx_lock(&nmp->nm_lock); in nfs_up()
6376 if (NMFLAG(nmp, MUTEJUKEBOX)) { /* jukebox timeouts don't count as unresponsive if muted */ in nfs_up()
6379 wasunresponsive = (nmp->nm_state & timeoutmask); in nfs_up()
6382 softnobrowse = (NMFLAG(nmp, SOFT) && (vfs_flags(nmp->nm_mountp) & MNT_DONTBROWSE)); in nfs_up()
6384 if ((flags & NFSSTA_TIMEO) && (nmp->nm_state & NFSSTA_TIMEO)) { in nfs_up()
6385 nmp->nm_state &= ~NFSSTA_TIMEO; in nfs_up()
6387 if ((flags & NFSSTA_LOCKTIMEO) && (nmp->nm_state & NFSSTA_LOCKTIMEO)) { in nfs_up()
6388 nmp->nm_state &= ~NFSSTA_LOCKTIMEO; in nfs_up()
6390 if ((flags & NFSSTA_JUKEBOXTIMEO) && (nmp->nm_state & NFSSTA_JUKEBOXTIMEO)) { in nfs_up()
6391 nmp->nm_state &= ~NFSSTA_JUKEBOXTIMEO; in nfs_up()
6394 unresponsive = (nmp->nm_state & timeoutmask); in nfs_up()
6396 nmp->nm_deadto_start = 0; in nfs_up()
6397 nmp->nm_curdeadtimeout = nmp->nm_deadtimeout; in nfs_up()
6398 nmp->nm_state &= ~NFSSTA_SQUISHY; in nfs_up()
6399 lck_mtx_unlock(&nmp->nm_lock); in nfs_up()
6407 vfs_event_signal(&vfs_statfs(nmp->nm_mountp)->f_fsid, VQ_NOTRESP, 1); in nfs_up()