- nmp->nm_flag |= NFSMNT_SOFT;
- savretrans = nmp->nm_retrans;
- nmp->nm_retrans = 1;
- do {
- error = nfs_statfs(mp, sbp);
- } while (error == ETIMEDOUT && (u.u_procp->p_sig &
- (sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGTERM)|
- sigmask(SIGKILL))) == 0);
- nmp->nm_retrans = savretrans;
- nmp->nm_flag &= ~NFSMNT_SOFT;
- if (error)
- goto bad;
- } else if (error = nfs_statfs(mp, sbp))
+ if ((argp->flags & NFSMNT_TIMEO) && argp->timeo > 0) {
+ nmp->nm_rto = argp->timeo;
+ /* NFS timeouts are specified in 1/10 sec. */
+ nmp->nm_rto = (nmp->nm_rto * 10) / NFS_HZ;
+ if (nmp->nm_rto < NFS_MINTIMEO)
+ nmp->nm_rto = NFS_MINTIMEO;
+ else if (nmp->nm_rto > NFS_MAXTIMEO)
+ nmp->nm_rto = NFS_MAXTIMEO;
+ nmp->nm_rttvar = nmp->nm_rto << 1;
+ }
+
+ if ((argp->flags & NFSMNT_RETRANS) && argp->retrans > 1) {
+ nmp->nm_retry = argp->retrans;
+ if (nmp->nm_retry > NFS_MAXREXMIT)
+ nmp->nm_retry = NFS_MAXREXMIT;
+ }
+
+ if ((argp->flags & NFSMNT_WSIZE) && argp->wsize > 0) {
+ nmp->nm_wsize = argp->wsize;
+ /* Round down to multiple of blocksize */
+ nmp->nm_wsize &= ~0x1ff;
+ if (nmp->nm_wsize <= 0)
+ nmp->nm_wsize = 512;
+ else if (nmp->nm_wsize > NFS_MAXDATA)
+ nmp->nm_wsize = NFS_MAXDATA;
+ }
+ if (nmp->nm_wsize > MAXBSIZE)
+ nmp->nm_wsize = MAXBSIZE;
+
+ if ((argp->flags & NFSMNT_RSIZE) && argp->rsize > 0) {
+ nmp->nm_rsize = argp->rsize;
+ /* Round down to multiple of blocksize */
+ nmp->nm_rsize &= ~0x1ff;
+ if (nmp->nm_rsize <= 0)
+ nmp->nm_rsize = 512;
+ else if (nmp->nm_rsize > NFS_MAXDATA)
+ nmp->nm_rsize = NFS_MAXDATA;
+ }
+ if (nmp->nm_rsize > MAXBSIZE)
+ nmp->nm_rsize = MAXBSIZE;
+ /* Set up the sockets and per-host congestion */
+ nmp->nm_sotype = argp->sotype;
+ nmp->nm_soproto = argp->proto;
+ if (error = nfs_connect(nmp))