Date: Fri, 27 Jun 1997 13:19:25 -0700 (PDT) From: Bill Paul <wpaul> To: bde@zeta.org.au (Bruce Evans) Cc: cvs-all@freebsd.org, cvs-committers@freebsd.org, cvs-sys@freebsd.org Subject: Re: cvs commit: src/sys/nfs nfs_vfsops.c Message-ID: <199706272019.NAA13103@hub.freebsd.org> In-Reply-To: <199706271947.FAA04210@godzilla.zeta.org.au> from "Bruce Evans" at Jun 28, 97 05:47:51 am
next in thread | previous in thread | raw e-mail | index | archive | help
> > > This is a bit kludgy in that nfsmout is a label defined by the nfsm_subs.h > > macros, but these macros are themselves more than a little kludgy. This > > stops the machine from crashing, but does not fix the overall bug: 'error' > > somehow becomes 5 (EIO) when a statfs() is performed on the locally mounted > > NFS filesystem. This seems to only happen the first time the filesystem > > is accesed: on subsequent accesses, it seems to work fine again. > > I think the following fixes the bogus errno. The mkfifo bug also caused > EIO instead of the correct errno. > > Bruce > > diff -c2 nfs_serv.c~ nfs_serv.c > *** nfs_serv.c~ Sun Jun 15 01:24:55 1997 > --- nfs_serv.c Sun Jun 15 01:25:14 1997 > *************** > *** 1668,1672 **** > } > nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft); > ! return (0); > nfsmout: > if (dirp) > --- 1669,1673 ---- > } > nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft); > ! return (error); > nfsmout: > if (dirp) > Nope; I just built a kernel with this change and it still does it. I added a printf() nfs_vfsops() so I would check the value of 'error': Jun 27 16:09:36 mbone /vmunix: ERROR: 0 Jun 27 16:09:46 mbone last message repeated 12 times Jun 27 16:09:46 mbone /vmunix: ERROR: 5 <--- first time 'df' is run Jun 27 16:09:57 mbone /vmunix: ERROR: 0 <--- second I was wondering how a change to nfsrv_mknod() was supposed to fix this since I never call mknod() on the filesystem. That said, nfsrv_statfs() in the nfs_serv.c module also does things like: if (v3) nfsm_srvpostop_attr(getret, &at); if (error) return (0); Shouldn't this be: if (error) return(error); Or am I missing something. -Bill -Bill
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199706272019.NAA13103>