Subject: + ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues.patch
added to -mm tree
To:
[email protected],[email protected],[email protected],[email protected],[email protected]
From: [email protected]
Date: Tue, 11 Feb 2014 14:16:28 -0800
The patch titled
Subject: ipc,mqueue: remove limits for the amount of system-wide queues
has been added to the -mm tree. Its filename is
ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues.patch
This patch should soon appear at
http://ozlabs.org/~akpm/mmots/broken-out/ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues.patch
and later at
http://ozlabs.org/~akpm/mmotm/broken-out/ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues.patch
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/SubmitChecklist when testing your code ***
The -mm tree is included into linux-next and is updated
there every 3-4 working days
------------------------------------------------------
From: Davidlohr Bueso <[email protected]>
Subject: ipc,mqueue: remove limits for the amount of system-wide queues
93e6f119 ("ipc/mqueue: cleanup definition names and locations") added
global hardcoded limits to the amount of message queues that can be
created. While these limits are per-namespace, reality is that it ends up
breaking userspace applications. Historically users have, at least in
theory, been able to create up to INT_MAX queues, and limiting it to just
1024 is way too low and dramatic for some workloads and use cases. For
instance, Madars reports:
"This update imposes bad limits on our multi-process application. As our
app uses approaches that each process opens its own set of queues (usually
something about 3-5 queues per process). In some scenarios we might run
up to 3000 processes or more (which of-course for linux is not a problem).
Thus we might need up to 9000 queues or more. All processes run under
one user."
Other affected users can be found in launchpad bug #1155695:
https://bugs.launchpad.net/ubuntu/+source/manpages/+bug/1155695
Instead of increasing this limit, revert it entirely and fallback to the
original way of dealing queue limits -- where once a user's resource limit
is reached, and all memory is used, new queues cannot be created.
Signed-off-by: Davidlohr Bueso <[email protected]>
Reported-by: Madars Vitolins <[email protected]>
Cc: Doug Ledford <[email protected]>
Cc: Manfred Spraul <[email protected]>
Cc: <[email protected]> [3.5+]
Signed-off-by: Andrew Morton <[email protected]>
---
include/linux/ipc_namespace.h | 2 --
ipc/mq_sysctl.c | 18 ++++++++++++------
ipc/mqueue.c | 6 +++---
3 files changed, 15 insertions(+), 11 deletions(-)
diff -puN
include/linux/ipc_namespace.h~ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues
include/linux/ipc_namespace.h
---
a/include/linux/ipc_namespace.h~ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues
+++ a/include/linux/ipc_namespace.h
@@ -118,9 +118,7 @@ extern int mq_init_ns(struct ipc_namespa
* the new maximum will handle anyone else. I may have to revisit this
* in the future.
*/
-#define MIN_QUEUESMAX 1
#define DFLT_QUEUESMAX 256
-#define HARD_QUEUESMAX 1024
#define MIN_MSGMAX 1
#define DFLT_MSG 10U
#define DFLT_MSGMAX 10
diff -puN
ipc/mq_sysctl.c~ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues
ipc/mq_sysctl.c
---
a/ipc/mq_sysctl.c~ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues
+++ a/ipc/mq_sysctl.c
@@ -22,6 +22,16 @@ static void *get_mq(ctl_table *table)
return which;
}
+static int proc_mq_dointvec(ctl_table *table, int write,
+ void __user *buffer, size_t *lenp, loff_t *ppos)
+{
+ struct ctl_table mq_table;
+ memcpy(&mq_table, table, sizeof(mq_table));
+ mq_table.data = get_mq(table);
+
+ return proc_dointvec(&mq_table, write, buffer, lenp, ppos);
+}
+
static int proc_mq_dointvec_minmax(ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@@ -33,12 +43,10 @@ static int proc_mq_dointvec_minmax(ctl_t
lenp, ppos);
}
#else
+#define proc_mq_dointvec NULL
#define proc_mq_dointvec_minmax NULL
#endif
-static int msg_queues_limit_min = MIN_QUEUESMAX;
-static int msg_queues_limit_max = HARD_QUEUESMAX;
-
static int msg_max_limit_min = MIN_MSGMAX;
static int msg_max_limit_max = HARD_MSGMAX;
@@ -51,9 +59,7 @@ static ctl_table mq_sysctls[] = {
.data = &init_ipc_ns.mq_queues_max,
.maxlen = sizeof(int),
.mode = 0644,
- .proc_handler = proc_mq_dointvec_minmax,
- .extra1 = &msg_queues_limit_min,
- .extra2 = &msg_queues_limit_max,
+ .proc_handler = proc_mq_dointvec,
},
{
.procname = "msg_max",
diff -puN
ipc/mqueue.c~ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues
ipc/mqueue.c
--- a/ipc/mqueue.c~ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues
+++ a/ipc/mqueue.c
@@ -433,9 +433,9 @@ static int mqueue_create(struct inode *d
error = -EACCES;
goto out_unlock;
}
- if (ipc_ns->mq_queues_count >= HARD_QUEUESMAX ||
- (ipc_ns->mq_queues_count >= ipc_ns->mq_queues_max &&
- !capable(CAP_SYS_RESOURCE))) {
+
+ if (ipc_ns->mq_queues_count >= ipc_ns->mq_queues_max &&
+ !capable(CAP_SYS_RESOURCE)) {
error = -ENOSPC;
goto out_unlock;
}
_
Patches currently in -mm which might be from [email protected] are
ipcmqueue-remove-limits-for-the-amount-of-system-wide-queues.patch
mm-hugetlb-unify-region-structure-handling.patch
mm-hugetlb-improve-cleanup-resv_map-parameters.patch
mm-hugetlb-fix-race-in-region-tracking.patch
mm-hugetlb-remove-resv_map_put.patch
mm-hugetlb-use-vma_resv_map-map-types.patch
mm-hugetlb-improve-page-fault-scalability.patch
mm-hugetlb-improve-page-fault-scalability-fix.patch
mm-hugetlb-mark-some-bootstrap-functions-as-__init.patch
linux-next.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html