summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient/nfs_subs.c
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1998-09-07 05:42:15 +0000
committerbde <bde@FreeBSD.org>1998-09-07 05:42:15 +0000
commit3adc4cd6e25dab239f15b3fe6de3b46000bb7a2d (patch)
tree792b71dd47c3a85736091def5feff20986cd9d79 /sys/nfsclient/nfs_subs.c
parent73bcd2203955610546f0962d9d9cc627eb7b0d91 (diff)
downloadFreeBSD-src-3adc4cd6e25dab239f15b3fe6de3b46000bb7a2d.zip
FreeBSD-src-3adc4cd6e25dab239f15b3fe6de3b46000bb7a2d.tar.gz
Made unloading of the nfs LKM sort of work. This is mainly to test
detachment of vfs sysctls. Unloading of vfs LKMs doesn't actually work for any vfs, since it leaves garbage pointers to memory allocation control structures.
Diffstat (limited to 'sys/nfsclient/nfs_subs.c')
-rw-r--r--sys/nfsclient/nfs_subs.c39
1 files changed, 36 insertions, 3 deletions
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
OpenPOWER on IntegriCloud