aboutsummaryrefslogtreecommitdiff
path: root/sys/nfsclient
diff options
context:
space:
mode:
authorJim Rees <rees@FreeBSD.org>2004-03-25 21:48:09 +0000
committerJim Rees <rees@FreeBSD.org>2004-03-25 21:48:09 +0000
commitf9955a5f5363f2936ee50338abecefd08ebaf892 (patch)
tree0f26711985dd062f959b4e838a8d83a0dbd7e570 /sys/nfsclient
parentaaf3e5b06564179b65e589879f95aea6e15bccc1 (diff)
downloadsrc-f9955a5f5363f2936ee50338abecefd08ebaf892.tar.gz
src-f9955a5f5363f2936ee50338abecefd08ebaf892.zip
only do nfs rpc callouts if there is work to do.
Submitted by: kan Approved by: alfred
Notes
Notes: svn path=/head/; revision=127421
Diffstat (limited to 'sys/nfsclient')
-rw-r--r--sys/nfsclient/nfs.h2
-rw-r--r--sys/nfsclient/nfs_socket.c7
-rw-r--r--sys/nfsclient/nfs_subs.c5
3 files changed, 8 insertions, 6 deletions
diff --git a/sys/nfsclient/nfs.h b/sys/nfsclient/nfs.h
index 2ac6bbc799e4..5f38f3335578 100644
--- a/sys/nfsclient/nfs.h
+++ b/sys/nfsclient/nfs.h
@@ -136,7 +136,7 @@ MALLOC_DECLARE(M_NFSHASH);
extern struct uma_zone *nfsmount_zone;
-extern struct callout_handle nfs_timer_handle;
+extern struct callout nfs_callout;
extern struct nfsstats nfsstats;
extern int nfs_numasync;
diff --git a/sys/nfsclient/nfs_socket.c b/sys/nfsclient/nfs_socket.c
index c70ab030243c..697478c71578 100644
--- a/sys/nfsclient/nfs_socket.c
+++ b/sys/nfsclient/nfs_socket.c
@@ -140,7 +140,7 @@ SYSCTL_INT(_vfs_nfs, OID_AUTO, bufpackets, CTLFLAG_RW, &nfs_bufpackets, 0, "");
#define NFS_MAXCWND (NFS_CWNDSCALE * 32)
#define NFS_NBACKOFF 8
static int nfs_backoff[NFS_NBACKOFF] = { 2, 4, 8, 16, 32, 64, 128, 256, };
-struct callout_handle nfs_timer_handle;
+struct callout nfs_callout;
static int nfs_msg(struct thread *, char *, char *);
static int nfs_rcvlock(struct nfsreq *);
@@ -938,6 +938,8 @@ tryagain:
* to put it LAST so timer finds oldest requests first.
*/
s = splsoftclock();
+ if (TAILQ_EMPTY(&nfs_reqq))
+ callout_reset(&nfs_callout, nfs_ticks, nfs_timer, NULL);
TAILQ_INSERT_TAIL(&nfs_reqq, rep, r_chain);
/*
@@ -977,6 +979,8 @@ tryagain:
*/
s = splsoftclock();
TAILQ_REMOVE(&nfs_reqq, rep, r_chain);
+ if (TAILQ_EMPTY(&nfs_reqq))
+ callout_stop(&nfs_callout);
splx(s);
/*
@@ -1184,7 +1188,6 @@ nfs_timer(void *arg)
}
}
splx(s);
- nfs_timer_handle = timeout(nfs_timer, NULL, nfs_ticks);
}
/*
diff --git a/sys/nfsclient/nfs_subs.c b/sys/nfsclient/nfs_subs.c
index b9acf1e8dcc0..aa29f36e22ee 100644
--- a/sys/nfsclient/nfs_subs.c
+++ b/sys/nfsclient/nfs_subs.c
@@ -418,8 +418,7 @@ nfs_init(struct vfsconf *vfsp)
* Initialize reply list and start timer
*/
TAILQ_INIT(&nfs_reqq);
-
- nfs_timer(0);
+ callout_init(&nfs_callout, 0);
nfs_prev_nfsclnt_sy_narg = sysent[SYS_nfsclnt].sy_narg;
sysent[SYS_nfsclnt].sy_narg = 2;
@@ -435,7 +434,7 @@ int
nfs_uninit(struct vfsconf *vfsp)
{
- untimeout(nfs_timer, (void *)NULL, nfs_timer_handle);
+ callout_stop(&nfs_callout);
sysent[SYS_nfsclnt].sy_narg = nfs_prev_nfsclnt_sy_narg;
sysent[SYS_nfsclnt].sy_call = nfs_prev_nfsclnt_sy_call;
return (0);