nfsroot.c patch

Kohtala Marko (Marko.Kohtala@ntc.nokia.com)
Tue, 27 May 1997 11:07:21 +0300


I have sent this patch to Olaf Kirch for verification, but since he
does not reply, I let you have a try on it on this list.

I get my diskless machine to boot again with this. It also has a
cosmetic fix for printk during BOOTP queries.

This should apply cleanly to 2.1.40.

--- 2.1-linux/fs/nfs/nfsroot.c Wed May 21 20:37:24 1997
+++ aspoca-linux/fs/nfs/nfsroot.c Thu May 22 23:19:09 1997
@@ -54,6 +54,7 @@
* Jacek Zapala : Fixed a bug which prevented server-ip address
* from nfsroot parameter from being used.
* Olaf Kirch : Adapted to new NFS code.
+ * Marko Kohtala : Fixed some bugs.
*
*/

@@ -566,7 +567,7 @@ static int root_connect_udp_sock(struct
struct sockaddr_in sa;
int result;

- set_sockaddr(&sa, htonl(addr), htonl(port));
+ set_sockaddr(&sa, htonl(addr), htons(port));
result = sock->ops->connect(sock, (struct sockaddr *) &sa, sizeof(sa), 0);
if (result < 0) {
printk(KERN_ERR "BOOTP: connect() failed\n");
@@ -584,7 +585,7 @@ static int root_bind_udp_sock(struct soc
struct sockaddr_in sa;
int result;

- set_sockaddr(&sa, htonl(addr), htonl(port));
+ set_sockaddr(&sa, htonl(addr), htons(port));
result = sock->ops->bind(sock, (struct sockaddr *) &sa, sizeof(sa));
if (result < 0) {
printk(KERN_ERR "BOOTP: bind() failed\n");
@@ -988,8 +989,10 @@ static int root_auto_config(void)
#else
;
#endif
- if (pkt_arrived)
+ if (pkt_arrived) {
+ printk(" OK\n");
break;
+ }
if (! --retries) {
printk(" timed out!\n");
break;
@@ -1011,7 +1014,6 @@ static int root_auto_config(void)
if (!pkt_arrived)
return -1;

- printk(" OK\n");
printk(KERN_NOTICE "Root-NFS: Got %s answer from %s, ",
(pkt_arrived == ARRIVED_BOOTP) ? "BOOTP" : "RARP",
in_ntoa(servaddr));
@@ -1120,6 +1122,7 @@ static int root_nfs_name(char *name)
memset(&nfs_data, 0, sizeof(nfs_data));
strncpy(nfs_data.hostname, in_ntoa(servaddr),
sizeof(nfs_data.hostname)-1);
+ nfs_data.namlen = strlen(nfs_data.hostname);

/* Set the name of the directory to mount */
if (nfs_path[0] == '\0' || strncmp(name, "default", 7))
@@ -1141,7 +1144,7 @@ static int root_nfs_name(char *name)

/* Set some default values */
nfs_port = -1;
- nfs_data.version = NFS_MNT_VERSION;
+ nfs_data.version = NFS_MOUNT_VERSION;
nfs_data.flags = NFS_MOUNT_NONLM; /* No lockd in nfs root yet */
nfs_data.rsize = NFS_DEF_FILE_IO_BUFFER_SIZE;
nfs_data.wsize = NFS_DEF_FILE_IO_BUFFER_SIZE;
@@ -1488,7 +1491,7 @@ static int root_nfs_ports(void)
"number from server, using default\n");
port = NFS_PORT;
}
- nfs_port = port;
+ nfs_port = htons(port);
dprintk("Root-NFS: Portmapper on server returned %d "
"as nfsd port\n", port);
}

-- 
---
Marko Kohtala - Marko.Kohtala@ntc.nokia.com, Marko.Kohtala@hut.fi