* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
*/
+#include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sysctl.h>
#include <linux/slab.h>
#include <linux/smp.h>
#include <linux/smp_lock.h>
-#include <linux/mutex.h>
#include <linux/sunrpc/types.h>
#include <linux/sunrpc/stats.h>
struct nlmsvc_binding * nlmsvc_ops;
EXPORT_SYMBOL(nlmsvc_ops);
-static DEFINE_MUTEX(nlmsvc_mutex);
+static DECLARE_MUTEX(nlmsvc_sema);
static unsigned int nlmsvc_users;
static pid_t nlmsvc_pid;
int nlmsvc_grace_period;
unsigned long nlmsvc_timeout;
-static DECLARE_COMPLETION(lockd_start_done);
+static DECLARE_MUTEX_LOCKED(lockd_start);
static DECLARE_WAIT_QUEUE_HEAD(lockd_exit);
/*
* Let our maker know we're running.
*/
nlmsvc_pid = current->pid;
- complete(&lockd_start_done);
+ up(&lockd_start);
daemonize("lockd");
struct svc_serv * serv;
int error = 0;
- mutex_lock(&nlmsvc_mutex);
+ down(&nlmsvc_sema);
/*
* Unconditionally increment the user count ... this is
* the number of clients who _want_ a lockd process.
"lockd_up: create thread failed, error=%d\n", error);
goto destroy_and_out;
}
- wait_for_completion(&lockd_start_done);
+ down(&lockd_start);
/*
* Note: svc_serv structures have an initial use count of 1,
destroy_and_out:
svc_destroy(serv);
out:
- mutex_unlock(&nlmsvc_mutex);
+ up(&nlmsvc_sema);
return error;
}
EXPORT_SYMBOL(lockd_up);
{
static int warned;
- mutex_lock(&nlmsvc_mutex);
+ down(&nlmsvc_sema);
if (nlmsvc_users) {
if (--nlmsvc_users)
goto out;
* the lockd semaphore, we can't wait around forever ...
*/
clear_thread_flag(TIF_SIGPENDING);
- wait_event_timeout(lockd_exit, nlmsvc_pid == 0, HZ);
+ interruptible_sleep_on_timeout(&lockd_exit, HZ);
if (nlmsvc_pid) {
printk(KERN_WARNING
"lockd_down: lockd failed to exit, clearing pid\n");
recalc_sigpending();
spin_unlock_irq(¤t->sighand->siglock);
out:
- mutex_unlock(&nlmsvc_mutex);
+ up(&nlmsvc_sema);
}
EXPORT_SYMBOL(lockd_down);
static struct svc_stat nlmsvc_stats;
-#define NLM_NRVERS ARRAY_SIZE(nlmsvc_version)
+#define NLM_NRVERS (sizeof(nlmsvc_version)/sizeof(nlmsvc_version[0]))
static struct svc_program nlmsvc_program = {
.pg_prog = NLM_PROGRAM, /* program number */
.pg_nvers = NLM_NRVERS, /* number of entries in nlmsvc_version */