diff options
Diffstat (limited to 'sys/nfsserver')
-rw-r--r-- | sys/nfsserver/nfs_serv.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c index bfae28d..4b08bc6 100644 --- a/sys/nfsserver/nfs_serv.c +++ b/sys/nfsserver/nfs_serv.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_serv.c 8.3 (Berkeley) 1/12/94 - * $Id: nfs_serv.c,v 1.60 1998/05/07 04:58:51 msmith Exp $ + * $Id: nfs_serv.c,v 1.61 1998/05/20 09:05:48 peter Exp $ */ /* @@ -3256,19 +3256,26 @@ nfsrv_fsinfo(nfsd, slp, procp, mrq) struct vattr at; nfsfh_t nfh; fhandle_t *fhp; - u_quad_t frev; + u_quad_t frev, maxfsize; + struct statfs sb; #ifndef nolint cache = 0; #endif fhp = &nfh.fh_generic; nfsm_srvmtofh(fhp); - if (error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, - &rdonly, (nfsd->nd_flag & ND_KERBAUTH), TRUE)) { + error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, + &rdonly, (nfsd->nd_flag & ND_KERBAUTH), TRUE); + if (error) { nfsm_reply(NFSX_UNSIGNED); nfsm_srvpostop_attr(getret, &at); return (0); } + + /* XXX Try to make a guess on the max file size. */ + VFS_STATFS(vp->v_mount, &sb, procp); + maxfsize = (u_quad_t)0x80000000 * sb.f_bsize - 1; + getret = VOP_GETATTR(vp, &at, cred, procp); vput(vp); nfsm_reply(NFSX_V3POSTOPATTR + NFSX_V3FSINFO); @@ -3291,8 +3298,7 @@ nfsrv_fsinfo(nfsd, slp, procp, mrq) sip->fs_wtpref = txdr_unsigned(pref); sip->fs_wtmult = txdr_unsigned(NFS_FABLKSIZE); sip->fs_dtpref = txdr_unsigned(pref); - sip->fs_maxfilesize.nfsuquad[0] = 0xffffffff; - sip->fs_maxfilesize.nfsuquad[1] = 0xffffffff; + txdr_hyper(&maxfsize, &sip->fs_maxfilesize); sip->fs_timedelta.nfsv3_sec = 0; sip->fs_timedelta.nfsv3_nsec = txdr_unsigned(1); sip->fs_properties = txdr_unsigned(NFSV3FSINFO_LINK | |