Date: Mon, 02 Aug 1999 12:38:40 -0700 From: Mike Smith <mike@smith.net.au> To: Alfred Perlstein <bright@rush.net> Cc: hackers@freebsd.org Subject: Re: confusion about nfsm_srvmtofh bad behavior? Message-ID: <199908021938.MAA00862@dingo.cdrom.com> In-Reply-To: Your message of "Mon, 02 Aug 1999 07:18:36 EDT." <Pine.BSF.3.96.990802064748.20420k-100000@cygnus.rush.net>
next in thread | previous in thread | raw e-mail | index | archive | help
> > ok: > > #define nfsm_srvmtofh(f) \ > { int fhlen = NFSX_V3FH; \ > if (nfsd->nd_flag & ND_NFSV3) { \ > nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED); \ > fhlen = fxdr_unsigned(int, *tl); \ > if (fhlen == 0) { \ > bzero((caddr_t)(f), NFSX_V3FH); \ > } else if (fhlen != NFSX_V3FH) { \ > error = EBADRPC; \ > nfsm_reply(0); \ > } \ > } \ > if (fhlen != 0) { \ > nfsm_dissect(tl, u_int32_t *, NFSX_V3FH); \ > bcopy((caddr_t)tl, (caddr_t)(f), NFSX_V3FH); \ > if ((nfsd->nd_flag & ND_NFSV3) == 0) \ > nfsm_adv(NFSX_V2FH - NFSX_V3FH); \ > } \ > } > > notice the bcopy? i don't really understand why we always > seem to copy 64 bytes (NFSX_V3FH), isn't this a bug? Yeah, you could probably rewrite as: #define nfsm_srvmtofh(f) \ { int fhlen; \ if (nfsd->nd_flag & ND_NFSV3) { \ nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED); \ fhlen = fxdr_unsigned(int, *tl); \ if (fhlen == 0) { \ bzero((caddr_t)(f), NFSX_V3FH); \ } else if (fhlen != NFSX_V3FH) { \ error = EBADRPC; \ nfsm_reply(0); \ } else { \ nfsm_dissect(tl, u_int32_t *, NFSX_V3FH); \ bcopy((caddr_t)tl, (caddr_t)(f), NFSX_V3FH); \ }\ } else { nfsm_dissect(tl, u_int32_t *, NFSX_V2FH); \ bcopy((caddr_t)tl, (caddr_t)(f), NFSX_V2FH); \ } \ } which avoids using fhlen as an argument to anything (speed) and limits the bcopy size appropriately by protocol. -- \\ The mind's the standard \\ Mike Smith \\ of the man. \\ msmith@freebsd.org \\ -- Joseph Merrick \\ msmith@cdrom.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199908021938.MAA00862>