- return (error);
-}
-
-/*
- * nfs statfs call
- * (Actually a vfsop, not a vnode op)
- */
-nfs_statfs(mp, sbp)
- struct mount *mp;
- register struct statfs *sbp;
-{
- register struct vnode *vp;
- register struct nfsv2_statfs *sfp;
- register caddr_t cp;
- register long t1;
- caddr_t bpos, dpos, cp2;
- u_long xid;
- int error = 0;
- struct mbuf *mreq, *mrep, *md, *mb, *mb2;
- struct nfsmount *nmp;
- struct ucred *cred;
- struct nfsnode *np;
-
- nmp = vfs_to_nfs(mp);
- if (error = nfs_nget(mp, &nmp->nm_fh, &np))
- return (error);
- vp = NFSTOV(np);
- nfsstats.rpccnt[NFSPROC_STATFS]++;
- cred = crget();
- cred->cr_ngroups = 1;
- nfsm_reqhead(nfs_procids[NFSPROC_STATFS], cred, NFSX_FH);
- nfsm_fhtom(vp);
- nfsm_request(vp, nonidempotent[NFSPROC_STATFS]);
- nfsm_disect(sfp, struct nfsv2_statfs *, NFSX_STATFS);
- sbp->f_type = MOUNT_NFS;
- sbp->f_flags = nmp->nm_flag;
- sbp->f_bsize = fxdr_unsigned(long, sfp->sf_tsize);
- sbp->f_fsize = fxdr_unsigned(long, sfp->sf_bsize);
- sbp->f_blocks = fxdr_unsigned(long, sfp->sf_blocks);
- sbp->f_bfree = fxdr_unsigned(long, sfp->sf_bfree);
- sbp->f_bavail = fxdr_unsigned(long, sfp->sf_bavail);
- sbp->f_files = 0;
- sbp->f_ffree = 0;
- sbp->f_fsid.val[0] = mp->m_fsid.val[0];
- sbp->f_fsid.val[1] = mp->m_fsid.val[1];
- bcopy(nmp->nm_path, sbp->f_mntonname, MNAMELEN);
- bcopy(nmp->nm_host, sbp->f_mntfromname, MNAMELEN);
- nfsm_reqdone;
- nfs_nput(vp);
- crfree(cred);