timeout(nfs_timer, (void *)0, hz / NFS_HZ);
timeout(nfs_timer, (void *)0, nfs_ticks);
nfs_timer(arg)	void *arg;{	register struct nfsreq *rep;	register struct mbuf *m;	register struct socket *so;	register struct nfsmount *nmp;	register int timeo;#ifdef NFSSERVER	static long lasttime = 0;#endif	int s, error;	s = splsoftnet();	for (rep = nfs_reqq.tqh_first; rep != 0; rep = rep->r_chain.tqe_next) {		nmp = rep->r_nmp;		if (rep->r_mrep || (rep->r_flags & R_SOFTTERM))			continue;		if (nfs_sigintr(nmp, rep, rep->r_procp)) {			rep->r_flags |= R_SOFTTERM;			continue;		}		if (rep->r_rtt >= 0) {			rep->r_rtt++;			if (nmp->nm_flag & NFSMNT_DUMBTIMR)				timeo = nmp->nm_timeo;			else				timeo = NFS_RTO(nmp, proct[rep->r_procnum]);			if (nmp->nm_timeouts > 0)				timeo *= nfs_backoff[nmp->nm_timeouts - 1];			if (rep->r_rtt <= timeo)				continue;			if (nmp->nm_timeouts < 8)				nmp->nm_timeouts++;		}		/*		 * Check for server not responding		 */		if ((rep->r_flags & R_TPRINTFMSG) == 0 &&		     rep->r_rexmit > nmp->nm_deadthresh) {			nfs_msg(rep->r_procp,			    nmp->nm_mountp->mnt_stat.f_mntfromname,			    "not responding");			rep->r_flags |= R_TPRINTFMSG;		}		if (rep->r_rexmit >= rep->r_retry) {	/* too many */			nfsstats.rpctimeouts++;			rep->r_flags |= R_SOFTTERM;			continue;		}		if (nmp->nm_sotype != SOCK_DGRAM) {			if (++rep->r_rexmit > NFS_MAXREXMIT)				rep->r_rexmit = NFS_MAXREXMIT;			continue;		}		if ((so = nmp->nm_so) == NULL)			continue;		/*		 * If there is enough space and the window allows..		 *	Resend it		 * Set r_rtt to -1 in case we fail to send it now.		 */		rep->r_rtt = -1;		if (sbspace(&so->so_snd) >= rep->r_mreq->m_pkthdr.len &&		   ((nmp->nm_flag & NFSMNT_DUMBTIMR) ||		    (rep->r_flags & R_SENT) ||		    nmp->nm_sent < nmp->nm_cwnd) &&		   (m = m_copym(rep->r_mreq, 0, M_COPYALL, M_DONTWAIT))){			if ((nmp->nm_flag & NFSMNT_NOCONN) == 0)			    error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m,			    (struct mbuf *)0, (struct mbuf *)0);			else			    error = (*so->so_proto->pr_usrreq)(so, PRU_SEND, m,			    nmp->nm_nam, (struct mbuf *)0);			if (error) {				if (NFSIGNORE_SOERROR(nmp->nm_soflags, error))					so->so_error = 0;			} else {				/*				 * Iff first send, start timing				 * else turn timing off, backoff timer				 * and divide congestion window by 2.				 */				if (rep->r_flags & R_SENT) {					rep->r_flags &= ~R_TIMING;					if (++rep->r_rexmit > NFS_MAXREXMIT)						rep->r_rexmit = NFS_MAXREXMIT;					nmp->nm_cwnd >>= 1;					if (nmp->nm_cwnd < NFS_CWNDSCALE)						nmp->nm_cwnd = NFS_CWNDSCALE;					nfsstats.rpcretries++;				} else {					rep->r_flags |= R_SENT;					nmp->nm_sent += NFS_CWNDSCALE;				}				rep->r_rtt = 0;			}		}	}#ifdef NFSSERVER	/*	 * Call the nqnfs server timer once a second to handle leases.	 */	if (lasttime != time.tv_sec) {		lasttime = time.tv_sec;		nqnfs_serverd();	}#endif /* NFSSERVER */	splx(s);	timeout(nfs_timer, (void *)0, hz / NFS_HZ);}