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>
