Date: Fri, 15 May 2009 16:03:11 +0000 (UTC) From: Rick Macklem <rmacklem@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r192145 - head/sys/fs/nfsclient Message-ID: <200905151603.n4FG3B4q027987@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rmacklem Date: Fri May 15 16:03:11 2009 New Revision: 192145 URL: http://svn.freebsd.org/changeset/base/192145 Log: Modify the diskless booting code in sys/fs/nfsclient to be compatible with what is in sys/nfsclient, so that it will at least build now. Approved by: kib (mentor) Modified: head/sys/fs/nfsclient/nfs.h head/sys/fs/nfsclient/nfs_clvfsops.c Modified: head/sys/fs/nfsclient/nfs.h ============================================================================== --- head/sys/fs/nfsclient/nfs.h Fri May 15 14:41:44 2009 (r192144) +++ head/sys/fs/nfsclient/nfs.h Fri May 15 16:03:11 2009 (r192145) @@ -87,7 +87,7 @@ int ncl_fsinfo(struct nfsmount *, struct struct thread *); int ncl_init(struct vfsconf *); int ncl_uninit(struct vfsconf *); -int ncl_mountroot(struct mount *, struct thread *); +int ncl_mountroot(struct mount *); int ncl_nfsiodnew(void); #endif /* _KERNEL */ Modified: head/sys/fs/nfsclient/nfs_clvfsops.c ============================================================================== --- head/sys/fs/nfsclient/nfs_clvfsops.c Fri May 15 14:41:44 2009 (r192144) +++ head/sys/fs/nfsclient/nfs_clvfsops.c Fri May 15 16:03:11 2009 (r192145) @@ -135,14 +135,15 @@ struct nfsv3_diskless newnfsv3_diskless int newnfs_diskless_valid = 0; SYSCTL_INT(_vfs_newnfs, OID_AUTO, diskless_valid, CTLFLAG_RD, - &newnfs_diskless_valid, 0, ""); + &newnfs_diskless_valid, 0, + "Has the diskless struct been filled correctly"); SYSCTL_STRING(_vfs_newnfs, OID_AUTO, diskless_rootpath, CTLFLAG_RD, - newnfsv3_diskless.root_hostnam, 0, ""); + newnfsv3_diskless.root_hostnam, 0, "Path to nfs root"); SYSCTL_OPAQUE(_vfs_newnfs, OID_AUTO, diskless_rootaddr, CTLFLAG_RD, - &newnfsv3_diskless.root_saddr, sizeof newnfsv3_diskless.root_saddr, - "%Ssockaddr_in", ""); + &newnfsv3_diskless.root_saddr, sizeof newnfsv3_diskless.root_saddr, + "%Ssockaddr_in", "Diskless root nfs address"); void newnfsargs_ntoh(struct nfs_args *); @@ -220,23 +221,27 @@ nfs_convert_diskless(void) { bcopy(&newnfs_diskless.myif, &newnfsv3_diskless.myif, - sizeof(struct ifaliasreq)); + sizeof (struct ifaliasreq)); bcopy(&newnfs_diskless.mygateway, &newnfsv3_diskless.mygateway, - sizeof(struct sockaddr_in)); - nfs_convert_oargs(&newnfsv3_diskless.root_args,&newnfs_diskless.root_args); + sizeof (struct sockaddr_in)); + nfs_convert_oargs(&newnfsv3_diskless.root_args, + &newnfs_diskless.root_args); if (newnfsv3_diskless.root_args.flags & NFSMNT_NFSV3) { newnfsv3_diskless.root_fhsize = NFSX_MYFH; - bcopy(newnfs_diskless.root_fh, newnfsv3_diskless.root_fh, NFSX_MYFH); + bcopy(newnfs_diskless.root_fh, newnfsv3_diskless.root_fh, + NFSX_MYFH); } else { newnfsv3_diskless.root_fhsize = NFSX_V2FH; - bcopy(newnfs_diskless.root_fh, newnfsv3_diskless.root_fh, NFSX_V2FH); + bcopy(newnfs_diskless.root_fh, newnfsv3_diskless.root_fh, + NFSX_V2FH); } bcopy(&newnfs_diskless.root_saddr,&newnfsv3_diskless.root_saddr, - sizeof(struct sockaddr_in)); - bcopy(newnfs_diskless.root_hostnam, newnfsv3_diskless.root_hostnam, MNAMELEN); + sizeof(struct sockaddr_in)); + bcopy(newnfs_diskless.root_hostnam, newnfsv3_diskless.root_hostnam, + MNAMELEN); newnfsv3_diskless.root_time = newnfs_diskless.root_time; bcopy(newnfs_diskless.my_hostnam, newnfsv3_diskless.my_hostnam, - MAXHOSTNAMELEN); + MAXHOSTNAMELEN); newnfs_diskless_valid = 3; } @@ -355,12 +360,14 @@ ncl_fsinfo(struct nfsmount *nmp, struct * * It is assumed to be safe to read, modify, and write the nfsv3_diskless * structure, as well as other global NFS client variables here, as - * ncl_mountroot() will be called once in the boot before any other NFS + * nfs_mountroot() will be called once in the boot before any other NFS * client activity occurs. */ int -ncl_mountroot(struct mount *mp, struct thread *td) +ncl_mountroot(struct mount *mp) { + struct thread *td = curthread; + INIT_VPROCG(TD_TO_VPROCG(td)); struct nfsv3_diskless *nd = &newnfsv3_diskless; struct socket *so; struct vnode *vp; @@ -371,13 +378,11 @@ ncl_mountroot(struct mount *mp, struct t char *cp; #if defined(BOOTP_NFSROOT) && defined(BOOTP) - bootpc_init(); /* use bootp to get newnfs_diskless filled in */ + bootpc_init(); /* use bootp to get nfs_diskless filled in */ #elif defined(NFS_ROOT) nfs_setup_diskless(); #endif - nfscl_init(); - if (newnfs_diskless_valid == 0) return (-1); if (newnfs_diskless_valid == 1) @@ -395,7 +400,7 @@ ncl_mountroot(struct mount *mp, struct t error = socreate(nd->myif.ifra_addr.sa_family, &so, nd->root_args.sotype, 0, td->td_ucred, td); if (error) - panic("ncl_mountroot: socreate(%04x): %d", + panic("nfs_mountroot: socreate(%04x): %d", nd->myif.ifra_addr.sa_family, error); #if 0 /* XXX Bad idea */ @@ -416,14 +421,14 @@ ncl_mountroot(struct mount *mp, struct t #endif error = ifioctl(so, SIOCAIFADDR, (caddr_t)&nd->myif, td); if (error) - panic("ncl_mountroot: SIOCAIFADDR: %d", error); + panic("nfs_mountroot: SIOCAIFADDR: %d", error); if ((cp = getenv("boot.netif.mtu")) != NULL) { ir.ifr_mtu = strtol(cp, NULL, 10); bcopy(nd->myif.ifra_name, ir.ifr_name, IFNAMSIZ); freeenv(cp); error = ifioctl(so, SIOCSIFMTU, (caddr_t)&ir, td); if (error) - printf("ncl_mountroot: SIOCSIFMTU: %d", error); + printf("nfs_mountroot: SIOCSIFMTU: %d", error); } soclose(so); @@ -441,12 +446,13 @@ ncl_mountroot(struct mount *mp, struct t sin = mask; sin.sin_family = AF_INET; sin.sin_len = sizeof(sin); + /* XXX MRT use table 0 for this sort of thing */ error = rtrequest(RTM_ADD, (struct sockaddr *)&sin, (struct sockaddr *)&nd->mygateway, (struct sockaddr *)&mask, RTF_UP | RTF_GATEWAY, NULL); if (error) - panic("ncl_mountroot: RTM_ADD: %d", error); + panic("nfs_mountroot: RTM_ADD: %d", error); } /* @@ -459,6 +465,7 @@ ncl_mountroot(struct mount *mp, struct t (l >> 24) & 0xff, (l >> 16) & 0xff, (l >> 8) & 0xff, (l >> 0) & 0xff, nd->root_hostnam); printf("NFS ROOT: %s\n", buf); + nd->root_args.hostname = buf; if ((error = nfs_mountdiskless(buf, &nd->root_saddr, &nd->root_args, td, &vp, mp)) != 0) { return (error); @@ -469,11 +476,13 @@ ncl_mountroot(struct mount *mp, struct t * set hostname here and then let the "/etc/rc.xxx" files * mount the right /var based upon its preset value. */ - bcopy(nd->my_hostnam, hostname, MAXHOSTNAMELEN); - hostname[MAXHOSTNAMELEN - 1] = '\0'; + mtx_lock(&hostname_mtx); + bcopy(nd->my_hostnam, V_hostname, MAXHOSTNAMELEN); + V_hostname[MAXHOSTNAMELEN - 1] = '\0'; for (i = 0; i < MAXHOSTNAMELEN; i++) - if (hostname[i] == '\0') + if (V_hostname[i] == '\0') break; + mtx_unlock(&hostname_mtx); inittodr(ntohl(nd->root_time)); return (0); } @@ -492,7 +501,7 @@ nfs_mountdiskless(char *path, nam = sodupsockaddr((struct sockaddr *)sin, M_WAITOK); if ((error = mountnfs(args, mp, nam, path, NULL, NULL, NULL, vpp, td->td_ucred, td)) != 0) { - printf("ncl_mountroot: mount %s on /: %d\n", path, error); + printf("nfs_mountroot: mount %s on /: %d\n", path, error); return (error); } return (0); @@ -704,7 +713,7 @@ nfs_mount(struct mount *mp) td = curthread; if ((mp->mnt_flag & (MNT_ROOTFS | MNT_UPDATE)) == MNT_ROOTFS) { - error = ncl_mountroot(mp, td); + error = ncl_mountroot(mp); goto out; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905151603.n4FG3B4q027987>