diff options
Diffstat (limited to 'sys/nfsserver')
-rw-r--r-- | sys/nfsserver/nfs.h | 5 | ||||
-rw-r--r-- | sys/nfsserver/nfs_srvsock.c | 5 | ||||
-rw-r--r-- | sys/nfsserver/nfs_srvsubs.c | 39 | ||||
-rw-r--r-- | sys/nfsserver/nfsrvstats.h | 5 |
4 files changed, 47 insertions, 7 deletions
diff --git a/sys/nfsserver/nfs.h b/sys/nfsserver/nfs.h index 885a2c1..0ed90c0 100644 --- a/sys/nfsserver/nfs.h +++ b/sys/nfsserver/nfs.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs.h 8.4 (Berkeley) 5/1/95 - * $Id: nfs.h,v 1.42 1998/06/30 11:19:22 jmg Exp $ + * $Id: nfs.h,v 1.43 1998/08/23 03:07:16 wollman Exp $ */ #ifndef _NFS_NFS_H_ @@ -314,6 +314,8 @@ MALLOC_DECLARE(M_NFSHASH); extern vm_zone_t nfsmount_zone; #endif +extern struct callout_handle nfs_timer_handle; + struct uio; struct buf; struct vattr; struct nameidata; /* XXX */ /* @@ -584,6 +586,7 @@ extern int nfs_debug; u_quad_t nfs_curusec __P((void)); int nfs_init __P((struct vfsconf *vfsp)); +int nfs_uninit __P((struct vfsconf *vfsp)); int nfs_reply __P((struct nfsreq *)); int nfs_getreq __P((struct nfsrv_descript *,struct nfsd *,int)); int nfs_send __P((struct socket *, struct sockaddr *, struct mbuf *, diff --git a/sys/nfsserver/nfs_srvsock.c b/sys/nfsserver/nfs_srvsock.c index 693899f..7b54d9e 100644 --- a/sys/nfsserver/nfs_srvsock.c +++ b/sys/nfsserver/nfs_srvsock.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_socket.c 8.5 (Berkeley) 3/30/95 - * $Id: nfs_socket.c,v 1.43 1998/08/01 09:04:02 peter Exp $ + * $Id: nfs_socket.c,v 1.44 1998/08/23 03:07:16 wollman Exp $ */ /* @@ -133,6 +133,7 @@ static int proct[NFS_NPROCS] = { static int nfs_backoff[8] = { 2, 4, 8, 16, 32, 64, 128, 256, }; int nfsrtton = 0; struct nfsrtt nfsrtt; +struct callout_handle nfs_timer_handle; static int nfs_msg __P((struct proc *,char *,char *)); static int nfs_rcvlock __P((struct nfsreq *)); @@ -1464,7 +1465,7 @@ nfs_timer(arg) } #endif /* NFS_NOSERVER */ splx(s); - timeout(nfs_timer, (void *)0, nfs_ticks); + nfs_timer_handle = timeout(nfs_timer, (void *)0, nfs_ticks); } diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c index d4d9280..346e9e6 100644 --- a/sys/nfsserver/nfs_srvsubs.c +++ b/sys/nfsserver/nfs_srvsubs.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_subs.c 8.8 (Berkeley) 5/22/95 - * $Id: nfs_subs.c,v 1.63 1998/06/21 12:50:12 bde Exp $ + * $Id: nfs_subs.c,v 1.64 1998/09/05 15:17:33 bde Exp $ */ /* @@ -110,7 +110,16 @@ struct nqtimerhead nqtimerhead; struct nqfhhashhead *nqfhhashtbl; u_long nqfhhash; +static void (*nfs_prev_lease_updatetime) __P((int)); +static int nfs_prev_nfssvc_sy_narg; +static sy_call_t *nfs_prev_nfssvc_sy_call; + #ifndef NFS_NOSERVER + +static vop_t *nfs_prev_vop_lease_check; +static int nfs_prev_getfh_sy_narg; +static sy_call_t *nfs_prev_getfh_sy_call; + /* * Mapping of old NFS Version 2 RPC numbers to generic numbers. */ @@ -1161,26 +1170,50 @@ nfs_init(vfsp) nfs_timer(0); - /* * Set up lease_check and lease_updatetime so that other parts * of the system can call us, if we are loadable. */ #ifndef NFS_NOSERVER + nfs_prev_vop_lease_check = default_vnodeop_p[VOFFSET(vop_lease)]; default_vnodeop_p[VOFFSET(vop_lease)] = (vop_t *)nqnfs_vop_lease_check; #endif + nfs_prev_lease_updatetime = lease_updatetime; lease_updatetime = nfs_lease_updatetime; - vfsp->vfc_refcount++; /* make us non-unloadable */ + nfs_prev_nfssvc_sy_narg = sysent[SYS_nfssvc].sy_narg; sysent[SYS_nfssvc].sy_narg = 2; + nfs_prev_nfssvc_sy_call = sysent[SYS_nfssvc].sy_call; sysent[SYS_nfssvc].sy_call = (sy_call_t *)nfssvc; #ifndef NFS_NOSERVER + nfs_prev_getfh_sy_narg = sysent[SYS_getfh].sy_narg; sysent[SYS_getfh].sy_narg = 2; + nfs_prev_getfh_sy_call = sysent[SYS_getfh].sy_call; sysent[SYS_getfh].sy_call = (sy_call_t *)getfh; #endif return (0); } +int +nfs_uninit(vfsp) + struct vfsconf *vfsp; +{ + + untimeout(nfs_timer, (void *)NULL, nfs_timer_handle); + nfs_mount_type = -1; +#ifndef NFS_NOSERVER + default_vnodeop_p[VOFFSET(vop_lease)] = nfs_prev_vop_lease_check; +#endif + lease_updatetime = nfs_prev_lease_updatetime; + sysent[SYS_nfssvc].sy_narg = nfs_prev_nfssvc_sy_narg; + sysent[SYS_nfssvc].sy_call = nfs_prev_nfssvc_sy_call; +#ifndef NFS_NOSERVER + sysent[SYS_getfh].sy_narg = nfs_prev_getfh_sy_narg; + sysent[SYS_getfh].sy_call = nfs_prev_getfh_sy_call; +#endif + return (0); +} + /* * Attribute cache routines. * nfs_loadattrcache() - loads or updates the cache contents from attributes diff --git a/sys/nfsserver/nfsrvstats.h b/sys/nfsserver/nfsrvstats.h index 885a2c1..0ed90c0 100644 --- a/sys/nfsserver/nfsrvstats.h +++ b/sys/nfsserver/nfsrvstats.h @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs.h 8.4 (Berkeley) 5/1/95 - * $Id: nfs.h,v 1.42 1998/06/30 11:19:22 jmg Exp $ + * $Id: nfs.h,v 1.43 1998/08/23 03:07:16 wollman Exp $ */ #ifndef _NFS_NFS_H_ @@ -314,6 +314,8 @@ MALLOC_DECLARE(M_NFSHASH); extern vm_zone_t nfsmount_zone; #endif +extern struct callout_handle nfs_timer_handle; + struct uio; struct buf; struct vattr; struct nameidata; /* XXX */ /* @@ -584,6 +586,7 @@ extern int nfs_debug; u_quad_t nfs_curusec __P((void)); int nfs_init __P((struct vfsconf *vfsp)); +int nfs_uninit __P((struct vfsconf *vfsp)); int nfs_reply __P((struct nfsreq *)); int nfs_getreq __P((struct nfsrv_descript *,struct nfsd *,int)); int nfs_send __P((struct socket *, struct sockaddr *, struct mbuf *, |