Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/ipc/mq_sysctl.c

  1 /*
  2  *  Copyright (C) 2007 IBM Corporation
  3  *
  4  *  Author: Cedric Le Goater <clg@fr.ibm.com>
  5  *
  6  *  This program is free software; you can redistribute it and/or
  7  *  modify it under the terms of the GNU General Public License as
  8  *  published by the Free Software Foundation, version 2 of the
  9  *  License.
 10  */
 11 
 12 #include <linux/nsproxy.h>
 13 #include <linux/ipc_namespace.h>
 14 #include <linux/sysctl.h>
 15 
 16 #ifdef CONFIG_PROC_SYSCTL
 17 static void *get_mq(struct ctl_table *table)
 18 {
 19         char *which = table->data;
 20         struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
 21         which = (which - (char *)&init_ipc_ns) + (char *)ipc_ns;
 22         return which;
 23 }
 24 
 25 static int proc_mq_dointvec(struct ctl_table *table, int write,
 26                             void __user *buffer, size_t *lenp, loff_t *ppos)
 27 {
 28         struct ctl_table mq_table;
 29         memcpy(&mq_table, table, sizeof(mq_table));
 30         mq_table.data = get_mq(table);
 31 
 32         return proc_dointvec(&mq_table, write, buffer, lenp, ppos);
 33 }
 34 
 35 static int proc_mq_dointvec_minmax(struct ctl_table *table, int write,
 36         void __user *buffer, size_t *lenp, loff_t *ppos)
 37 {
 38         struct ctl_table mq_table;
 39         memcpy(&mq_table, table, sizeof(mq_table));
 40         mq_table.data = get_mq(table);
 41 
 42         return proc_dointvec_minmax(&mq_table, write, buffer,
 43                                         lenp, ppos);
 44 }
 45 #else
 46 #define proc_mq_dointvec NULL
 47 #define proc_mq_dointvec_minmax NULL
 48 #endif
 49 
 50 static int msg_max_limit_min = MIN_MSGMAX;
 51 static int msg_max_limit_max = HARD_MSGMAX;
 52 
 53 static int msg_maxsize_limit_min = MIN_MSGSIZEMAX;
 54 static int msg_maxsize_limit_max = HARD_MSGSIZEMAX;
 55 
 56 static struct ctl_table mq_sysctls[] = {
 57         {
 58                 .procname       = "queues_max",
 59                 .data           = &init_ipc_ns.mq_queues_max,
 60                 .maxlen         = sizeof(int),
 61                 .mode           = 0644,
 62                 .proc_handler   = proc_mq_dointvec,
 63         },
 64         {
 65                 .procname       = "msg_max",
 66                 .data           = &init_ipc_ns.mq_msg_max,
 67                 .maxlen         = sizeof(int),
 68                 .mode           = 0644,
 69                 .proc_handler   = proc_mq_dointvec_minmax,
 70                 .extra1         = &msg_max_limit_min,
 71                 .extra2         = &msg_max_limit_max,
 72         },
 73         {
 74                 .procname       = "msgsize_max",
 75                 .data           = &init_ipc_ns.mq_msgsize_max,
 76                 .maxlen         = sizeof(int),
 77                 .mode           = 0644,
 78                 .proc_handler   = proc_mq_dointvec_minmax,
 79                 .extra1         = &msg_maxsize_limit_min,
 80                 .extra2         = &msg_maxsize_limit_max,
 81         },
 82         {
 83                 .procname       = "msg_default",
 84                 .data           = &init_ipc_ns.mq_msg_default,
 85                 .maxlen         = sizeof(int),
 86                 .mode           = 0644,
 87                 .proc_handler   = proc_mq_dointvec_minmax,
 88                 .extra1         = &msg_max_limit_min,
 89                 .extra2         = &msg_max_limit_max,
 90         },
 91         {
 92                 .procname       = "msgsize_default",
 93                 .data           = &init_ipc_ns.mq_msgsize_default,
 94                 .maxlen         = sizeof(int),
 95                 .mode           = 0644,
 96                 .proc_handler   = proc_mq_dointvec_minmax,
 97                 .extra1         = &msg_maxsize_limit_min,
 98                 .extra2         = &msg_maxsize_limit_max,
 99         },
100         {}
101 };
102 
103 static struct ctl_table mq_sysctl_dir[] = {
104         {
105                 .procname       = "mqueue",
106                 .mode           = 0555,
107                 .child          = mq_sysctls,
108         },
109         {}
110 };
111 
112 static struct ctl_table mq_sysctl_root[] = {
113         {
114                 .procname       = "fs",
115                 .mode           = 0555,
116                 .child          = mq_sysctl_dir,
117         },
118         {}
119 };
120 
121 struct ctl_table_header *mq_register_sysctl_table(void)
122 {
123         return register_sysctl_table(mq_sysctl_root);
124 }
125 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us