zoukankan      html  css  js  c++  java
  • IPC之mq_sysctl.c源码解读

    // SPDX-License-Identifier: GPL-2.0-only
    /*
     *  Copyright (C) 2007 IBM Corporation
     *
     *  Author: Cedric Le Goater <clg@fr.ibm.com>
     */
    
    #include <linux/nsproxy.h>
    #include <linux/ipc_namespace.h>
    #include <linux/sysctl.h>
    
    #ifdef CONFIG_PROC_SYSCTL
    static void *get_mq(struct ctl_table *table)
    {
    	char *which = table->data;
    	struct ipc_namespace *ipc_ns = current->nsproxy->ipc_ns;
    	which = (which - (char *)&init_ipc_ns) + (char *)ipc_ns;
    	return which;
    }
    
    static int proc_mq_dointvec(struct 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(struct 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_minmax(&mq_table, write, buffer,
    					lenp, ppos);
    }
    #else
    #define proc_mq_dointvec NULL
    #define proc_mq_dointvec_minmax NULL
    #endif
    
    static int msg_max_limit_min = MIN_MSGMAX;
    static int msg_max_limit_max = HARD_MSGMAX;
    
    static int msg_maxsize_limit_min = MIN_MSGSIZEMAX;
    static int msg_maxsize_limit_max = HARD_MSGSIZEMAX;
    
    static struct ctl_table mq_sysctls[] = {
    	{
    		.procname	= "queues_max",
    		.data		= &init_ipc_ns.mq_queues_max,
    		.maxlen		= sizeof(int),
    		.mode		= 0644,
    		.proc_handler	= proc_mq_dointvec,
    	},
    	{
    		.procname	= "msg_max",
    		.data		= &init_ipc_ns.mq_msg_max,
    		.maxlen		= sizeof(int),
    		.mode		= 0644,
    		.proc_handler	= proc_mq_dointvec_minmax,
    		.extra1		= &msg_max_limit_min,
    		.extra2		= &msg_max_limit_max,
    	},
    	{
    		.procname	= "msgsize_max",
    		.data		= &init_ipc_ns.mq_msgsize_max,
    		.maxlen		= sizeof(int),
    		.mode		= 0644,
    		.proc_handler	= proc_mq_dointvec_minmax,
    		.extra1		= &msg_maxsize_limit_min,
    		.extra2		= &msg_maxsize_limit_max,
    	},
    	{
    		.procname	= "msg_default",
    		.data		= &init_ipc_ns.mq_msg_default,
    		.maxlen		= sizeof(int),
    		.mode		= 0644,
    		.proc_handler	= proc_mq_dointvec_minmax,
    		.extra1		= &msg_max_limit_min,
    		.extra2		= &msg_max_limit_max,
    	},
    	{
    		.procname	= "msgsize_default",
    		.data		= &init_ipc_ns.mq_msgsize_default,
    		.maxlen		= sizeof(int),
    		.mode		= 0644,
    		.proc_handler	= proc_mq_dointvec_minmax,
    		.extra1		= &msg_maxsize_limit_min,
    		.extra2		= &msg_maxsize_limit_max,
    	},
    	{}
    };
    
    static struct ctl_table mq_sysctl_dir[] = {
    	{
    		.procname	= "mqueue",
    		.mode		= 0555,
    		.child		= mq_sysctls,
    	},
    	{}
    };
    
    static struct ctl_table mq_sysctl_root[] = {
    	{
    		.procname	= "fs",
    		.mode		= 0555,
    		.child		= mq_sysctl_dir,
    	},
    	{}
    };
    
    struct ctl_table_header *mq_register_sysctl_table(void)
    {
    	return register_sysctl_table(mq_sysctl_root);
    }
    

      

  • 相关阅读:
    Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    用户画像——“打标签”
    python replace函数替换无效问题
    python向mysql插入数据一直报TypeError: must be real number,not str
    《亿级用户下的新浪微博平台架构》读后感
    【2-10】标准 2 维表问题
    【2-8】集合划分问题(给定要分成几个集合)
    【2-7】集合划分问题
    【2-6】排列的字典序问题
    【2-5】有重复元素的排列问题
  • 原文地址:https://www.cnblogs.com/still-smile/p/12040609.html
Copyright © 2011-2022 走看看