summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_lkm.c13
-rw-r--r--sys/nfs/nfs.h5
-rw-r--r--sys/nfs/nfs_common.c39
-rw-r--r--sys/nfs/nfs_socket.c5
-rw-r--r--sys/nfs/nfs_subs.c39
-rw-r--r--sys/nfs/nfs_vfsops.c4
-rw-r--r--sys/nfsclient/nfs.h5
-rw-r--r--sys/nfsclient/nfs_socket.c5
-rw-r--r--sys/nfsclient/nfs_subs.c39
-rw-r--r--sys/nfsclient/nfs_vfsops.c4
-rw-r--r--sys/nfsclient/nfsargs.h5
-rw-r--r--sys/nfsclient/nfsstats.h5
-rw-r--r--sys/nfsserver/nfs.h5
-rw-r--r--sys/nfsserver/nfs_srvsock.c5
-rw-r--r--sys/nfsserver/nfs_srvsubs.c39
-rw-r--r--sys/nfsserver/nfsrvstats.h5
16 files changed, 190 insertions, 32 deletions
diff --git a/sys/kern/kern_lkm.c b/sys/kern/kern_lkm.c
index dcbf70e..9061180 100644
--- a/sys/kern/kern_lkm.c
+++ b/sys/kern/kern_lkm.c
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: kern_lkm.c,v 1.54 1998/08/15 22:42:20 bde Exp $
+ * $Id: kern_lkm.c,v 1.55 1998/09/05 17:13:27 bde Exp $
*/
#include "opt_devfs.h"
@@ -615,8 +615,7 @@ _lkm_vfs(lkmtp, cmd)
struct sysctl_oid **oidpp;
struct vfsconf *vfc = args->lkm_vfsconf;
struct vfsconf *vfsp, *prev_vfsp;
- int i, maxtypenum;
- int err = 0;
+ int error, i, maxtypenum;
switch(cmd) {
case LKM_E_LOAD:
@@ -683,6 +682,12 @@ _lkm_vfs(lkmtp, cmd)
return EBUSY;
}
+ if (vfc->vfc_vfsops->vfs_uninit != NULL) {
+ error = (*vfc->vfc_vfsops->vfs_uninit)(vfsp);
+ if (error)
+ return (error);
+ }
+
prev_vfsp->vfc_next = vfsp->vfc_next;
if (vfsp->vfc_vfsops->vfs_oid != NULL) {
@@ -712,7 +717,7 @@ _lkm_vfs(lkmtp, cmd)
case LKM_E_STAT: /* no special handling... */
break;
}
- return(err);
+ return (0);
}
/*
diff --git a/sys/nfs/nfs.h b/sys/nfs/nfs.h
index 885a2c1..0ed90c0 100644
--- a/sys/nfs/nfs.h
+++ b/sys/nfs/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/nfs/nfs_common.c b/sys/nfs/nfs_common.c
index d4d9280..346e9e6 100644
--- a/sys/nfs/nfs_common.c
+++ b/sys/nfs/nfs_common.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/nfs/nfs_socket.c b/sys/nfs/nfs_socket.c
index 693899f..7b54d9e 100644
--- a/sys/nfs/nfs_socket.c
+++ b/sys/nfs/nfs_socket.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/nfs/nfs_subs.c b/sys/nfs/nfs_subs.c
index d4d9280..346e9e6 100644
--- a/sys/nfs/nfs_subs.c
+++ b/sys/nfs/nfs_subs.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/nfs/nfs_vfsops.c b/sys/nfs/nfs_vfsops.c
index ae40bc9..2f76a38 100644
--- a/sys/nfs/nfs_vfsops.c
+++ b/sys/nfs/nfs_vfsops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_vfsops.c 8.12 (Berkeley) 5/20/95
- * $Id: nfs_vfsops.c,v 1.73 1998/08/12 20:17:42 bde Exp $
+ * $Id: nfs_vfsops.c,v 1.74 1998/09/05 17:13:28 bde Exp $
*/
#include <sys/param.h>
@@ -132,7 +132,7 @@ static struct vfsops nfs_vfsops = {
nfs_fhtovp,
nfs_vptofh,
nfs_init,
- 0,
+ nfs_uninit,
&sysctl___vfs_nfs
};
VFS_SET(nfs_vfsops, nfs, MOUNT_NFS, VFCF_NETWORK);
diff --git a/sys/nfsclient/nfs.h b/sys/nfsclient/nfs.h
index 885a2c1..0ed90c0 100644
--- a/sys/nfsclient/nfs.h
+++ b/sys/nfsclient/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/nfsclient/nfs_socket.c b/sys/nfsclient/nfs_socket.c
index 693899f..7b54d9e 100644
--- a/sys/nfsclient/nfs_socket.c
+++ b/sys/nfsclient/nfs_socket.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/nfsclient/nfs_subs.c b/sys/nfsclient/nfs_subs.c
index d4d9280..346e9e6 100644
--- a/sys/nfsclient/nfs_subs.c
+++ b/sys/nfsclient/nfs_subs.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/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index ae40bc9..2f76a38 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_vfsops.c 8.12 (Berkeley) 5/20/95
- * $Id: nfs_vfsops.c,v 1.73 1998/08/12 20:17:42 bde Exp $
+ * $Id: nfs_vfsops.c,v 1.74 1998/09/05 17:13:28 bde Exp $
*/
#include <sys/param.h>
@@ -132,7 +132,7 @@ static struct vfsops nfs_vfsops = {
nfs_fhtovp,
nfs_vptofh,
nfs_init,
- 0,
+ nfs_uninit,
&sysctl___vfs_nfs
};
VFS_SET(nfs_vfsops, nfs, MOUNT_NFS, VFCF_NETWORK);
diff --git a/sys/nfsclient/nfsargs.h b/sys/nfsclient/nfsargs.h
index 885a2c1..0ed90c0 100644
--- a/sys/nfsclient/nfsargs.h
+++ b/sys/nfsclient/nfsargs.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/nfsclient/nfsstats.h b/sys/nfsclient/nfsstats.h
index 885a2c1..0ed90c0 100644
--- a/sys/nfsclient/nfsstats.h
+++ b/sys/nfsclient/nfsstats.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.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 *,
OpenPOWER on IntegriCloud