printf("root time: 0x%x\n", n);
printf("root time: 0x%lx\n", n);
nfs_mountroot(){	struct nfs_diskless nd;	struct vattr attr;	struct mount *mp;	struct vnode *vp;	struct proc *procp;	long n;	int error;	procp = curproc; /* XXX */	/*	 * XXX time must be non-zero when we init the interface or else	 * the arp code will wedge.  [Fixed now in if_ether.c]	 * However, the NFS attribute cache gives false "hits" when	 * time.tv_sec < NFS_ATTRTIMEO(np) so keep this in for now.	 */	if (time.tv_sec < NFS_MAXATTRTIMO)		time.tv_sec = NFS_MAXATTRTIMO;	/*	 * Call nfs_boot_init() to fill in the nfs_diskless struct.	 * Side effect:  Finds and configures a network interface.	 */	bzero((caddr_t) &nd, sizeof(nd));	nfs_boot_init(&nd, procp);	/*	 * Create the root mount point.	 */	nfs_boot_getfh(&nd.nd_boot, "root", &nd.nd_root);	mp = nfs_mount_diskless(&nd.nd_root, "/", 0, &vp);	printf("root on %s\n", nd.nd_root.ndm_host);	/*	 * Link it into the mount list.	 */	if (vfs_lock(mp))		panic("nfs_mountroot: vfs_lock");	CIRCLEQ_INSERT_TAIL(&mountlist, mp, mnt_list);	mp->mnt_vnodecovered = NULLVP;	vfs_unlock(mp);	rootvp = vp;	/* Get root attributes (for the time). */	error = VOP_GETATTR(vp, &attr, procp->p_ucred, procp);	if (error) panic("nfs_mountroot: getattr for root");	n = attr.va_mtime.tv_sec;#ifdef	DEBUG	printf("root time: 0x%x\n", n);#endif	inittodr(n);#ifdef notyet	/* Set up swap credentials. */	proc0.p_ucred->cr_uid = ntohl(nd.swap_ucred.cr_uid);	proc0.p_ucred->cr_gid = ntohl(nd.swap_ucred.cr_gid);	if ((proc0.p_ucred->cr_ngroups = ntohs(nd.swap_ucred.cr_ngroups)) >		NGROUPS)		proc0.p_ucred->cr_ngroups = NGROUPS;	for (i = 0; i < proc0.p_ucred->cr_ngroups; i++)	    proc0.p_ucred->cr_groups[i] = ntohl(nd.swap_ucred.cr_groups[i]);#endif	/*	 * "Mount" the swap device.	 *	 * On a "dataless" configuration (swap on disk) we will have:	 *	(swdevt[0].sw_dev != NODEV) identifying the swap device.	 */	if (bdevvp(swapdev, &swapdev_vp))		panic("nfs_mountroot: can't setup swap vp");	if (swdevt[0].sw_dev != NODEV) {		printf("swap on device 0x%x\n", swdevt[0].sw_dev);		return (0);	}	/*	 * If swapping to an nfs node:  (swdevt[0].sw_dev == NODEV)	 * Create a fake mount point just for the swap vnode so that the	 * swap file can be on a different server from the rootfs.	 */	nfs_boot_getfh(&nd.nd_boot, "swap", &nd.nd_swap);	mp = nfs_mount_diskless(&nd.nd_swap, "/swap", 0, &vp);	printf("swap on %s\n", nd.nd_swap.ndm_host);	/*	 * Since the swap file is not the root dir of a file system,	 * hack it to a regular file.	 */	vp->v_type = VREG;	vp->v_flag = 0;	swdevt[0].sw_vp = vp;	/*	 * Find out how large the swap file is.	 */	error = VOP_GETATTR(vp, &attr, procp->p_ucred, procp);	if (error)		panic("nfs_mountroot: getattr for swap");	n = (long) (attr.va_size >> DEV_BSHIFT);#ifdef	DEBUG	printf("swap size: 0x%x (blocks)\n", n);#endif	swdevt[0].sw_nblks = n;	return (0);}