Re: nfsroot anyone?

Gerd Knorr (kraxel@cs.tu-berlin.de)
Mon, 18 Mar 1996 16:21:17 +0100 (MET)


On Sat, 16 Mar 1996, Linus Torvalds wrote:

>
>
> On 16 Mar 1996, Markus Gutschke wrote:
> >
> > In article <199603140649.BAA01162@huahaga.rutgers.edu> "David S. Miller"
> <davem@caip.rutgers.edu> writes:
> > > Is anyone actively using 1.3.73 with nfsroot on any machines? If so,
> > > are you seeing any problems with this release? Thanks.
> >
> > I just tried to load 1.3.74 via nfsroot. I get lots and lots of
> > "kill_fasync: bad magic number in fasync_struct!" messages scrolling
> > by.
>
the fasync_struct pointer passed to kill_fasync is invalid. I get an oops
in kill_fasync (occures while kill_fasync tries to check the magic).

> It looks like nfsroot does some _really_ bad things, and it needs to be
> cleaned up to work (David tells me it uses the _same_ inode for network
> connecting as for the actual NFS root inode -- I just hope he mis-read
> the code, but if he didn't that certainly needs to be cleaned up).
>
Seems it really uses one inode for both. In 1.3.73 pipeinfo has been
added to nfs_inode_info, this moves the location of the nfs-handle in the
inode struct, and toggles this bug. Thats why the bad magic and the
kernel oops.

I moved the pipeinfo-element from the begin to the end of nfs_inode_info,
and now nfsroot works, I can boot my small box over net with 1.3.75. But
(as I expected) this breaks NFS-fifos, "screen" oopses now.

> There are some NFS-root changes in 1.3.75, but I haven't tested them and
> they don't look like they'd fix this particular problem. Could somebody
> who knows the nfsroot code take a look?
>
The kernel command line handling has been rewritten and bootp added. I
could'nt boot my box without a small patch: the etherboot package passes
"0.0.0.0" as gateway adress if there is no gateway. But the new code
complains that the gateway is'nt on the local net. Here is a patch to fix
this (adds an extra check):

Gerd

-------------------------------------------------------------
--- fs/nfs/nfsroot.c.1.3.75 Mon Mar 18 09:55:01 1996
+++ fs/nfs/nfsroot.c Mon Mar 18 16:00:29 1996
@@ -1136,7 +1136,10 @@
server.sin_addr.s_addr = in_aton(ip);
break;
case 2:
- gateway.sin_addr.s_addr = in_aton(ip);
+ if (0 == strcmp(ip,"0.0.0.0"))
+ gateway.sin_addr.s_addr = INADDR_NONE;
+ else
+ gateway.sin_addr.s_addr = in_aton(ip);
break;
case 3:
netmask.sin_addr.s_addr = in_aton(ip);
-------------------------------------------------------------