From: Christoph Hellwig <hch@lst.de>
To: netdev@oss.sgi.com
Subject: [PATCH][RFC] use completions instead of sleep_on for rpciod
Date: Sat, 7 Feb 2004 15:44:05 +0100 [thread overview]
Message-ID: <20040207144405.GA19416@lst.de> (raw)
[let's hope some sunrpc folks are on this list, too, the nfs list
mentioned in MAINTAINERS refuses postings from non-subsribers..]
The rpciod shutdown code gives ugly sleep_on without BKL warnings in
-mm. And it looks indeed somewhat racy.
The easy fix would be to simply use a completion as in the patch below,
but that removes all the signal fuzzing semantics the current code has.
I don't really understand why we want to cancel the operation by
signals, but I think it'd be better to leave that to people familar with
the code anyway..
--- 1.27/net/sunrpc/sched.c Fri Jun 20 22:16:26 2003
+++ edited/net/sunrpc/sched.c Wed Feb 4 06:29:02 2004
@@ -71,7 +71,7 @@
* rpciod-related stuff
*/
static DECLARE_WAIT_QUEUE_HEAD(rpciod_idle);
-static DECLARE_WAIT_QUEUE_HEAD(rpciod_killer);
+static DECLARE_COMPLETION(rpciod_killer);
static DECLARE_MUTEX(rpciod_sema);
static unsigned int rpciod_users;
static pid_t rpciod_pid;
@@ -950,7 +950,6 @@
static int
rpciod(void *ptr)
{
- wait_queue_head_t *assassin = (wait_queue_head_t*) ptr;
int rounds = 0;
lock_kernel();
@@ -992,11 +991,11 @@
rpciod_killall();
}
- rpciod_pid = 0;
- wake_up(assassin);
-
dprintk("RPC: rpciod exiting\n");
unlock_kernel();
+
+ rpciod_pid = 0;
+ complete_and_exit(&rpciod_killer, 0);
return 0;
}
@@ -1041,7 +1040,7 @@
/*
* Create the rpciod thread and wait for it to start.
*/
- error = kernel_thread(rpciod, &rpciod_killer, 0);
+ error = kernel_thread(rpciod, NULL, 0);
if (error < 0) {
printk(KERN_WARNING "rpciod_up: create thread failed, error=%d\n", error);
rpciod_users--;
@@ -1057,8 +1056,6 @@
void
rpciod_down(void)
{
- unsigned long flags;
-
down(&rpciod_sema);
dprintk("rpciod_down pid %d sema %d\n", rpciod_pid, rpciod_users);
if (rpciod_users) {
@@ -1073,27 +1070,8 @@
}
kill_proc(rpciod_pid, SIGKILL, 1);
- /*
- * Usually rpciod will exit very quickly, so we
- * wait briefly before checking the process id.
- */
- clear_thread_flag(TIF_SIGPENDING);
- yield();
- /*
- * Display a message if we're going to wait longer.
- */
- while (rpciod_pid) {
- dprintk("rpciod_down: waiting for pid %d to exit\n", rpciod_pid);
- if (signalled()) {
- dprintk("rpciod_down: caught signal\n");
- break;
- }
- interruptible_sleep_on(&rpciod_killer);
- }
- spin_lock_irqsave(¤t->sighand->siglock, flags);
- recalc_sigpending();
- spin_unlock_irqrestore(¤t->sighand->siglock, flags);
-out:
+ wait_for_completion(&rpciod_killer);
+ out:
up(&rpciod_sema);
}
next reply other threads:[~2004-02-07 14:44 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-07 14:44 Christoph Hellwig [this message]
2004-02-08 20:43 ` [PATCH][RFC] use completions instead of sleep_on for rpciod David S. Miller
2004-02-09 10:28 ` Olaf Kirch
2004-02-09 11:38 ` [PATCH][RFC] sleep_on fixes for lockd Christoph Hellwig
2004-02-09 20:48 ` [NFS] [PATCH][RFC] use completions instead of sleep_on forrpciod trond.myklebust
2004-02-09 20:48 ` trond.myklebust
2004-02-09 21:00 ` David S. Miller
2004-02-10 9:15 ` Olaf Kirch
2004-02-10 11:47 ` trond.myklebust
2004-02-10 11:47 ` trond.myklebust
2004-02-10 1:52 ` [NFS] [PATCH][RFC] use completions instead of sleep_on for rpciod Greg Banks
2004-02-10 9:18 ` Olaf Kirch
-- strict thread matches above, loose matches on Subject: below --
2004-02-07 14:44 Christoph Hellwig
2004-02-07 14:44 Christoph Hellwig
2004-02-06 10:55 Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040207144405.GA19416@lst.de \
--to=hch@lst.de \
--cc=netdev@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.