From: Avi Kivity <avi@exanet.com>
To: linux-kernel@vger.kernel.org
Subject: [PATCH] Deadlock during heavy write activity to userspace NFS server on local NFS mount
Date: Mon, 26 Jul 2004 16:11:28 +0300 [thread overview]
Message-ID: <41050300.90800@exanet.com> (raw)
On heavy write activity, allocators wait synchronously for kswapd to
free some memory. But if kswapd is freeing memory via a userspace NFS
server, that server could be waiting for kswapd, and the system seizes
instantly.
This patch (against RHEL 2.4.21-15EL, but should apply either literally
or conceptually to other kernels) allows a process to declare itself as
kswapd's little helper, and thus will not have to wait on kswapd.
--- a/include/linux/prctl.h 2003-10-23 09:00:00.000000000 +0200
+++ b/include/linux/prctl.h 2004-07-21 13:43:01.000000000 +0300
@@ -43,5 +43,10 @@
# define PR_TIMING_TIMESTAMP 1 /* Accurate timestamp based
process timing */
+/* Get/set PF_MEMALLOC task flag bit */
+#define PR_GET_KSWAPD_HELPER 15
+#define PR_SET_KSWAPD_HELPER 16
+
+
#endif /* _LINUX_PRCTL_H */
--- a/kernel/sys.c 2003-10-23 09:00:00.000000000 +0200
+++ b/kernel/sys.c 2004-07-21 13:42:59.000000000 +0300
@@ -1400,6 +1400,22 @@ asmlinkage long sys_prctl(int option, un
}
current->keep_capabilities = arg2;
break;
+ case PR_GET_KSWAPD_HELPER:
+ if (current->flags & PF_MEMALLOC)
+ error = 1;
+ break;
+ case PR_SET_KSWAPD_HELPER:
+ switch (arg2) {
+ case 0:
+ current->flags &= ~PF_MEMALLOC;
+ break;
+ case 1:
+ current->flags |= PF_MEMALLOC;
+ break;
+ default:
+ error = -EINVAL;
+ }
+ break;
default:
error = -EINVAL;
break;
--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
next reply other threads:[~2004-07-26 13:11 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-26 13:11 Avi Kivity [this message]
2004-07-26 21:02 ` [PATCH] Deadlock during heavy write activity to userspace NFS server on local NFS mount Pavel Machek
2004-07-27 20:22 ` Avi Kivity
2004-07-27 20:34 ` Pavel Machek
2004-07-27 21:02 ` Avi Kivity
2004-07-28 1:29 ` Nick Piggin
2004-07-28 2:17 ` Trond Myklebust
2004-07-28 5:13 ` Avi Kivity
2004-07-28 5:11 ` Avi Kivity
2004-07-28 5:29 ` Nick Piggin
2004-07-28 7:05 ` Avi Kivity
2004-07-28 7:16 ` Nick Piggin
2004-07-28 7:45 ` Avi Kivity
2004-07-28 9:05 ` Nick Piggin
2004-07-28 10:11 ` Avi Kivity
2004-07-28 10:30 ` Nick Piggin
2004-07-28 11:48 ` Avi Kivity
2004-07-29 8:29 ` Nick Piggin
2004-07-29 12:19 ` Marcelo Tosatti
2004-07-29 16:09 ` Avi Kivity
2004-07-28 12:08 ` Mikulas Patocka
2004-07-28 12:18 ` Avi Kivity
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=41050300.90800@exanet.com \
--to=avi@exanet.com \
--cc=linux-kernel@vger.kernel.org \
/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.