|
@@ -81,24 +81,28 @@ static int sysvipc_msg_proc_show(struct seq_file *s, void *it);
|
|
|
/*
|
|
|
* Scale msgmni with the available lowmem size: the memory dedicated to msg
|
|
|
* queues should occupy at most 1/MSG_MEM_SCALE of lowmem.
|
|
|
- * This should be done staying within the (MSGMNI , IPCMNI) range.
|
|
|
+ * Also take into account the number of nsproxies created so far.
|
|
|
+ * This should be done staying within the (MSGMNI , IPCMNI/nr_ipc_ns) range.
|
|
|
*/
|
|
|
static void recompute_msgmni(struct ipc_namespace *ns)
|
|
|
{
|
|
|
struct sysinfo i;
|
|
|
unsigned long allowed;
|
|
|
+ int nb_ns;
|
|
|
|
|
|
si_meminfo(&i);
|
|
|
allowed = (((i.totalram - i.totalhigh) / MSG_MEM_SCALE) * i.mem_unit)
|
|
|
/ MSGMNB;
|
|
|
+ nb_ns = atomic_read(&nr_ipc_ns);
|
|
|
+ allowed /= nb_ns;
|
|
|
|
|
|
if (allowed < MSGMNI) {
|
|
|
ns->msg_ctlmni = MSGMNI;
|
|
|
goto out_callback;
|
|
|
}
|
|
|
|
|
|
- if (allowed > IPCMNI) {
|
|
|
- ns->msg_ctlmni = IPCMNI;
|
|
|
+ if (allowed > IPCMNI / nb_ns) {
|
|
|
+ ns->msg_ctlmni = IPCMNI / nb_ns;
|
|
|
goto out_callback;
|
|
|
}
|
|
|
|