diff options
Diffstat (limited to 'fs/nfs/callback.c')
-rw-r--r-- | fs/nfs/callback.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 99d2cfbce863..90c95adc8c1b 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/sunrpc/svc.h> | 14 | #include <linux/sunrpc/svc.h> |
15 | #include <linux/sunrpc/svcsock.h> | 15 | #include <linux/sunrpc/svcsock.h> |
16 | #include <linux/nfs_fs.h> | 16 | #include <linux/nfs_fs.h> |
17 | #include <linux/mutex.h> | ||
17 | 18 | ||
18 | #include <net/inet_sock.h> | 19 | #include <net/inet_sock.h> |
19 | 20 | ||
@@ -31,7 +32,7 @@ struct nfs_callback_data { | |||
31 | }; | 32 | }; |
32 | 33 | ||
33 | static struct nfs_callback_data nfs_callback_info; | 34 | static struct nfs_callback_data nfs_callback_info; |
34 | static DECLARE_MUTEX(nfs_callback_sema); | 35 | static DEFINE_MUTEX(nfs_callback_mutex); |
35 | static struct svc_program nfs4_callback_program; | 36 | static struct svc_program nfs4_callback_program; |
36 | 37 | ||
37 | unsigned int nfs_callback_set_tcpport; | 38 | unsigned int nfs_callback_set_tcpport; |
@@ -95,7 +96,7 @@ int nfs_callback_up(void) | |||
95 | int ret = 0; | 96 | int ret = 0; |
96 | 97 | ||
97 | lock_kernel(); | 98 | lock_kernel(); |
98 | down(&nfs_callback_sema); | 99 | mutex_lock(&nfs_callback_mutex); |
99 | if (nfs_callback_info.users++ || nfs_callback_info.pid != 0) | 100 | if (nfs_callback_info.users++ || nfs_callback_info.pid != 0) |
100 | goto out; | 101 | goto out; |
101 | init_completion(&nfs_callback_info.started); | 102 | init_completion(&nfs_callback_info.started); |
@@ -121,7 +122,7 @@ int nfs_callback_up(void) | |||
121 | nfs_callback_info.serv = serv; | 122 | nfs_callback_info.serv = serv; |
122 | wait_for_completion(&nfs_callback_info.started); | 123 | wait_for_completion(&nfs_callback_info.started); |
123 | out: | 124 | out: |
124 | up(&nfs_callback_sema); | 125 | mutex_unlock(&nfs_callback_mutex); |
125 | unlock_kernel(); | 126 | unlock_kernel(); |
126 | return ret; | 127 | return ret; |
127 | out_destroy: | 128 | out_destroy: |
@@ -139,7 +140,7 @@ int nfs_callback_down(void) | |||
139 | int ret = 0; | 140 | int ret = 0; |
140 | 141 | ||
141 | lock_kernel(); | 142 | lock_kernel(); |
142 | down(&nfs_callback_sema); | 143 | mutex_lock(&nfs_callback_mutex); |
143 | nfs_callback_info.users--; | 144 | nfs_callback_info.users--; |
144 | do { | 145 | do { |
145 | if (nfs_callback_info.users != 0 || nfs_callback_info.pid == 0) | 146 | if (nfs_callback_info.users != 0 || nfs_callback_info.pid == 0) |
@@ -147,7 +148,7 @@ int nfs_callback_down(void) | |||
147 | if (kill_proc(nfs_callback_info.pid, SIGKILL, 1) < 0) | 148 | if (kill_proc(nfs_callback_info.pid, SIGKILL, 1) < 0) |
148 | break; | 149 | break; |
149 | } while (wait_for_completion_timeout(&nfs_callback_info.stopped, 5*HZ) == 0); | 150 | } while (wait_for_completion_timeout(&nfs_callback_info.stopped, 5*HZ) == 0); |
150 | up(&nfs_callback_sema); | 151 | mutex_unlock(&nfs_callback_mutex); |
151 | unlock_kernel(); | 152 | unlock_kernel(); |
152 | return ret; | 153 | return ret; |
153 | } | 154 | } |